簡體   English   中英

Java:如何將jar之外的.properties文件包含到類路徑中?

[英]Java : How to include a .properties file that is outside of jar into classpath?

我們希望將.properties文件保留在jar之外,以便我們可以更改模塊中使用的屬性,而不必重新安裝模塊。

在Java 8之前,我們曾經運行腳本並以下面的方式包含.properties文件,並且該文件可以正常工作。 但是由於更新到Java 8時,在類路徑中包含.properties文件的這種方式不起作用,這意味着Java程序無法找到.properties文件。

我運行Java項目的腳本:

/usr/java/latest/bin/java -d64 -Xms1G -Xmx16G -XX:MaxPermSize=128m -XX:-UseGCOverheadLimit -cp "/online/sand/lib/client-api-1.0.0.jar:/online/sand/oap_pub/lib/*:/online/sand/oap/oap_dw/run/client_api/application.properties" team.online.client.api.MasterProcessor  | tee -a client_api.log

我們正在使用Sping上下文以這種方式拾取屬性文件:

<util:properties id="app_props"
                 location="classpath*:/application.properties" />

然后,以這種方式使用appilcation.properties文件中的一個屬性(在許多不同的文件中):

@Value( "#{app_props[\"SERVICE_PATH_GET_METADATA\"]?:''}" )
private String metadataServicePath;

尋找一種方法來將.properties文件保留在jar之外並放在類路徑中,以便Spring上下文找到該文件。

除了使用以外,還有其他方法嗎? 我們需要保留jar中排除的屬性文件

class.getClassLoader( ).getResourceAsStream( "application.properties" );

提前致謝。

如果您使用的是基於xml的配置,請使用此選項

<context:property-placeholder location="classpath:application.properties"/>

然后,只要它在類路徑中而不在jar中,它將從任何地方加載屬性。 您必須將其作為$ CLASSPATH:application.properties包含在類路徑中

對於基於注釋的@PropertySource("classpath:application.properties")這里有一個Java示例:使用spring注釋讀取屬性文件

我找到了一種解決方法,可以通過使用“ ::”而不是“:”在腳本中進行更改以運行程序。

有個主意:

==> java和javac以不同的方式處理類路徑設置, 如果類路徑包含雙類路徑定界符(Unix下為“ ::”,Windows下為“ ;;”) ,則javac在/中搜索類。

從這個鏈接看來,這對我來說很有說服力,並且行之有效。 請在這里看看: https : //bugs.openjdk.java.net/browse/JDK-4809833

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM