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>