Maven:插件部分中使用的基于配置文件的属性

Maven: profile-based properties used in plugins section

我想提一下我在 Maven 配置方面相对较新。

我的情况:

这是文件系统:

<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= 之后执行] 在我所有的案例中,目标调用顺序。