gpt4 book ai didi

java - Intellij 构建与 Maven 构建不同

转载 作者:行者123 更新时间:2023-12-01 10:44:28 25 4
gpt4 key购买 nike

当我通过 mvn package 从命令行编译 uber jar 并使用 java -jar target/my-jar.jar 执行时,它会因某些依赖项冲突而失败.

当我使用 Intellij 的 make 从运行/调试配置执行时,一切都很好!

Intellij 的类路径有什么不同吗?我该如何找出两个版本之间的差异?

最佳答案

我自己解决了这个问题,并在此过程中学到了一些东西。问题原来是我的 Maven Shade 插件正在使用

<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>

即使您认真地排除传递依赖项,该转换器仍然会连接传递定义的类,并可能导致 hk2 找不到注入(inject)依赖项所需的类。我排除了一些类,以防止我的应用程序同时运行 Jersey 1 和 Jersey 2。删除该行可以修复我的问题并匹配 Intellij 中的行为。

mvn package 生成的 Artifact 与使用 Intellij 运行构建之间的一些潜在差异:

  • Intellij 不生成 jar,因此没有 META-INF 目录。使用jersey和maven shade插件时,经常会被hk2依赖扫描META-INF/services目录进行依赖注入(inject)。
  • 在 Intellij 中进行构建不会经历 Maven 生命周期。如果您依赖特定的 Maven 插件或构建步骤来运行应用程序,则必须让它执行 Maven 生命周期步骤,而不是 IDE 的 make。
  • Intellij(当前版本 15)和 Maven 之间存在细微的范围差异。我通过比较 mvn dependency:list -Dsort=true 并在“项目设置”>“模块”>“{your module}”>“依赖项”(选项卡)中对屏幕进行排序,发现了这一点。
  • maven 发现了一些 Intellij 中没有的传递依赖项,反之亦然。我使用 dependency:listdependency:tree -Dincludes=the.groupIid:the.artifact 来追踪一些传递依赖项的来源。

关于java - Intellij 构建与 Maven 构建不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34258184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com