Maven:删除单个传递依赖项

时间:2009-05-03 11:47:33

标签: java maven-2 dependencies

我的项目包含一个jar文件,因为它被列为传递依赖项。

但是,我不仅验证了我不需要它,但它会导致问题,因为jar文件中的类会影响我在另一个jar文件中需要的类。

如何从传递依赖中遗漏一个jar文件?

3 个答案:

答案 0 :(得分:32)

您可以通过以下方式排除依赖关系:

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

答案 1 :(得分:15)

正确的方法是使用排除机制,但是有时您可能更喜欢使用以下hack来避免在许多工件具有您希望忽略的相同传递依赖性时添加大量排除。您可以使用“已提供”范围定义其他依赖项,而不是指定排除项。这告诉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>

副作用:您必须指定 版本的要被忽略的工件,并且将在构建时检索其POM;常规排除情况并非如此。如果您在防火墙后面运行私有Maven存储库,这可能是一个问题。

答案 2 :(得分:3)

您可以通过明确排除有问题的工件来完成此操作。获取包含问题的依赖关系并将其标记为排除:

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