繁体   English   中英

如何在多个独立的Maven项目之间共享configuration.properties文件?

[英]How to share configuration.properties file across multiple independent maven projects?

我有多个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>

您可以在这里使用Properties Maven插件。 这将使您可以在外部文件中定义属性,并且插件将读取该文件。

使用此配置:

<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。

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

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

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

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

通过这种方式,这将在两种情况下均有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM