Maven same property for profile

I have a problem with the maven property for each profile. I have two profiles, each of which has the same property "prop.key" with different values. When I call mvn clean package -PA -PB or mvn clean package -PB -PA , both use the same value of "B-1.0-SNAPSHOT". I am using maven 3.0.4.

Below is my POM:

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.test.module</groupId> <artifactId>test-module</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <properties> <prop.key>UNKNOWN</prop.key> </properties> <profiles> <profile> <id>A</id> <properties> <prop.key>A-${project.version}</prop.key> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.2</version> <executions> <execution> <id>A</id> <phase>package</phase> <configuration> <tasks name="a" description="a-desc"> <echo message="RUN A = ${prop.key}" level="info"/> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>B</id> <properties> <prop.key>B-${project.version}</prop.key> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.2</version> <executions> <execution> <id>B</id> <phase>package</phase> <configuration> <tasks name="b" description="b-desc"> <echo message="RUN B = ${prop.key}" level="info"/> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project> 

I found a similar topic , but with the opposite result! Is this a bug or a maven function?

Thanks for any suggestions and help.

+4
source share
2 answers

You can write mvn package -PA,B for short.

The result is the same: [echo] RUN A = B-1.0-SNAPSHOT and [echo] RUN B = B-1.0-SNAPSHOT

This is the correct maven behavior.

One property can have only one specific value for each run. You can overwrite the "default" with the version in the profile. But if you redefine it in two profiles and activate both, one of the profiles “wins”.

It is not possible to have the same profile value for the same property. Profiles do not have their own variable. Properties are always global.

+3
source

I think you will get this behavior because the last option for the profile is selected. Try

 mvn clean package -PA,B 

See Introducing Maven into Profiles .

Profiles can be explicitly specified using the -P CLI option.

This option takes an argument, which is a comma-delimited list of identifier profiles to use. When this option is specified, no other profiles than those specified in the option argument.

0
source

Source: https://habr.com/ru/post/1484190/


All Articles