我正在尝试创建一个原子可执行jar(即jar之外没有依赖项)。
为此,我在我的pom.xml中添加了一个com.jolira:onejar-maven-plugin。这似乎可以完成这项工作,但是当我执行jar时,我会收到警告: JarClassLoader:警告:来自与以下内容关联的输入流的空清单:lib / javax.inject-1.jar JarClassLoader:警告:lib / javax.inject-1.jar中的javax / inject / Inject.class被lib / javax.inject-2.5.0-b42.jar隐藏(带有不同的字节码) JarClassLoader:警告:lib / javax.inject-1.jar中的javax / inject / Named.class被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是唯一一个真正得到装载工作的人。
答案 0 :(得分:1)
将此放在这里以备将来使用。 我用这种方式解决了这个问题: (它是项目的依赖项,它在自己的依赖项中有javax.inject)
<exclusion>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</exclusion>
答案 1 :(得分:1)
经过一段时间的游戏,我发现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>