1

我正在尝试创建一个原子可执行 jar(即 jar 之外没有依赖项)。

为此,我在 pom.xml 中添加了一个 com.jolira:onejar-maven-plugin。这似乎可以完成这项工作,但是当我执行 jar 时,我收到警告: JarClassLoader: Warning: Null manifest from input stream associated with: lib/javax.inject-1.jar JarClassLoader: Warning: 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 是唯一真正让加载工作的食谱。

4

2 回答 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>
于 2017-12-27T14:20:18.783 回答
1

只是把这个放在这里以备不时之需。我以这种方式解决了这个问题:(它是针对项目的依赖项,它在自己的依赖项中有 javax.inject )

<exclusion>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
</exclusion>
于 2017-12-27T06:49:37.997 回答