Maven:插件部分中使用的基于配置文件的属性
Maven: profile-based properties used in plugins section
我想提一下我在 Maven 配置方面相对较新。
我的情况:
- 我使用 Maven 3.0.5 构建 J2E 应用程序
- 应用程序部署在四种不同的环境中:local、dev、test 和 prod
- 我使用 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 中删除.
我能够做我想做的事。我使用了 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>
遗憾的是,在这里我无法让插件读取目录中的所有 属性 文件,但我觉得这已经足够了。
- 我还需要删除上面插件定义在 Eclipse 中给我的错误 (
Plugin execution not covered by lifecycle configuration
)。为此,我遵循了 following post. 的说明
通过这些步骤,我需要的属性可用于使用它们的插件。
注意:实际上属性是在 compile
maven 命令之后加载的,但这对我来说已经足够了,因为我所有的 属性-dependent 目标都将在 [=14= 之后执行] 在我所有的案例中,目标调用顺序。
我想提一下我在 Maven 配置方面相对较新。
我的情况:
- 我使用 Maven 3.0.5 构建 J2E 应用程序
- 应用程序部署在四种不同的环境中:local、dev、test 和 prod
- 我使用 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 中删除.
我能够做我想做的事。我使用了 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>
遗憾的是,在这里我无法让插件读取目录中的所有 属性 文件,但我觉得这已经足够了。
- 我还需要删除上面插件定义在 Eclipse 中给我的错误 (
Plugin execution not covered by lifecycle configuration
)。为此,我遵循了 following post. 的说明
通过这些步骤,我需要的属性可用于使用它们的插件。
注意:实际上属性是在 compile
maven 命令之后加载的,但这对我来说已经足够了,因为我所有的 属性-dependent 目标都将在 [=14= 之后执行] 在我所有的案例中,目标调用顺序。