maven-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mauricio <mauricio-wodar...@procergs.rs.gov.br>
Subject maven-ear-plugin - How to manipulate Manifest.MF of webModule and ejbModule?
Date Mon, 09 Jul 2012 19:55:24 GMT
Hello,

I have a multimodule maven project with the following structure:

|     app (parent)
     -- pom.xml
     -- app-ear
        -- pom.xml
     -- app-ejb
        -- src
        -- pom.xml
     -- app-web
        -- src
        -- pom.xml
|

This is my *app/pom.xml* (parent project) where I put all my application 
dependencies:

|<?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.mycompany</groupId>
     <artifactId>app</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <packaging>pom</packaging>

     <name>app</name>
     <url>http://maven.apache.org</url>

     <modules>
         <module>app-ejb</module>
         <module>app-web</module>
         <module>app-ear</module>
     </modules>

     <dependencies>
         <dependency>
             <groupId>javax.ejb</groupId>
             <artifactId>ejb-api</artifactId>
             <version>3.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>javaee</groupId>
             <artifactId>javaee-api</artifactId>
             <version>5</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.glassfish</groupId>
             <artifactId>javax.faces</artifactId>
             <version>2.0.9</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.richfaces.ui</groupId>
             <artifactId>richfaces-components-ui</artifactId>
         </dependency>
         <dependency>
             <groupId>org.richfaces.core</groupId>
             <artifactId>richfaces-core-impl</artifactId>
         </dependency>
     </dependencies>

     <dependencyManagement>
         <dependencies>
             <dependency>
                 <groupId>org.richfaces</groupId>
                 <artifactId>richfaces-bom</artifactId>
                 <version>4.2.0.Final</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
         </dependencies>
     </dependencyManagement>

     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <version>2.4</version>
                 <configuration>
                     <source>1.6</source>
                     <target>1.6</target>
                 </configuration>
             </plugin>
         </plugins>
     </build>

</project>
|

This is my *app-ejb/pom.xml*:

|<?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>
     <parent>
         <artifactId>app</artifactId>
         <groupId>com.mycompany</groupId>
         <version>0.0.1-SNAPSHOT</version>
     </parent>

     <artifactId>app-ejb</artifactId>
     <packaging>ejb</packaging>

     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-ejb-plugin</artifactId>
                 <version>2.3</version>
                 <configuration>
                     <ejbVersion>3.0</ejbVersion>
                 </configuration>
             </plugin>
         </plugins>
     </build>
</project>
|

This is my *app-web/pom.xml*:

|<?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>
     <parent>
         <artifactId>app</artifactId>
         <groupId>com.mycompany</groupId>
         <version>0.0.1-SNAPSHOT</version>
     </parent>

     <artifactId>app-web</artifactId>
     <packaging>war</packaging>

     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>app-ejb</artifactId>
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
     </dependencies>

     <build>
         <finalName>app-web</finalName>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
                 <version>2.2</version>
             </plugin>
         </plugins>
     </build>

</project>
|

And finally this is my *app-ear/pom.xml* where I have the detais about 
how generate my app.ear file:

|<?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>
     <parent>
         <artifactId>app</artifactId>
         <groupId>com.mycompany</groupId>
         <version>0.0.1-SNAPSHOT</version>
     </parent>

     <artifactId>app-ear</artifactId>
     <packaging>ear</packaging>

     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>app-ejb</artifactId>
             <type>ejb</type>
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>app-web</artifactId>
             <type>war</type>
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
     </dependencies>

     <build>
         <finalName>app</finalName>
         <plugins>
             <plugin>
                 <artifactId>maven-ear-plugin</artifactId>
                 <version>2.7</version>
                 <configuration>
                     <version>5</version>
                     <unpackTypes>war</unpackTypes>
                     <defaultLibBundleDir>lib</defaultLibBundleDir>
                     <skinnyWars>true</skinnyWars>
                     <modules>
                         <webModule>
                             <groupId>com.mycompany</groupId>
                             <artifactId>app-web</artifactId>
                             <bundleFileName>app-web.war</bundleFileName>
                             <contextRoot>/app</contextRoot>
                         </webModule>
                         <ejbModule>
                             <groupId>com.mycompany</groupId>
                             <artifactId>app-ejb</artifactId>
                             <bundleFileName>app-ejb.jar</bundleFileName>
                         </ejbModule>
                         <jarModule>
                             <groupId>org.glassfish</groupId>
                             <artifactId>javax.faces</artifactId>
                         </jarModule>
                         <jarModule>
                             <groupId>org.richfaces.core</groupId>
                             <artifactId>richfaces-core-api</artifactId>
                         </jarModule>
                         <jarModule>
                             <groupId>org.richfaces.core</groupId>
                             <artifactId>richfaces-core-impl</artifactId>
                         </jarModule>
                         <jarModule>
                             <groupId>org.richfaces.ui</groupId>
                             <artifactId>richfaces-components-api</artifactId>
                         </jarModule>
                         <jarModule>
                             <groupId>org.richfaces.ui</groupId>
                             <artifactId>richfaces-components-ui</artifactId>
                         </jarModule>
                         <jarModule>
                             <groupId>net.sourceforge.cssparser</groupId>
                             <artifactId>cssparser</artifactId>
                         </jarModule>
                         <jarModule>
                             <groupId>org.w3c.css</groupId>
                             <artifactId>sac</artifactId>
                         </jarModule>
                         <jarModule>
                             <groupId>com.google.guava</groupId>
                             <artifactId>guava</artifactId>
                         </jarModule>
                     </modules>
                 </configuration>
             </plugin>
         </plugins>
     </build>
</project>
|

My problem is that /app.ear/app-web.war!META-INF/MANIFEST.MF/ and 
/app.ear/app-ejb.jar!META-INF/MANIFEST.MF/ looks like this:

|     Manifest-Version: 1.0
     Build-Jdk: 1.6.0_24
     Class-Path: lib/javax.faces-2.0.9.jar lib/richfaces-core-api-4.2.0.Fin
      al.jar lib/richfaces-core-impl-4.2.0.Final.jar lib/richfaces-componen
      ts-api-4.2.0.Final.jar lib/richfaces-components-ui-4.2.0.Final.jar li
      b/cssparser-0.9.5.jar lib/sac-1.3.jar lib/guava-10.0.1.jar lib/jsr305
      -1.3.9.jar
     Created-By: Apache Maven
     Archiver-Version: Plexus Archiver
|

And I really have to remove the Class-Path entry from these MANIFEST.

Why? Because it seems that RichFaces is being loaded two times in 
classpath of my application. (One from app.ear/lib folder and another 
from app.ear/app-web.war!META-INF/MANIFEST.MF Class-Path entry). And 
when I try to deploy app.ear in my Application Server (Oracle Weblogic 
10.3.5) I get some errors like that:

|     INFO: Unsanitized stacktrace from failed start...
     java.lang.IllegalArgumentException: duplicate key: class   javax.faces.validator.RequiredValidator
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:115)
at com.google.common.collect.RegularImmutableMap.<init>(RegularImmutableMap.java:72)
at com.google.common.collect.ImmutableMap$Builder.fromEntryList(ImmutableMap.java:221)
at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:207)
at org.richfaces.javascript.ClientServiceConfigParser.parseConfig(ClientServiceConfigParser.java:53)
at org.richfaces.application.ValidatorModule.createClientScriptService(ValidatorModule.java:65)
at org.richfaces.application.ValidatorModule.configure(ValidatorModule.java:60)
at org.richfaces.application.ServicesFactoryImpl.init(ServicesFactoryImpl.java:27)
|

It's weird that if I run |mvn package| in my *app-web* project, the 
Class-path entry does not go to app-web.war/META-INF/MANIFEST.MF. It 
only occurs when I run |mvn package| in my *app* parent project.

So, how could I remove the Class-path entry of webModule and ejbModule 
MANIFEST file?

I found a similar problem in this thread 
<http://stackoverflow.com/questions/9237485/how-to-set-up-manifest-class-path-properly-in-maven-war-plugin>

but without a solution.

I appreciate any help.

Thanks,
Mauricio



Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message