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可执行的主要内容,如果未能解决你的问题,请参考以下文章

将项目中lib下jar包合并到Tomcat中lib下

Cmake、.lib、dll 并避免在二进制文件中有多个 .lib 副本

idea导入lib后怎么用

jar包Linux中调用lib文件

Windows系统中的lib文件是做啥用的?

#pragma comment(lib,"xxx.lib")