我有多个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>
答案 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 :(得分:1)
这意味着它将在当前工作中搜索此文件 DIR。这也意味着如果我使用单例类,当前 工作目的会有所不同。
问题在于您用于检索属性文件的方式
如果您的单例需要作为JAR中的依赖项导出,则不必使用当前工作目录来加载属性文件。
属性文件应该在类路径中,单例类可以使用它的类加载器来获取资源。
例如,假设属性位于添加到运行时类路径的conf文件夹中,在单例类中,您可以编写类似的内容来加载资源:
InputStream is = MySingleton.class.getResourceAsStream("/conf/singleton.properties");
通过这种方式,这将适用于两种情况。