在maven中,如何在settings.xml中覆盖插件配置

时间:2017-02-09 20:19:32

标签: maven maven-3 maven-plugin

我想覆盖pom.xml中定义的特定插件配置。我不想出于各种原因修改pom.xml。有没有办法在settings.xml中为该插件定义一个覆盖相应pom.xml插件配置的配置属性?

在下面的示例中,您会注意到插件xx-plugin在pom.xml中的profile1中定义。在我的settings.xml中,我已经定义了profile2来覆盖pom.xml中的属性prop1。但是如何覆盖config3。如果这是一个愚蠢的问题,我道歉。我对maven有点新鲜。

这就是我的pom.xml:

<profile>
  <id>profile1</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>com.xx.yyy</groupId>
        <artifactId>xx-plugin</artifactId>
        <executions>
          <execution>
            <id>xx-install</id>
            <phase>install</phase>
            <goals>
              <goal>xx-install</goal>
            </goals>
            <configuration>
              <config1>AAA</config1>
              <config2>BBB</config2>
              <config3>CCC</config3> <!-- I want to override this with value DDD -->
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</profile>

这就是我的settings.xml:

<profile>
    <id>profile2</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <prop1>overriden-value</prop1> <!-- This works -->
    </properties>
    <!-- Somehow override config3 here -->
    <!-- <config3>DDD</config3> -->
</profile>

2 个答案:

答案 0 :(得分:0)

AFAIK您只能使用settings.xml个人资料覆盖属性。您必须更改插件的配置才能使用属性而不是固定值:

<!-- define your property -->
<properties>
      <prop1>CCC</prop1>
</properties>

<profile>
  <id>profile1</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <build>
    <plugins>
      <plugin>
        <groupId>com.xx.yyy</groupId>
        <artifactId>xx-plugin</artifactId>
        <executions>
          <execution>
            <id>xx-install</id>
            <phase>install</phase>
            <goals>
              <goal>xx-install</goal>
            </goals>
            <configuration>
              <config1>AAA</config1>
              <config2>BBB</config2>
              <config3>${prop1}</config3> <!-- I want to override this with value DDD -->
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</profile>

请注意,如果在构建调用中激活了任何其他配置文件,则activeByDefault设置为true的配置文件将被停用。见http://maven.apache.org/guides/introduction/introduction-to-profiles.html

答案 1 :(得分:0)

如果您不想更改插件的pom.xml,则可以按照Generic Configuration chapterMaven Guide to Configuring Plugins中所述,在运行maven时将配置设置为JVM参数。

示例:

mvn my-plugin:my-goal -Dplugin.property=ABC

wildfly插件的示例(这是我需要的地方,在域上下文中部署到服务器组时不想更改演示项目的pom.xml):

mvn clean install wildfly:deploy -Dwildfly.serverGroups=<server-group-name>

maven文档还指出,大多数插件都定义了help goals来解释用户如何配置它们。

wildfly插件的示例:

mvn wildfly:help -Dgoal=deploy -Ddetail