I'm not sure about different behaviors. But I would normally get the JAR and WAR plugins to edit respected modules' MANIFEST files.
-----Original Message----- From: Mauricio Sent: July-09-12 12:55 PM Subject: maven-ear-plugin - How to manipulate Manifest.MF of webModule and ejbModule? 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 --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@maven.apache.org For additional commands, e-mail: users-h...@maven.apache.org