IdleCashew
IdleCashew

Reputation: 91

In maven, how to override plugin configuration in settings.xml

I want to override a particular plugin configuration that's defined in the pom.xml. I don't want to modify the pom.xml for various reasons. Is there a way to define a config attribute for that plugin in settings.xml that override corresponding pom.xml plugin config?

In the below example, you'll notice that the plugin xx-plugin is defined in profile1 in pom.xml. In my settings.xml I've already defined profile2 to override property prop1 from pom.xml. But how to override config3. I apologize if this is a silly question. I am a little new to maven.

This is what my pom.xml looks like:

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

This is what my settings.xml looks like:

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

Upvotes: 8

Views: 6063

Answers (2)

oli-ver
oli-ver

Reputation: 362

If you do not want to change the pom.xml for a plugin you can set the configuration as JVM parameter when running maven as stated in the Generic Configuration chapter of the Maven Guide to Configuring Plugins.

Example:

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

Example for the wildfly plugin (this is where I needed it and did not want to change the pom.xml of a demo project when deploying to a server group in a domain context):

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

The maven documentation also states that most plugins define help goals to explain users how to configure them.

Exaple for the wildfly plugin:

mvn wildfly:help -Dgoal=deploy -Ddetail

Upvotes: 1

szczepanpp
szczepanpp

Reputation: 829

AFAIK you can only override properties with settings.xml profiles. You'd have to change your plugin's configuration to use a property instead of a fixed value:

<!-- 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>

Remember that profiles with activeByDefault set to true will get deactivated if any other profile gets activated in your build invocation. See http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Upvotes: 4

Related Questions