我正在尝试将所有依赖项自包含的java归档文件(JAR)捆绑在一起。首先,我尝试使用maven assembly plugin,虽然这缺少了一些类。 jar-with-dependencies documentation建议使用maven-shade-plugin,最终会错过不同的类。我认为正在发生的事情是,使用相同包名的多个依赖关系似乎被跳过,所以跳过了slf4j之类的东西。
我真正喜欢的是打包的jar包含自包含的库而不是重新打包它们。
我几乎放弃了,并且认为我只使用bin descriptor for the assembly plugin,它只会压缩jar本身并且没有依赖。
注意:我知道其他人也提出了类似的问题,这些问题已经提出了使用阴影/装配插件的建议,但没有人说明我遇到的具体问题。
更新:由khmarbaise请求以下显示一个POM,其中跳过所有类。请注意,还有另一个JAR使用相同的包结构但是本地化包,包含了本地化包,但省略了所有类。
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ddtek</groupId>
<artifactId>openedge</artifactId>
<packaging>jar</packaging>
<version>10.1C04</version>
<name>openedge</name>
<url>http://progress.com</url>
<dependencies>
<dependency>
<groupId>com.ddtek</groupId>
<artifactId>base</artifactId>
<version>10.1C04</version>
</dependency>
<dependency>
<groupId>com.ddtek</groupId>
<artifactId>util</artifactId>
<version>10.1C04</version>
</dependency>
</dependencies>
</project>
请注意,上述POM是第三方库,不会发布到maven,只存在于我们的本地nexus存储库中。
答案 0 :(得分:1)
如果没有预定义的描述符套件满足您的需求,您可以编写自己的程序集。
要包含依赖项,请指定类似
的内容<dependencySets>
<dependencySet>
<outputDirectory>/lib</outputDirectory>
<useProjectArtifact>false</useProjectArtifact>
<useTransitiveDependencies>true</useTransitiveDependencies>
<unpack>false</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
并在你的pom中写道:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
然后根据您的要求进行自定义。