如何使用maven和fatjar插件将单一依赖项包含到jar中

yrdbyhpb  于 12个月前  发布在  Maven
关注(0)|答案(4)|浏览(118)

我觉得这个问题有点愚蠢,但我不知道如何添加一个单一的依赖(jdom.jar)到另一个jar。
内容:我们为我们的应用程序开发了一个简单的插件,这个插件有很多依赖项。我们使用fatjar将jdom.jar包含到其中。我试图修复这个插件中的一个bug,所以我决定同时将其“maven化”。(我们刚刚切换到maven)这个插件加载在运行时,所以我们唯一希望打包的依赖项是jdom.jar。
问题:我发现有一个maven fatjar插件!不幸的是,我找不到任何文档,这个maven插件将每个依赖项添加到输出jar中。经过多次尝试,我决定给予这个fatjar插件,并寻找另一个。我找到了一个jar,shade,但在快速阅读后,他们看起来像他们添加了每个依赖项。
问:什么是一个简单的方法来只添加jdom.jar到我的插件jar中,像这样:

-MyPlug-in.jar
|
|-src
 |-main
  |-java
   |-*.java
|-jdom.jar

字符串
我也不想改变清单或输出jar文件名
非常感谢你的时间。

t8e9dugd

t8e9dugd1#

关于如何使用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>

字符串

zqry0prt

zqry0prt2#

出于这种目的,我建议使用maven-shade-plugin,它将创建一个可以以多种方式控制的uber-jar。使用shade plugin you can exclude things,你不喜欢。但这可能是由于没有使用单独的maven模块,你可以控制依赖项。

44u64gxh

44u64gxh3#

使用maven Shade可以很好地工作,一个jar也可以完成这项工作。但是我们最终决定在扩展中打包jdom是一个不好的做法。
所以我们要这样做:

|-Root application Folder
 |-Extension Folder
  |-MyExtension.jar
  |-libs Folder
   |-jdom.jar

字符串
lib文件夹中的jar将动态加载,如果扩展无法在libs文件夹中找到适当的libs,则不会加载。
对于那些希望解决我的主要问题的人,请查看@khmarbaise答案。

kgsdhlau

kgsdhlau4#

我遇到了一个问题,Maven Shade Plugin包含了Uber Jar中的所有依赖项(来自父pom.xml和子模块pom.xml文件),导致了各种冲突。我只想为子模块包含一个依赖项(GSON),我设法做到了以下几点:

# Child pom.xml
...
<dependencies>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>${gson.version}</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.5.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <createDependencyReducedPom>false</createDependencyReducedPom>
                        <artifactSet>
                            <includes>
                                <include>com.google.code.gson:gson</include>
                            </includes>
                        </artifactSet>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

字符串

相关问题