如何排除maven war插件生成的jar?

Jac*_*ine 37 java maven-2

由于传递依赖性,我的战争将由xml-apis,xerces jars填充.我尝试按照maven-war-plugin的参考页面上的说明进行操作,但它无效.

<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>
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么 ?如果重要的话,我发现我正在使用的maven-war-plugin是版本2.1-alpha-1

Dav*_*itz 67

您可以按提供的方式标记这些依赖项:

<dependency>
  <groupId>xerces</groupId>
  <artifactId>xerces</artifactId>
  <version>2.4.0</version>
  <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这样maven会将它们添加到编译类路径中,但不会打包它们.假设它们存在于您的servlet容器中.

查看更多有关行家范围在这里下的"范围"

编辑 如果要删除通过传递依赖项添加的类,可以将它们从依赖项中排除,如下所示:

<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>
Run Code Online (Sandbox Code Playgroud)

(取自这个答案)

在这里查看更多

  • 不要忘记随后用`mvn clean package`打包 (8认同)

Jac*_*ine 5

我修好了它.

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

  • 在 2.1.1 版本的插件中,它适用于:`&lt;packagingExcludes&gt;WEB-INF/lib/xercesImpl-2.9.1.jar,WEB-INF/lib/xml-apis-1.3.04.jar&lt;/packagingExcludes&gt;` ,正常的排除似乎不起作用。我还没有尝试将这些部门重写为“已提供”。 (2认同)

小智 5

关于传递依赖性的排除,我认为不适用于传递性依赖的转换,我认为可能就是这种情况.

例如,添加hibernate-core的依赖关系 - > dom4j - > xml-apis如果在hibernate-core附近添加xml-apis的排除,仍然添加xml-apis ...