Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

  1. The contextRoot supplied is not correct in the application.xml, instead the default name of MyApp.Web is output instead of the specified MyApp.
  2. 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.

like image 848
mrswadge Avatar asked Aug 23 '12 13:08

mrswadge


People also ask

What is application XML in ear?

application.xml. This file is automatically generated and lists the mapping of EJB modules to JAR files that are contained in the application. MANIFEST.MF. This file details the contents of the . ear file.

What is EAR packaging in Maven?

Enterprise application archive – or ear – is a compressed file that contains a J2EE application. It consists of one or more modules that can be either web modules (packaged as a war file) or EJB modules (packaged as a jar file) or both of them.


2 Answers

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>
like image 181
mrswadge Avatar answered Sep 21 '22 23:09

mrswadge


Thanks a lot, have been searching for a solution to this problem for some hours now. :) Will ad my pom in case this might help somebody else out too.

<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">
    <parent>
        <artifactId>appletree.be-multi</artifactId>
        <groupId>be.appletree</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>appletree.be-ear</artifactId>
    <packaging>ear</packaging>

    <dependencies>


        <dependency>
            <groupId>be.appletree</groupId>
            <artifactId>appletree.be-domain</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>jar</type>
        </dependency>

        <dependency>
            <groupId>be.appletree</groupId>
            <artifactId>appletree.be-ejb</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>ejb</type>
        </dependency>

        <dependency>
            <groupId>be.appletree</groupId>
            <artifactId>appletree.be-web</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>war</type>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.8</version>
                <configuration>
                    <modules>
                        <jarModule>
                            <groupId>be.appletree</groupId>
                            <artifactId>appletree.be-domain</artifactId>
                            <includeInApplicationXml>true</includeInApplicationXml>
                        </jarModule>
                        <webModule>
                            <groupId>be.appletree</groupId>
                            <artifactId>appletree.be-web</artifactId>
                        </webModule>
                        <ejbModule>
                            <groupId>be.appletree</groupId>
                            <artifactId>appletree.be-ejb</artifactId>
                        </ejbModule>
                    </modules>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
like image 36
prefabSOFT Avatar answered Sep 21 '22 23:09

prefabSOFT