Java jar应用程序的外包属性
我使用:它很好,简单有效Java jar应用程序的外包属性,java,apache,maven,properties,Java,Apache,Maven,Properties,我使用:它很好,简单有效 { private static final String ENV_FILE = "basedir_conf_dir"; private static final String CONFIGURATION_FILE = "configuration/appli.properties"; private static final String DEFAULT_CONFIGURATION_FILE = "configuration/default-appli.propert
{
private static final String ENV_FILE = "basedir_conf_dir";
private static final String CONFIGURATION_FILE = "configuration/appli.properties";
private static final String DEFAULT_CONFIGURATION_FILE = "configuration/default-appli.properties";
private static ConfigurationManager configurationManager = null;
private CompositeConfiguration compositeConfiguration;
private ConfigurationManager() throws ConfigurationException {
Parameters params1 = new Parameters();
compositeConfiguration = new CompositeConfiguration();
ConfigurationBuilder<PropertiesConfiguration> builder1 = new FileBasedConfigurationBuilder<PropertiesConfiguration>(PropertiesConfiguration.class).configure(params1.fileBased()
.setURL(this.getClass().getClassLoader().getResource(CONFIGURATION_FILE)).setListDelimiterHandler(new DefaultListDelimiterHandler(';')));
Configuration fichierConfigEnvironnement;
fichierConfigEnvironnement = builder1.getConfiguration();
compositeConfiguration.addConfiguration(fichierConfigEnvironnement);
Parameters params2 = new Parameters();
ConfigurationBuilder<PropertiesConfiguration> builder2 = new FileBasedConfigurationBuilder<PropertiesConfiguration>(PropertiesConfiguration.class).configure(params2.fileBased()
.setURL(this.getClass().getClassLoader().getResource(DEFAULT_CONFIGURATION_FILE)).setListDelimiterHandler(new DefaultListDelimiterHandler(';')));
Configuration fichierConfigEquipeDev = builder2.getConfiguration();
compositeConfiguration.addConfiguration(fichierConfigEquipeDev);
}
我想:
- 在我的eclipse环境中,src/main/resources/configuration
- 在basedir中的我的包中(与我的jar文件处于同一级别)
——包已完成
|_myApplication.jar
|_应用属性
|_默认应用程序属性
您能帮我用Maven更改属性文件的url吗?将您的“default.properties”放在src/main/resources/configuration中。然后在build部分中添加到pom.xml:
<resources>
<resource>
<directory>${basedir}/src/main/resources/configuration</directory>
<includes>
<include>default.properties</include>
</includes>
<targetPath>${project.build.directory}</targetPath>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
${basedir}/src/main/resources/configuration
默认值。属性
${project.build.directory}
${basedir}/src/main/resources
有关更多详细信息,请参阅。属性应位于
src/main/resources
如果您仅在测试中需要它们,则if将成为结果jar的一部分。将它们放入src/test/resources
确定,但我希望在安装应用程序后能够更改属性,而无需重新编译所有内容。只需更改属性?不要重复默认设置!首先,我不确定如果要添加不同的资源目录,是否需要包含默认目录。此外,如果要修改默认目录(如这里的src/main/resources/configuration),最好列出每个资源目录(包括默认目录)。配置文件夹是src/main/resources的子文件夹,因此无需进行补充配置。约定在src/main/resources
中有资源,无需明确列出每个资源会使pom的文件包含许多不需要的行,这违反了范例约定优于配置
。如何覆盖目标路径?我的字段正确地位于basedir,但我有这个stacktrace和“我的属性”字段的url不正确。如何动态更改它<代码>错误:发生JNI错误,请检查您的安装并重试线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/commons/configuration2/ex/ConfigurationException位于java.lang.Class.getDeclaredMethods0(本机方法),位于java.lang.Class.privateGetDeclaredMethods(未知源)java.lang.Class.privateGetMethodRecursive(未知源代码)java.lang.Class.getMethod0
<resources>
<resource>
<directory>${basedir}/src/main/resources/configuration</directory>
<includes>
<include>default.properties</include>
</includes>
<targetPath>${project.build.directory}</targetPath>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>