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;
寻找一种方法将 the.properties 文件保留在 jar 之外并放在类路径中,以便 Spring 上下文找到该文件。
他们除了使用还有其他方法吗?我们需要将属性文件从 jar
中排除
class.getClassLoader( ).getResourceAsStream( "application.properties" );
提前致谢。
如果您使用基于 xml 的配置
,请使用此选项
<context:property-placeholder location="classpath:application.properties"/>
然后它将从任何地方加载属性,只要它在 class 路径中而不是在 jar 中。您必须将其作为 $CLASSPATH:application.properties
包含在 class 路径中
对于基于注释的,@PropertySource("classpath:application.properties")
这里有一个样本
我找到了一种变通方法,通过 使用“::” 而不是“:”来更改 运行 程序的脚本。
明白了:
==> java 和 javac 以不同的方式处理类路径设置,
javac 在 / 中搜索 类 如果类路径包含双类路径定界符(Unix 下为“::”,Windows 下为“;;”)。
从这个 link 看来对我来说很有说服力并且行之有效。请看这里:
https://bugs.openjdk.java.net/browse/JDK-4809833
我们希望将 .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;
寻找一种方法将 the.properties 文件保留在 jar 之外并放在类路径中,以便 Spring 上下文找到该文件。
他们除了使用还有其他方法吗?我们需要将属性文件从 jar
中排除class.getClassLoader( ).getResourceAsStream( "application.properties" );
提前致谢。
如果您使用基于 xml 的配置
,请使用此选项<context:property-placeholder location="classpath:application.properties"/>
然后它将从任何地方加载属性,只要它在 class 路径中而不是在 jar 中。您必须将其作为 $CLASSPATH:application.properties
包含在 class 路径中对于基于注释的,@PropertySource("classpath:application.properties")
这里有一个样本
我找到了一种变通方法,通过 使用“::” 而不是“:”来更改 运行 程序的脚本。
明白了:
==> java 和 javac 以不同的方式处理类路径设置, javac 在 / 中搜索 类 如果类路径包含双类路径定界符(Unix 下为“::”,Windows 下为“;;”)。
从这个 link 看来对我来说很有说服力并且行之有效。请看这里: https://bugs.openjdk.java.net/browse/JDK-4809833