maven-ear-plugin is not including jarModule into application.xml

application.xml, ear, jakarta-ee, maven, maven-ear-plugin

Solution

I worked it out, as per usual, it was user error.

Strangely it was producing the EAR file pretty much correctly, even though my plugin wasn't configured properly.

I replaced...

<groupId>maven-ear-plugin</groupId>
<artifactId>maven-ear-plugin</artifactId>

with...

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>

Then changed...

<includeLibInApplicationXml>true</includeLibInApplicationXml>

to...

<includeInApplicationXml>true</includeInApplicationXml>

Then suddenly it did what I intended it to do in the first place.

My final pom.xml looked like this as I decided I wanted all jar's to be included automatically.

<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.blah</groupId>
    <artifactId>MyApp.EAR</artifactId>
    <version>1.0</version>
    <packaging>ear</packaging>

    <properties>
        <weblogic.version>10.3</weblogic.version>
        <weblogic.version.minor>${weblogic.version}.4</weblogic.version.minor>
        <weblogic.host>***</weblogic.host>
        <weblogic.port>***</weblogic.port>
        <weblogic.username>***</weblogic.username>
        <weblogic.password>***</weblogic.password>
    </properties>

    <build>
        <finalName>MyApp</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <applicationName>MyApp</applicationName>
          <includeLibInApplicationXml>true</includeLibInApplicationXml>
                    <modules>
                        <ejbModule>
                            <groupId>com.blah</groupId>
                            <artifactId>MyApp.EJB</artifactId>
                        </ejbModule>
                        <webModule>
                            <groupId>com.blah</groupId>
                            <artifactId>MyApp.Web</artifactId>
                            <contextRoot>MyApp</contextRoot>
                        </webModule>
                    </modules>
                    <archive>
                        <manifestEntries>
                            <WebLogic-Application-Version>${weblogic.version}</WebLogic-Application-Version>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.oracle.weblogic</groupId>
                <artifactId>weblogic-maven-plugin</artifactId>
                <version>10.3.4</version>
                <configuration>
                    <adminurl>t3://${weblogic.host}:${weblogic.port}</adminurl>
                    <user>${weblogic.username}</user>
                    <password>${weblogic.password}</password>
                    <upload>true</upload>
                    <action>deploy</action>
                    <remote>false</remote>
                    <verbose>true</verbose>
                    <source>${project.build.directory}/${project.build.finalName}.${project.packaging}</source>
                    <name>${project.build.finalName}</name>
                </configuration>
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>

        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.apache.maven.plugins</groupId>
                                        <artifactId>maven-ear-plugin</artifactId>
                                        <versionRange>[2.7,)</versionRange>
                                        <goals>
                                            <goal>generate-application-xml</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore></ignore>
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <dependencies>
    <dependency>
      <groupId>com.blah</groupId>
      <artifactId>MyApp.EJB</artifactId>
      <version>1.0</version>
      <type>ejb</type>
    </dependency>
    <dependency>
      <groupId>com.blah</groupId>
      <artifactId>MyApp.Web</artifactId>
      <version>1.0</version>
      <type>war</type>
    </dependency>
    </dependencies>
</project>

Problem

I've been following the example on the maven-ear-plugin site that shows how to add third-party libraries to the generated application.xml. However, it does not appear to be working as I expected. Similarly the web module contextRoot is being ignored. According to the documentation what I am trying to do should be entirely possible. The context root of a Web module might be customized using the contextRoot parameter. Please note that third party libraries (i.e. JarModule) are not included in the generated application.xml (only ejb-client should be included in a java entry). However, a jar dependency could be included in the generated application.xml by specifying the includeInApplicationXml flag. I have the following output when it executes the build in my application.xml. ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd"> <application> <display-name>MyApp.EAR</display-name> <module> <ejb>MyApp.jar</ejb> </module> <module> <web> <web-uri>MyApp.war</web-uri> <context-root>/MyApp.Web</context-root> </web> </module> </application> ``` From the following maven configuraton (pom.xml). ``` ... <modelVersion>4.0.0</modelVersion> <groupId>com.blah</groupId> <artifactId>MyApp.EAR</artifactId> <version>1.0</version> <packaging>ear</packaging> <build> <plugins> <plugin> <groupId>maven-ear-plugin</groupId> <artifactId>maven-ear-plugin</artifactId> <version>2.7</version> <configuration> <applicationName>MyApp</applicationName> <modules> <ejbModule> <groupId>com.blah</groupId> <artifactId>MyApp.EJB</artifactId> </ejbModule> <webModule> <groupId>com.blah</groupId> <artifactId>MyApp.Web</artifactId> <contextRoot>MyApp</contextRoot> </webModule> <jarModule> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <includeLibInApplicationXml>true</includeLibInApplicationXml> </jarModule> </modules> <archive> <manifestEntries> <WebLogic-Application-Version>${weblogic.version}</WebLogic-Application-Version> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build> <dependencies> <!-- web and ejb modules --> <dependency> <groupId>com.blah</groupId> <artifactId>MyApp.EJB</artifactId> <version>1.0</version> <type>ejb</type> </dependency> <dependency> <groupId>com.blah</groupId> <artifactId>MyApp.Web</artifactId> <version>1.0</version> <type>war</type> </dependency> </dependencies> ... ``` It is immediately obvious that the application.xml is not being generated as I intended. - The contextRoot supplied is not correct in the application.xml, instead the default name of MyApp.Web is output instead of the specified MyApp. - The org.slf4j jarModule specified is missing entirely from the application.xml. What am I doing wrong? Debug from Maven is shown below. ``` [DEBUG] ----------------------------------------------------------------------- [DEBUG] Goal: org.apache.maven.plugins:maven-ear-plugin:2.4.2:generate-application-xml (default-generate-application-xml) [DEBUG] Style: Regular [DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?> <configuration> <description>${project.description}</description> <displayName>${project.artifactId}</displayName> <encoding default-value="UTF-8"/> <generatedDescriptorLocation>${project.build.directory}</generatedDescriptorLocation> <includeLibInApplicationXml default-value="false"/> <project>${project}</project> <version default-value="1.3"/> <workDirectory>${project.build.directory}/${project.build.finalName}</workDirectory> </configuration> ``` P.S. I tried creating the maven-ear-plugin tag, but it would not let me as I am not reputable enough! If someone could create that I would be grateful.

Original source