2009-06-23 30 views
33

Debido a las dependencias transitivas, mis guerras se están llenando con xml-apis, xerces jar. Intenté seguir las instrucciones en la página de referencia para maven-war-plugin pero no está funcionando.¿Cómo excluir las jarras generadas por el plugin maven war?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <packagingExcludes>WEB-INF/lib/xalan-2.6.0.jar,WEB-INF/lib/xercesImpl-2.6.2.jar,WEB-INF/lib/xml-apis-1.0.b2.jar,WEB-INF/lib/xmlParserAPIs-2.6.2.jar</packagingExcludes> 
     <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml> 
     <warName>project1</warName> 
     <warSourceDirectory>src/main/webapp</warSourceDirectory> 
    </configuration> 
</plugin> 

¿Qué estoy haciendo mal? si importa, he descubierto que el experto en la guerra-plugin que estoy usando es en la versión 2.1-alfa-1

Respuesta

60

Puede marcar estas dependencias según lo previsto:

<dependency> 
    <groupId>xerces</groupId> 
    <artifactId>xerces</artifactId> 
    <version>2.4.0</version> 
    <scope>provided</scope> 
</dependency> 

De esta manera el Maven agréguelos al classpath de compilación, pero no los empaquetará. Se supone que existen en su contenedor de servlets.

Ver más sobre experta alcances here bajo "alcance"

Editar Si desea eliminar clases añadidas a través de dependencias transitivas puede excluirlos de la dependencia de la siguiente manera:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring</artifactId> 
     <version>2.5.6</version> 
     <exclusions> 
       <exclusion> 
         <groupId>commons-logging</groupId> 
         <artifactId>commons-logging</artifactId> 
       </exclusion> 
     </exclusions> 
</dependency> 

(tomado desde this answer)

Ver más here

+0

El problema es que xerces, por ejemplo, se extrajo a través de dependencias transitivas. No quiero llenar mi pom.xml con todos estos rellenos extraños. –

+0

He solucionado la respuesta, espero que resuelva tu problema. –

+7

no se olvide de empacar con 'mvn clean package' luego –

5

Lo arreglé.

La relectura de la referencia con un poco más de cuidado, he descubierto que el elemento packagingExcludes deben ser warSourceExcludes.

+0

¿Has probado mi sugerencia? Le ahorrará mencionar cada jar dos veces (tanto de dependencia como de exclusión) –

+0

que es cierto para la versión del complemento war que utiliza. en 2.1-alpha-2 ha cambiado a packagingExcludes. ver http://jira.codehaus.org/browse/MWAR-135 para más detalles – Salandur

+0

En la versión 2.1.1 del plugin con el que funciona: ' WEB-INF/lib/xercesImpl-2.9.1.jar, WEB-INF/lib/xml-apis-1.3.04.jar ', la exclusión normal no parece funcionar. No he intentado anular estos deps como "proporcionado". – virgo47

5

Sobre la exclusión de las dependencias transitivas, creo que no funcionan con el transtive de las dependencias transitivas, y creo que este podría ser el caso.

Por ejemplo, agregue la dependencia de hibernación-core -> dom4j -> XML-API si añadir excluye de XML-API cerca de su hibernación núcleos, todavía añadir xml-apis ...

2

tuve ninguna posibilidad para modificar el archivo dependiente de war. Necesitaba evitar algún viejo archivo jar de lib. Este fragmento de configuración POM.xml funciona bien para mí. Yo uso Maven 2.2.

<build> 
    <plugins> 
     <!-- put aside some unwanted jars from war...--> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <configuration> 
       <overlays> 
        <overlay> 
         <groupId>com.company.app</groupId> 
         <artifactId>web_app</artifactId> 
         <excludes> 
          <exclude>WEB-INF/lib/json-lib-2.2.2-jdk13.jar</exclude>         
         </excludes> 
        </overlay> 
       </overlays> 
      </configuration> 
     </plugin> 
     .... 
0

Al compilar con Maven 3 (utilicé 3.0.2) con el alcance previsto usted tiene el problema con las dependencias transitivas (usted tiene un de los JAR dentro del WAR). Si utiliza versiones anteriores de Maven (utilicé 2.2.1), la guerra contiene lo que se revise personal (sólo no proporcionan dependencias

2

Para añadir una aclaración, a pesar de todo puede excluir dependencias transitivas. Por ejemplo, si tener una dependencia local en A, que tiene una dependencia en M, que a su vez tiene una dependencia en X, entonces puedes excluir X donde especifiques tu dependencia A.

Por ejemplo, digamos que dependen de la 'myPackageA', que depende del terraplén, que depende de Xerces, a continuación, puede excluir Xerces en su myPackageA dependencia:

<groupId>myPackageA.dependsOnRampart.whichDependsOnXerces</groupId> 
<artifactId>someArtifact</artifactId> 
<version>2.1</version> 
<exclusions> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>xmlParserAPIs</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>xml-apis</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>xercesImpl</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>resolver</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>serializer</artifactId> 
    </exclusion> 
</exclusions> 

para ver sus dependencias después, ejecutar ' mvn dependency: tree 'y con suerte no verá ninguna dependencia de xerces.

1

Ver mi respuesta here. La entrada packaging-excludes solo funciona con maven-war-plugin versión 2.1-alpha-1 and above. Por lo tanto, es posible que necesite actualizar la versión utilizada o, si lo prefiere, puede utilizar la inyección de nivel de dependencia ya que es una exclusión más precisa de los contenedores específicos.

0

Puede hacerlo especificando dentro de <packagingExcludes></packagingExcludes> dentro de </configuration><configuration>.

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>3.2.0</version> 
     <configuration> 
      <packagingExcludes> 
      WEB-INF/lib/ex1-*.jar, 
      WEB-INF/lib/ex2-logging-*.jar 
      </packagingExcludes> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

Puede especificar por comodines y expresiones regulares también. Consulte esto link para obtener más información.

Cuestiones relacionadas