You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Patrick Garner <pa...@gmail.com> on 2012/02/11 04:08:53 UTC

Maven-war-plugin: setting up manifest class-path properly

I've used the maven-ear-plugin with the maven-war-plugin and
maven-ejb-plugin to successfully deploy and run an application packaged as
EAR to Jboss AS7.

    .
    |-- META-INF
    |   |-- application.xml
    |   |-- MANIFEST.MF
    |   `-- maven
    |       `-- com.patrac
    |           `-- Patrac-ear
    |               |-- pom.properties
    |               `-- pom.xml
    |-- Patrac-ejb-1.0-SNAPSHOT.jar
    `-- Patrac-web-1.0-SNAPSHOT.war

In the application source code directories, the poms are located as follows:

    .
    |
    |-- Patrac-ear
    |   `-- pom.xml
    |-- Patrac-ejb
    |  `-- pom.xml
    |-- Patrac-web
    |   `-- pom.xml
    `-- pom.xml

I can't figure out how to stop a few annoying warning messages when I
deploy the application:

    12:32:03,958 WARN  [org.jboss.as.server.deployment] (MSC service thread
1-2) Class Path entry richfaces-components-ui-4.0.0.Final.jar in
"/content/Patrac.ear/Patrac-web-1.0-SNAPSHOT.war"  does not point to a
valid jar for a Class-Path reference.
    12:32:03,970 WARN  [org.jboss.as.server.deployment] (MSC service thread
1-2) Class Path entry richfaces-components-api-4.0.0.Final.jar in
"/content/Patrac.ear/Patrac-web-1.0-SNAPSHOT.war"  does not point to a
valid jar for a Class-Path reference.
    12:32:03,984 WARN  [org.jboss.as.server.deployment] (MSC service thread
1-2) Class Path entry richfaces-core-api-4.0.0.Final.jar in
"/content/Patrac.ear/Patrac-web-1.0-SNAPSHOT.war"  does not point to a
valid jar for a Class-Path reference.
    12:32:03,989 WARN  [org.jboss.as.server.deployment] (MSC service thread
1-2) Class Path entry richfaces-core-impl-4.0.0.Final.jar in
"/content/Patrac.ear/Patrac-web-1.0-SNAPSHOT.war"  does not point to a
valid jar for a Class-Path reference.

Patrac-web-1.0-SNAPSHOT.war!META-INF/MANIFEST.MF looks like this:

    Manifest-Version: 1.0
    Built-By: pgarner
    Build-Jdk: 1.7.0_02
    Class-Path: Patrac-ejb-1.0-SNAPSHOT.jar richfaces-components-ui-4.0.0.
     Final.jar richfaces-components-api-4.0.0.Final.jar richfaces-core-api
     -4.0.0.Final.jar richfaces-core-impl-4.0.0.Final.jar cssparser-0.9.5.
     jar sac-1.3.jar guava-r08.jar
    Created-By: Apache Maven
    Archiver-Version: Plexus Archiver

The ejb class-path entry needs to be present for portability but the
richfaces, cssparser and guava class-path entries should not be in there.
The problem is that my WAR depends on all of these JARs, but some of them
live in WEB-INF/lib and one lives in the root directory of the EAR.  Each
dependency needs to be present in Patrac-web/pom.xml so that Maven will put
the JARs in the correct places, but I cannot figure out how to instruct
Maven to only include a Class-Path entry for Patrac-ejb-1.0-SNAPSHOT.jar
(and to leave the other JARs out of the manifest).

      <!--
        According to JEE 6 spec, the application is portable if
        Patrac-web.war's META-INF/MANIFEST.MF contains a Class-Path entry
        for Patrac-ejb-1.0-SNAPSHOT.jar.

        <optional>true</optional> is the flag that maven-war-plugin uses
        to put the entry in MANIFEST.MF without copying
Patrac-ejb-1.0-SNAPSHOT.jar
        into WEB-INF/lib.  This is what I want.

        <scope>provided</scope> would cause maven-war-plugin to NEITHER
        put the entry in MANIFEST.MF nor copy Patrac-ejb.jar into
WEB-INF/lib,
        which would not be good.

        No tag at all would cause maven-war-plugin to BOTH put the entry in
        MANIFEST.MF and copy Patrac-ejb.jar into WEB-INF/lib, which would
        also not be good.
      -->
      <dependency>
         <groupId>com.patrac</groupId>
         <artifactId>Patrac-ejb</artifactId>
         <type>ejb</type>
         <optional>true</optional>
      </dependency>

      <!--
       These two dependencies are used to copy
      the other JAR files into WEB-INF/lib and there
      should not be any class-path entries for such
      JARs in MANIFEST.MF, in order to avoid the
      error messages.
      -->
        <dependency>
            <groupId>org.richfaces.ui</groupId>
            <artifactId>richfaces-components-ui</artifactId>
        </dependency>
        <dependency>
            <groupId>org.richfaces.core</groupId>
            <artifactId>richfaces-core-impl</artifactId>
        </dependency>

I'm using the most recent maven-war-plugin version, 2.2.  How do I tell the
maven-war-plugin to put the "non-ejb" JARs into WEB-INF/lib while not
putting class-path entries in MANIFEST.MF?

Any advice or pointers you have are greatly appreciated.

References:

 - [Maven War Plugin](http://maven.apache.org/plugins/maven-war-plugin/)
 - [Maven Ear Plugin](http://maven.apache.org/plugins/maven-ear-plugin/)

Thanks,
Pat