He utilizado el plugin maven-ear-plugin con maven-war-plugin y maven-ejb-plugin para implementar y ejecutar con éxito una aplicación empaquetada como EAR a Jboss AS7.Cómo configurar class-path correctamente en maven-war-plugin
.
|-- 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
En los directorios de código fuente de la aplicación, los poms están ubicados de la siguiente manera:
.
|
|-- Patrac-ear
| `-- pom.xml
|-- Patrac-ejb
| `-- pom.xml
|-- Patrac-web
| `-- pom.xml
`-- pom.xml
no puedo encontrar la manera de detener algunos mensajes de advertencia molesto cuando implementar la aplicación:
!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 se parece a esto:
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
La entrada ejb class-path debe estar presente para el módulo EJB, para su portabilidad, y las entradas richfaces, cssparser y guava class-path NO deben estar en el manifiesto de WAR.
El problema es que mi WAR depende de todos los JAR, algunos de los cuales viven en WEB-INF/lib
(RichFaces), y un JAR, Patrac-ejb-1.0-SNAPSHOT.jar
, que vive en el directorio raíz del EAR. Cada dependencia debe ingresarse en Patrac-web/pom.xml pero NO cada una de las dependencias debe aparecer en el manifiesto.
Maven coloca los JAR en los lugares correctos, pero coloca las entradas de la ruta de clase para TODOS los JAR en el manifiesto. No debería hacer esto. SÓLO debe poner una entrada para Patrac-ejb-1.0-SNAPSHOT.jar
.
<!--
According to Java EE 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>
Estoy utilizando la versión más reciente de maven-war-plugin, 2.2. ¿Cómo le digo a maven-war-plugin que coloque los JAR "no-ejb" en WEB-INF/lib sin poner entradas de clase en MANIFEST.MF?
Cualquier consejo o consejos que tenga son muy apreciados.
Referencias:
el [Guerra manifiesto guía] (http: // Mave n.apache.org/plugins/maven-war-plugin/examples/war-manifest-guide.html) muestra 3 ejemplos y proporciona una nota: "No se muestra cómo se muestra cómo incluir una dependencia en WEB-INF/lib pero no en la ruta de clase del manifiesto". La Guía dice: "Consulte la [Guía para trabajar con manifiestos] (http://maven.apache.org/guides/mini/guide-manifest.html) para ver más ejemplos". Esta segunda página simplemente me remite a la página de guía de manifiesto de WAR. Necesito poder seguir el ejemplo que no se muestra. –
¿Desea incluir una dependencia en WEB-INF/lib pero no en el classpath de manifiesto? ¿Por qué lo necesitas? Si tus 'richfaces',' cssparser' y 'guava' salen en EAR, entonces estas dependencias deberían estar marcadas como' provided'. –
Richfaces y otros son dependencias requeridas del módulo WAR. Por lo tanto, deberían estar en WEB-INF/lib. Tengo entendido que no es necesario realizar entradas de Class-Path para los JAR en WEB-INF porque el cargador de clases de WAR carga estos archivos automáticamente. Solo las entradas de ruta de clase para JAR _external_ al módulo WAR deben ingresarse en el manifiesto de WAR. En mi caso, debe hacerse una entrada para EJB JAR. Esto es por especificación JEE. RichFaces y otros son dependencias requeridas del módulo WAR y, por lo tanto, no deben marcarse como 'provided'. –