当我通过mvn package
从命令行编译超级jar并使用java -jar target/my-jar.jar
执行时,它会因某些依赖性冲突而失败。
当我从run / debug配置执行时,使用Intellij的make,一切都很好!
Intellij的类路径有什么不同吗?我如何才能找出两个版本之间的差异?
答案 0 :(得分:1)
我自己弄清楚了,并且沿途学到了很多东西。问题原来是我使用
的maven shade插件<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
即使您虔诚地排除了传递依赖性,该变换器仍会连接传递定义的类,并且可能导致hk2无法找到注入依赖项所需的类的问题。我排除了一些类,以防止我的应用程序运行Jersey 1和Jersey 2.删除该行修复了我的内容并匹配Intellij中的行为。
mvn package
生成的工件与使用Intellij运行构建之间的一些潜在差异:
mvn dependency:list -Dsort=true
并在项目设置&gt;中对屏幕进行排序来发现这一点。模块&gt; {your module}&gt;依赖项(tab)。dependency:list
和dependency:tree -Dincludes=the.groupIid:the.artifact
来跟踪某些传递依赖项的来源。