我想提一下我在Maven配置中相对较新。
我的情况:
properties
个文件中定义了这些配置。这是那些文件系统:
<my-project-root>
---profiles
------local
---------app.properties
------dev
---------app.properties
------test
---------app.properties
我在pom.xml
中使用以下逻辑加载相应的属性文件:
<profiles>
<profile>
<id>local</id>
<!-- The development profile is active by default -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<build.profile.id>local</build.profile.id>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<build.profile.id>dev</build.profile.id>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<build.profile.id>prod</build.profile.id>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<build.profile.id>test</build.profile.id>
</properties>
</profile>
</profiles>
<build>
<finalName>MyProject</finalName>
<plugins>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>profiles/${build.profile.id}</directory>
</resource>
</resources>
</build>
使用此配置,我几乎可以在任何地方使用当前配置文件的相应属性。到处都是<plugins>
部分。我非常想加载例如我的数据库URL或来自这些属性文件的凭证,但如果我将它们包含在app.properties
中,则不会在插件部分中对它们进行评估(例如,我得到${endpoint}
的值作为数据库端点)。
如何从<plugins>
部分中可访问的配置文件的文件中加载属性?
PS:是的,如果我将这些属性直接添加到pom.xml
作为<profiles>
标记下的属性,则可以访问它们,但我宁愿将密码保留在pom之外。
答案 0 :(得分:1)
我能够做我想做的事。我使用properties-maven-plugin
链接起来,比如this answer。
我做的是以下内容:
我添加了properties-maven-plugin
来读取我需要加载的文件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>profiles/${build.profile.id}/app.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
遗憾的是,在这里我无法让插件读取目录中的所有属性文件,但我觉得这很好。
Plugin execution not covered by lifecycle configuration
)。为此,我遵循了following post。通过这些步骤,我需要的属性可用于使用它们的插件。
注意:实际上属性是在compile
maven命令之后加载的,但这对我来说已经足够了,因为所有依赖于属性的目标都是在目标序列中compile
目标之后执行的在我所有的情况下打电话。