lib / javax.inject-1.jar中的javax / inject / Inject.class被lib / javax.inject-2.5.0-b42.jar隐藏在onejar可执行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lib / javax.inject-1.jar中的javax / inject / Inject.class被lib / javax.inject-2.5.0-b42.jar隐藏在onejar可执行相关的知识,希望对你有一定的参考价值。
我正在尝试创建一个原子可执行jar(即jar之外没有依赖项)。
为此,我在我的pom.xml中添加了一个com.jolira:onejar-maven-plugin。这似乎可以完成这项工作,但是当我执行jar时,我收到警告:JarClassLoader:警告:来自输入流的Null清单与:lib / javax.inject-1.jar JarClassLoader:警告:javax / inject / Inject.class在lib / javax.inject-1.jar中,lib / javax.inject-2.5.0-b42.jar(带有不同的字节码)隐藏了JarClassLoader:警告:lib / javax.inject-1中的javax / inject / Named.class .jar被lib / javax.inject-2.5.0-b42.jar隐藏(带有不同的字节码)
似乎我的依赖关系同时引入了javax.inject-1.jar和javax.inject-2.5.0-b42.jar。为了验证这一点,我检查了并且正从存储库下载/。我当然没有在依赖项中列出两者,因此必须有一些隐含的依赖AFAICS。
任何人都知道是否有办法从maven依赖项中只排除一个jar,或者为了防止onejar-maven-plugin将其包含在可执行jar中?
有没有更好的方法来创建一个原子(或一些称为胖)jar,其中Java加载器实际上可以从嵌入式jar加载。我已经整天尝试了各种不同的食谱,并且onejar是唯一一个真正得到装载工作的人。
经过一段时间的游戏,我发现Alex的解决方案是正确的,只是因为我把排除放在了错误的地方。解决方案是把它放在这里:
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.26</version>
<exclusions> <!-- exclude exclude javax.inject-1.jar -->
<exclusion>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
</exclusions>
</dependency>
把它放在这里以备将来使用。我用这种方式解决了这个问题:(这是项目的依赖,它在自己的依赖项中有javax.inject)
<exclusion>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
以上是关于lib / javax.inject-1.jar中的javax / inject / Inject.class被lib / javax.inject-2.5.0-b42.jar隐藏在onejar可执行的主要内容,如果未能解决你的问题,请参考以下文章