我觉得这个问题有点愚蠢,但我无法弄清楚如何将SINGLE依赖(jdom.jar)添加到另一个jar中。
上下文:我们为我们的应用程序开发了一个简单的插件,这个插件有很多依赖。我们使用fatjar将jdom.jar包含在其中。我正在尝试修复此插件中的错误,所以我决定同时“maven-ize”。 (我们刚刚切换到maven)这个插件加载到运行时,因此我们想要打包的唯一依赖项是jdom.jar。
问题:我发现有一个maven fatjar插件!不幸的是我找不到任何文档,这个maven插件将每个依赖项添加到输出jar中。经过多次尝试,我决定放弃这个fatjar插件并搜索另一个插件。我找到了一个罐子,阴影,但在快速读取它们后,它们看起来像是添加了每个依赖。
问题:将jdom.jar添加到我的插件jar中的简单方法是这样的:
-MyPlug-in.jar | |-src |-main |-java |-*.java |-jdom.jar
此外,我不想更改清单或输出jar文件名
非常感谢你的时间。
答案 0 :(得分:13)
这里没有关于如何使用maven包含一个带有maven-shader-plugin
的jar文件的答案。我花了一些时间来弄清楚如何真正做到这一点。以下是仅包含依赖项com.googlecode.json-simple:json-simple
中的类的代码段。
<project>
...
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>com.googlecode.json-simple:json-simple</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
...
</project>
答案 1 :(得分:1)
使用maven Shade工作正常,一罐也可以完成这项工作。 但我们最终决定在我们的扩展中包装jdom是一种不好的做法。
所以相反我们会这样做:
|-Root application Folder |-Extension Folder |-MyExtension.jar |-libs Folder |-jdom.jar
如果扩展程序无法在libs文件夹中找到相应的库,则会动态加载进入lib文件夹的jar文件夹。
对于希望解决我的主要问题的人,请查看@khmarbaise答案。
答案 2 :(得分:0)
出于这种目的,我建议使用maven-shade-plugin来创建一个可以通过多种方式控制的ueber-jar。 使用您不喜欢的shade plugin you can exclude things。但这可能是因为没有使用单独的maven模块来控制依赖关系。