Maven - Calling a module from Parent POM based on the profile

3.6k views Asked by At

I have a module which is supposed to produce two artifacts (war's). The only difference between the two WAR's is the web.xml being used.
I did this with the help of Maven Profiles...

<parent>
    <artifactId>com</artifactId>
    <groupId>myProj</groupId>
    <version>1.0</version>
</parent>

<groupId>myProj.module1</groupId>
<artifactId>module1</artifactId>
<version>1.0</version>
<packaging>war</packaging>

<profiles>

    <profile>
        <id>module1</id>
        <build>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <warName>module1</warName>
                    <webXml>src\main\webapp\WEB-INF\web_module1.xml</webXml>
                </configuration>
            </plugin>
            </plugins>
        </build>
    </profile>


    <profile>
        <id>module2</id>
        <build>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <warName>module2</warName>
                    <webXml>src\main\webapp\WEB-INF\web_module2.xml</webXml>
                </configuration>
            </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Q1: How can I call this POM from super POM so that both the Profiles are activated?
Q2: Is it possible to install both the generated artifacts in Local repository?

Thanks!

1

There are 1 answers

2
Romain Linsolas On BEST ANSWER

When you want to activate several profiles at the same time, you simply have to run mvn ... -Pprofile1,profile2 command.

However, in your case, this is against one main Maven convention, which states that one project = one artifact. This means that you can't create 2 WAR at the same time. If you activate both profiles, one configuration of the maven-war-plugin will be overriden by the second profile, and then, you will finally get 1 WAR, with one web.xml.

If you want to get 2 WARs, the solution are to use WAR overlay (i.e. the second war is another project that depends on war #1), or run two separate Maven commands, one per profile.