lib / javax.inject-1.jar中的javax / inject / Inject.class被lib / javax.inject-2.5.0-b42.jar隐藏在onejar可执行文件中

问题描述 投票:1回答:2

我正在尝试创建一个原子可执行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是唯一一个真正得到装载工作的人。

maven jar executable-jar onejar
2个回答
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>

1
投票

把它放在这里以备将来使用。我用这种方式解决了这个问题:(这是项目的依赖,它在自己的依赖项中有javax.inject)

<exclusion>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
</exclusion>
© www.soinside.com 2019 - 2024. All rights reserved.