Maven:删除单个传递依赖项

2022-09-01 16:59:36

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

但是,我不仅验证了我不需要它,而且还会引起问题,因为jar文件中的一个类在另一个jar文件中隐藏了我需要的类。

如何从我的传递依赖项中省略单个 jar 文件?


答案 1

可以通过以下方式排除依赖项:

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

答案 2

正确的方法是使用排除机制,但是有时您可能更愿意使用以下 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 存储库,这可能会给您带来问题。


推荐