Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Define different value per profile for same Maven property

Tags:

maven

I'm facing a problem with maven property per profiles. I have two profiles, each one has the same property 'prop.key' with different values. When I call mvn clean package -PA -PB or mvn clean package -PB -PA both are using the same value 'B-1.0-SNAPSHOT'. I'm using maven 3.0.4.

Below 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 have found 'similar topic' but with opposite result! Is it a bug or a feature of maven?

like image 461
Paweł Dulęba Avatar asked Oct 22 '22 08:10

Paweł Dulęba


1 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 behaviour of maven.

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

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

like image 66
Marc von Renteln Avatar answered Oct 24 '22 02:10

Marc von Renteln