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

时间:2015-03-27 16:46:53

标签: java maven maven-3 maven-profiles

我想提一下我在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之外。

1 个答案:

答案 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>
    

    遗憾的是,在这里我无法让插件读取目录中的所有属性文件,但我觉得这很好。

  • 我还需要删除上面的插件定义在Eclipse中为我提供的错误(Plugin execution not covered by lifecycle configuration)。为此,我遵循了following post
  • 中的说明

通过这些步骤,我需要的属性可用于使用它们的插件。

注意:实际上属性是在compile maven命令之后加载的,但这对我来说已经足够了,因为所有依赖于属性的目标都是在目标序列中compile目标之后执行的在我所有的情况下打电话。