Maven: If sentences in pom.xml in the property tag

A much better approach would be to use profile activations.

<profiles>
  <profile>
    <id>was.base.v60</id>
    <activation>
      <property>
        <name>env.WAS60_HOME</name>
      </property>
    </activation>
    <dependencies>
      <dependency>
        ....     
        <systemPath>${env.WAS60_HOME}/java/jre/lib/xml.jar</systemPath>
      </dependency>
      .....    
    </dependencies>
  </profile>
  <profile>
    <id>was.base.v85</id>
    <activation>
      <property>
        <name>env.WAS85_HOME</name>
      </property>
    </activation>
    <dependencies>
      <dependency>
        ....     
        <systemPath>${env.WAS85_HOME}/java/jre/lib/xml.jar</systemPath>
      </dependency>
      .....    
    </dependencies>
  </profile>
</profiles>

Update:

My preferred way to use profiles is to have a default set of properties in my POM and then override these on demand using profiles in my settings file.

This approach is easy to do explicitly by using the "-s" and "-P" commandline parameters:

mvn -s $PROJECT_SETTINGS -P myProfile ....

This approach is easy to maintain in Jenkins using Config File Provider plugin which enables a GUI for editing the various settings files I use for each project.

Update 2:

Here's an example of how I setup my builds. The POM contains a section with the default property values. And I setup one or more pfiles to over-ride these values:

<project>
  <properties>
     <my.property1>hello</my.property1>
     <my.property2>world</my.property2>
     ..
  </properties>
  ..

  <build>
    <profiles>
      <profile>
        <id>build_in_spanish</id>
        <properties>
          <my.property1>hola</my.property1>
          <my.property2>mundo</my.property2>
          ..
        </properties>
      </profile>
      <profile>
        <id>build_in_irish</id>
        <properties>
          <my.property1>dia dhuit</my.property1>
          <my.property2>an domhain</my.property2>
          ..
        </properties>
      </profile>
    <profiles>
  </build>
</project>

So in this example the build defaults to English. To run the build with the settings in Spanish

mvn -P build_in_spanish ...

Note:

  • Profiles can be in the POM or in a separated settings file. The latter approach gives the most flexibility.
  • Profiles can be explicitly enabled (using the "-P" command line option or by attempting to discover the environment it sits within. This is a design choice)

usage of tasks inside properties tag is wired , use maven-antrun plugin instead. you can set maven properties with

http://maven.apache.org/plugins/maven-antrun-plugin/

<build>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
<executions>
  <execution>
    <id>ftp</id>
    <phase>package</phase>
    <goals>
      <goal>run</goal>
    </goals>
    <configuration>
      <tasks>
        <taskdef resource="net/sf/antcontrib/antcontrib.properties"
          classpathref="maven.plugin.classpath" />
        <if>
          <equals arg1="${ftp}" arg2="true" />
          <then>
            <echo message="The value of property ftp is true" />
          </then>
          <else>
            <echo message="The value of property ftp is not true" />
          </else>
        </if>

      </tasks>
     <exportAntProperties>true</exportAntProperties>
    </configuration>
  </execution>
</executions>
<dependencies>
  <dependency>
    <groupId>ant-contrib</groupId>
    <artifactId>ant-contrib</artifactId>
    <version>20020829</version>
  </dependency>
</dependencies>
  </plugin>
</build>

Apparently there is no way to do a proper IF-THEN-ELSE sentence in Maven. At least none that I found.

The closest thing I found was using the "activation" tag. which will activate the profile if the condition in it is met.

There is some bug on multiple conditions in Maven 2.0.X, not sure what's the status of it now -

http://jira.codehaus.org/browse/MNG-4565

So, a code example is answered on the question here -

Maven 2: Run maven-replacer-plugin with conditional replacement value?

But if you want to do something like << IF ... Then ... Else >> You're going to hit you head on a wall doing it. There are other ways, of course and I assume it is done in purpose, so you'll have to follow Maven way.

Thanks to all that tried to help Elyahu


try to replace \> with /> in lines

<equals arg1="${env.WAS60_HOME}" arg2=""\>