【问题标题】:Maven dependency: exclude one classMaven依赖:排除一个类
【发布时间】:2012-04-22 14:19:04
【问题描述】:

例如我有依赖:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.5.6</version>
</dependency>  

我可以排除一个类,例如org/slf4j/Marker.class吗?

【问题讨论】:

  • exclude 在哪个阶段 - 编译或打包?
  • .ear 中的包,使用 maven-ear-plugin
  • 嗯!您在 .ear 中需要的是没有指定类的slf4j-api.jar。没有直接的方法可以实现这一点。
  • slf4j-api 就是例子
  • 但是排除单个类,特别是 API 类是没有意义的。您可能要做的是将依赖范围定义为“提供”,但这意味着它必须由您部署的环境(基于 EAr 的 JEE 容器)交付。

标签: maven dependencies


【解决方案1】:

试试shade plugin

why use shadebasic usage 的详细信息

【讨论】:

    【解决方案2】:

    不可能排除单个类。在&lt;dependency&gt; 标签中,您可以定义&lt;exclusions/&gt;。但是,这些是针对整个依赖项的。

    应小心处理阴影插件。通常,在一个地方创建一个包含所有依赖项的 jar 不是一个好习惯,因为如果您要在另一个项目中使用生成的工件作为依赖项,这往往会导致问题。例如,在你的 jar 中对 slf4j 进行着色,然后在另一个项目中依赖你的工件,如果你有另一个 slf4j,这会给你带来痛苦。

    【讨论】:

      【解决方案3】:

      您可以更改这些类并将它们定义在不同的 jar/模块中,该 jar/模块应作为依赖项包含在之前提供要排除的类所在的依赖项的 jar (Marker.class) .

      Maven 会记住从 2.0.9 版本开始的类路径顺序。

      【讨论】:

        猜你喜欢
        • 2017-09-14
        • 2012-02-25
        • 2019-10-29
        • 2021-10-24
        • 2015-03-07
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        • 1970-01-01
        相关资源
        最近更新 更多