2009-06-23 107 views
33

由于传递依赖性,我的战争被xml-apis,xerces jars填充。 我尝试了maven-war-plugin的参考页面上的指示,但它不起作用。如何排除maven war插件生成的jar文件?

<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> 

我在做什么错? 如果它的事项,我发现我使用的Maven的战争插件的版本为2.1-α-1

回答

60

为提供您可以标记这些依赖关系:

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

通过这种方式,Maven会将它们添加到编译类路径中,但不会打包它们。假定它们存在于你的servlet容器中。

查看更多有关行家作用域here下的“范围”

编辑 如果要删除通过传递依赖添加类,你可以从这样的依赖其排除:

<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> 

(取自this answer

查看更多here

+0

问题是,例如xerces是通过传递依赖关系拉入的。我不想用所有这些无关的填充符填充我的pom.xml文件。 – 2009-06-23 10:28:16

+0

我已经修复了答案,希望它解决了您的问题。 – 2009-06-23 11:20:54

5

我修好了。

李自成带着几分更多的照顾参考,我发现元素packagingExcludes应该warSourceExcludes

5

关于排除传递性依赖关系,我认为不适用于transtive dependecies,我认为这可能是这种情况。

例如,添加休眠核心的依赖性 - >的dom4j - > XML的API,如果添加排除接近你的Hibernate核心XML的API中,仍然添加XML的API ...

2

我没有可能性修改依赖战争文件。我需要从lib中避免一些旧的jar文件。这段POM.xml配置适合我。我使用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

当与Maven 3(我用3.0.2)与提供范围编译你与传递依赖(你有WAR中的JAR文件的LOS)的问题。 如果您使用旧版本的Maven(我用2.2.1),战争中含有什么spected(仅依赖关系不提供

2

要添加一些澄清,你绝对可以排除传递依赖。例如,如果您对A有一个局部依赖关系,它依赖于M,而这又依赖于X,那么你可以在指定A依赖关系的地方排除X.

例如,假设你依靠“myPackageA”,这取决于壁垒,这依赖于Xerces的,那么你就可以在你的myPackageA依赖排除的Xerces:

<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> 

事后检查的依赖,运行“ mvn dependency:tree',希望你不会看到任何xerces依赖关系。

1

查看我的回答herepackaging-excludes条目仅适用于maven-war-plugin版本2.1-alpha-1 and above。因此,您可能需要升级所用的版本,或者您可能更喜欢使用依赖级别的注入,因为它更精确地排除了特定的jar。

0

您可以通过在</configuration><configuration>内指定<packagingExcludes></packagingExcludes>来完成此操作。

<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> 

您可以通过通配符正则表达式太指定。有关更多信息,请参阅此link

相关问题