【问题标题】:Is it possible to exclude a maven dependency jar that comes from java starter parent pom?是否可以排除来自 java starter parent pom 的 maven 依赖 jar?
【发布时间】:2022-02-02 22:25:56
【问题描述】:

我已阅读:

我的结论是没有办法排除从父 pom.xml 继承的特定依赖项。 我正在使用 maven,并且父 pom 不可编辑。

所以,我考虑在将 jar 本身打包到目标 jar 之前将其排除在依赖项之外。

My parent pom is `sdk-java-starter-parent` that comes from an internal library.

<parent>
        <groupId>abc.def.xyz</groupId>
        <artifactId>sdk-java-starter-parent</artifactId>
        <version>6.1.0.4</version>
    </parent>

该 pom 声明了 log4-1.2.7 依赖项,我想将其排除并且根本不导入到我的项目中。

<dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

如果我直接从 spring 的组中导入父 pom,我可以使用spring-boot-maven-plugin 将其排除在外。 但是因为我是从内部库中导入父 pom,所以没有使用或可能使用该插件。

我考虑过使用 maven-shader 插件和其他重新打包插件,以便在打包之前对 jar 进行“着色”:

<excludes>
<exclude>log4j-1.2.17.jar</exclude> (tried also `**/log4j-1.2.17.jar`)
</excludes>

但效果不佳。 我试过&lt;dependencyManagement&gt;,但它不适合,因为我不想覆盖版本,我只想删除整个依赖项。完全排除它或删除它的罐子。

说实话,我一无所知,如果可能的话,我很高兴听到你建议我如何去做的一些想法。

如果不可能,我还有哪些其他选择?我怎样才能避免收到那个 log4j jar?

最终的应用是一个由 JAR 组成的 docker 容器。

正在使用的插件有:

  • maven-jar-plugin
  • maven-surefire-plugin
  • docker-maven-plugin
  • swagger-maven-plugin

我不确定其中哪一个负责构建应用程序和 jar 打包。

谢谢。

【问题讨论】:

  • @pringi unfurtunally no。正如我所说,我尝试过使用&lt;dependencyManagement&gt;,但它不适合,因为我不想覆盖版本,我只想删除整个依赖项。完全排除它或删除它的罐子。
  • 也许,如果您已经尝试了所有方法,为什么不将 log4j 的范围更改为提供。这样它就不会包含在最终的 jar 中。根据您所写的内容,我几乎可以肯定您已经分析了将 log4j 依赖项带入子模块的依赖项,并明确地将其排除在外。如果不能,你也可以试试这条路吗?如有需要,作为参考咨询:maven.apache.org/guides/introduction/…
  • @pringi 你是对的。我确实从带来 log4j 的所有其他依赖项中排除了 log4j。剩下的是paret pom。我只是按照您的建议做了,我已将 log4j 的 &lt;dependency&gt;&lt;/dependency&gt; 添加到我的 pom 文件中,指定了从父 pom 带来的版本 1.2.17,并添加了一个定义为提供的范围。它也没有奏效。我提取了项目的最终目标 jar,然后进入 BOOT-INF\lib\ 仍然可以看到 log4j-1.2.17.jar
  • 我做了一些测试,得出了和你一样的结论。无法从父 pom 中排除依赖项。这里解释了一个技巧,如果你能遵循将解决你的问题:generacodice.com/en/articolo/822480/…。不确定是否可以将父 pom 更改为另一个,并将当前父 pom 作为依赖项导入。如果可以的话,这个技巧将解决问题。

标签: spring-boot maven dependencies log4j pom.xml


【解决方案1】:

我认为您需要将排除写为&lt;exclude&gt;*:log4j&lt;/exclude&gt;

【讨论】:

  • 排除在哪里?因为正如我所说,我没有可用的插件来遮蔽它
  • 抱歉,我以为你在使用 maven shade 插件对生成的 JAR 进行着色。您真正使用什么来构建您的应用程序?它是使用 Maven 战争插件构建的 WAR 吗?还是别的什么?
  • 所以实际上我也在尝试解决这个问题。我实际上不太确定使用哪个工具来构建应用程序和 jar。我可以列出正在使用的插件:maven-jar-plugin | maven-surefire-插件 | docker maven 插件 | swagger-maven-插件| .... 我认为maven-jar-plugin 负责构建和打包,这就是为什么我在其&lt;configuration&gt; 标签之间添加了上述&lt;excludes&gt;。但它没有用。可能是因为我的语法不正确,或者因为 maven-jar-plugin 不是负责构建应用程序的人。
  • 那么最终的应用是什么?它是由 JAR 组成的 docker 容器吗?
  • 是的,它是一个 docker 容器。
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
相关资源
最近更新 更多