如何跨多个独立的maven项目共享configuration.properties文件?

时间:2017-06-25 16:16:12

标签: java maven

我有多个maven项目。 其中一个是核心项目,其中包含其他项目使用的许多类。

- Core project
  - config.properties file
  - SingletonClass
- Project A
  - ClassXX
- Project B
  - ClassYY

我的核心项目中有一个properties.config文件。 在这个核心项目中,我有一个Singleton类,用于加载properties.config文件元素。

Singleton类的核心项目使用以下相对路径加载属性文件:

"/config.properties"

这意味着它将在当前工作目录中搜索此文件。 这也意味着如果我使用单例类,当前工作目录将是不同的。 例如,如果项目A使用我的单例类加载配置值,它将尝试在其根文件夹中找到config.properties文件,因此它将无法找到它,因为真正的路径是不同的(根文件夹)核心项目)。

所以我的问题是:

有没有办法在多个maven项目之间共享config.properties文件?

编辑: 感谢davidxxx, 最好的方法是使用

InputStream is = MySingleton.class.getResourceAsStream("/conf/singleton.properties");

为了让它工作,我还创建了一个资源文件夹(conf)并在构建路径中设置它。 我还必须在我的核心项目pom.xml中指定要打包的内容如下:

<resources>
    <resource>
        <directory>src/conf</directory>
        <includes>
            <include>*.properties</include>
        </includes>
    </resource>
</resources>

2 个答案:

答案 0 :(得分:1)

您可以使用Properties Maven插件here。这将允许您在外部文件中定义属性,插件将读取此文件。

使用此配置:

<build>
<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-1</version>
        <executions>
            <execution>
                <phase>initialize</phase>
                <goals>
                    <goal>read-project-properties</goal>
                </goals>
                <configuration>
                    <files>
                        <file>my-file.properties</file>
                    </files>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>
</build>

如果您在属性文件中有以下行:

spring-version=1.0
mysql-version=4.0.0

然后就像你在pom.xml中写下以下几行一样:

<properties>
  <spring-version>1.0</spring-version>
  <mysql-version>4.0.0</mysql-version>
</properties>

使用此插件,您将获得以下好处:

  1. 轻松设置一长串属性
  2. 修改这些属性的值,而不修改父pom.xml。

答案 1 :(得分:1)

  

这意味着它将在当前工作中搜索此文件   DIR。这也意味着如果我使用单例类,当前   工作目的会有所不同。

问题在于您用于检索属性文件的方式 如果您的单例需要作为JAR中的依赖项导出,则不必使用当前工作目录来加载属性文件。
属性文件应该在类路径中,单例类可以使用它的类加载器来获取资源。

例如,假设属性位于添加到运行时类路径的conf文件夹中,在单例类中,您可以编写类似的内容来加载资源:

InputStream is = MySingleton.class.getResourceAsStream("/conf/singleton.properties");

通过这种方式,这将适用于两种情况。