Question

How to override Maven 3.0 parent profile properties from child pom?

I want to be override profile properties from a parent pom. I've used help:effective-pom -Pjmeter and can see that the child properties are not being picked up and tried many various permutations all without success. I expect the parents properties to be overridden by the child properties.

Parent pom profile:

<profile>
  <id>jmeter</id>
  <properties combine.self="override">
    <maven.jmeter.phase>verify</maven.jmeter.phase>
    <maven.jmeter.goal>jmeter</maven.jmeter.goal>
    <!-- We use the ${basedir} to avoid NullPointer errors when src/test/jmeter doesn't exist -->
    <!-- when running jmeter test the default to set in the child pom is  ${basedir}/src/test/jmeter  -->
    <maven.jmeter.testFilesDirectory>${basedir}</maven.jmeter.testFilesDirectory>
    <maven.jmeter.jMeterTestFile>**/*.jmx</maven.jmeter.jMeterTestFile>
    <maven.jmeter.excludeJmeterTestFile>NOT_NULL</maven.jmeter.excludeJmeterTestFile>
    <maven.jmeter.testResultsTimestamp>false</maven.jmeter.testResultsTimestamp>
    <maven.jmeter.server>localhost</maven.jmeter.server>
    <maven.jmeter.port>8080</maven.jmeter.port>
  </properties>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>com.lazerycode.jmeter</groupId>
          <artifactId>jmeter-maven-plugin</artifactId>
          <version>${jmeter.version}</version>
          <executions>
            <execution>
              <id>jmeter-tests</id>
              <phase>${maven.jmeter.phase}</phase>
              <goals>
                <goal>${maven.jmeter.goal}</goal>
              </goals>
              <configuration>
                <testFilesDirectory>${maven.jmeter.testFilesDirectory}</testFilesDirectory>
                <testFilesIncluded>
                  <jMeterTestFile>${maven.jmeter.jMeterTestFile}</jMeterTestFile>
                </testFilesIncluded>
                <testFilesExcluded>
                  <excludeJmeterTestFile>${maven.jmeter.excludeJmeterTestFile}</excludeJmeterTestFile>
                </testFilesExcluded>
                <testResultsTimestamp>${maven.jmeter.testResultsTimestamp}</testResultsTimestamp>
                <propertiesUser>
                  <!-- server and port must be defined (and used) in the JMeter jmx file as User Defined Variables
                        ${__P(server,localhost)}
                        ${__P(port,80)}
                       See http://jmeter.apache.org/usermanual/component_reference.html#User_Defined_Variables
                           http://jmeter.apache.org/usermanual/test_plan.html#using_variables
                           http://jmeter.apache.org/usermanual/functions.html#__P
                           http://jmeter.apache.org/usermanual/best-practices.html#parameterising_tests
                  -->
                  <server>${maven.jmeter.server}</server>
                  <port>${maven.jmeter.port}</port>
                </propertiesUser>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</profile>

and then in the child pom:

<profile>
  <id>jmeter</id>
  <activation><activeByDefault>false</activeByDefault></activation>
  <properties>
    <maven.jmeter.testFilesDirectory>${project.basedir}/src/test/jmeter</maven.jmeter.testFilesDirectory>
    <!-- csv based JMeter tests result in one graph in Jenkins, we want a graph per test -->
    <maven.jmeter.excludeJmeterTestFile>**/KRAD.jmx</maven.jmeter.excludeJmeterTestFile>
  </properties>
</profile>
Was it helpful?

Solution

I'm not sure properties are overridden that way. Either way, the plugin will not run as you have it, since you only define <pluginManagement> and no straight direct <plugins> child under <build>. If you don't want your plugin to run in the parent, just define the <plugins> tags in the children where you do want this running as such:

<profile>
  <id>jmeter</id>
  <activation><activeByDefault>false</activeByDefault></activation>
  <build>
    <plugins>
      <plugin>
        <groupId>com.lazerycode.jmeter</groupId>
        <artifactId>jmeter-maven-plugin</artifactId>
        <configuration>
          <testFilesDirectory>${maven.jmeter.jMeterTestFile}</testFilesDirectory>
          <!-- csv based JMeter tests result in one graph in Jenkins, we want a graph per test -->
          <testFilesExcluded>
            <excludeJmeterTestFile>${maven.jmeter.excludeJmeterTestFile}</excludeJmeterTestFile>
          </testFilesExcluded>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>

Hope this helps.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top