tillias
tillias

Reputation: 1275

Maven profile and artifact version

Assume we have maven multimodule project "Foo":

Foo
|-web-module-war
  |-dependency-jar

There are two profiles defined for moduleC:

    <profile>
        <id>poll-some-external-service</id>
        <properties>
            <dependency-jar.poll.configured>true</dependency-jar.poll.configured>
        </properties>
    </profile>
    <profile>
        <id>produce-some-product</id>
        <properties>
            <dependency-jar.poll.configured>false</dependency-jar.poll.configured>
        </properties>
    </profile>

Now we run two builds:

  1. mvn clean package -P poll-some-external-service
  2. mvn clean package -P produce-some-product

First build produce following artifacts:

web-module-war-1.0.0-poll.war
dependency-jar-1.0.0-poll.war

Second build produce following artifacts:

web-module-war-1.0.0-produce.war
dependency-jar-1.0.0-produce.war

This means that war file contains web application which works in a different way based on selected profile.

Naming is based on the following configuration in the parent pom.xml:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.6</version>
        <configuration>
            <jarName>${project.build.finalName}${foo.build.info}</jarName>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.6</version>
        <configuration>
            <warName>${project.build.finalName}${foo.build.info}</warName>
        </configuration>
    </plugin>

How can I deploy these artifacts into Nexus? -poll/-produce part is stripped during deployment. This means we have two different applications of the same version but we can deploy only one of them

Thanks

Upvotes: 1

Views: 1806

Answers (1)

trust_nickol
trust_nickol

Reputation: 2114

Instead of changing the name use a classifier

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
        <classifier>poll</classifier>
    </configuration>
</plugin>

Your profile for the pom should look similar to the following example. Note that you have to change the dependencies by using the profile too.

    <profile>
        <id>poll</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <classifier>poll</classifier>
                    </configuration>
                </plugin>
            </plugins>
            <dependencies>
                <dependency>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>dependency-jar</artifactId>
                    <classifier>poll</classifier>
                </dependency>
            </dependencies>
        </build>
    </profile>

Upvotes: 4

Related Questions