【发布时间】:2009-05-03 11:47:33
【问题描述】:
我的项目包含一个 jar 文件,因为它被列为传递依赖项。
但是,我已经证实,我不仅不需要它,而且还会导致问题,因为 jar 文件中的类会影响我在另一个 jar 文件中需要的类。
如何从传递依赖项中删除单个 jar 文件?
【问题讨论】:
标签: java maven-2 dependencies
我的项目包含一个 jar 文件,因为它被列为传递依赖项。
但是,我已经证实,我不仅不需要它,而且还会导致问题,因为 jar 文件中的类会影响我在另一个 jar 文件中需要的类。
如何从传递依赖项中删除单个 jar 文件?
【问题讨论】:
标签: java maven-2 dependencies
您可以通过以下方式排除依赖项:
<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>
【讨论】:
正确的方法是使用排除机制,但有时您可能更喜欢使用以下技巧来避免在许多工件具有您希望忽略的相同传递依赖项时添加大量排除项。您无需指定排除项,而是定义一个范围为“已提供”的附加依赖项。这告诉 Maven 您将在运行时手动提供此工件,因此它不会被打包。例如:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.6</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
副作用:您必须指定要忽略的工件的 a 版本,它的 POM 将在构建时检索;这不是常规排除的情况。如果您在防火墙后面运行私有 Maven 存储库,这可能会给您带来问题。
【讨论】:
您可以通过明确排除有问题的工件来做到这一点。取包含问题的依赖项并将其标记为排除:
来自 maven website:
<dependency>
<groupId>group-a</groupId>
<artifactId>artifact-a</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>group-c</groupId>
<artifactId>excluded-artifact</artifactId>
</exclusion>
</exclusions>
</dependency>
【讨论】: