9

我对这个问题感到有点愚蠢,但我不知道如何将 SINGLE 依赖项(jdom.jar)添加到另一个 jar 中。

上下文:我们为我们的应用程序开发了一个简单的插件,这个插件有很多依赖。我们使用 fatjar 将 jdom.jar 包含在其中。我正在尝试修复这个插件中的一个错误,所以我决定同时“maven-ize”它。(我们刚刚切换到 maven)这个插件是在运行时加载的,所以我们想要与它打包的唯一依赖项是 jdom.jar。

问题:发现有maven fatjar插件!不幸的是,我找不到任何文档,并且这个 maven 插件将每个依赖项添加到输出 jar 中。经过多次尝试,我决定放弃这个 fatjar 插件并寻找另一个。我找到了 one-jar , shade 但在快速阅读它们之后,它们看起来像是添加了每个依赖项。

问题:像这样只将 jdom.jar 添加到我的插件 jar 中的简单方法是什么:

-MyPlug-in.jar
|
|-src
 |-主要
  |-java
   |-*.java
|-jdom.jar

另外我不想更改清单或输出 jar 文件名

非常感谢您的时间。

4

3 回答 3

21

这里没有关于如何使用 maven 将单个 jar 文件包含在maven-shader-plugin. 我花了一些时间才弄清楚如何真正做到这一点。这是一个仅包含依赖项中的类的片段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>
于 2015-12-05T17:52:50.720 回答
1

使用 maven Shade 可以正常工作,一个罐子也可以完成这项工作。但是我们最终决定在我们的扩展中打包 jdom 是一个不好的做法。

所以我们要这样做:

|-根应用文件夹
 |-扩展文件夹
  |-MyExtension.jar
  |-libs 文件夹
   |-jdom.jar

lib 文件夹中的 jar 将被动态加载,如果扩展无法在 libs 文件夹中找到适当的库,则不会加载。

对于希望解决我的主要问题的人,请查看@khmarbaise Answer。

于 2012-07-12T13:50:22.183 回答
0

出于这种目的,我建议使用maven-shade-plugin它将创建一个可以通过多种方式控制的 ueber-jar。使用阴影插件,您可以排除您不喜欢的东西。但这可能是由于没有使用可以控制依赖关系的单独 maven 模块造成的。

于 2012-07-12T07:09:30.153 回答