我有一个多模块项目,想要创建一个包含所有模块类的jar。在我的父POM中,我声明了以下插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>bin</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
但是,在运行mvn assembly:assembly时,只包含父文件夹中的源(空)。如何将模块中的源包含到存档中?
答案 0 :(得分:7)
我认为您正在寻找Maven Shade插件:
http://maven.apache.org/plugins/maven-shade-plugin/index.html
将任意数量的依赖项打包成uber包的依赖性。然后可以将其部署到存储库。
答案 1 :(得分:3)
要将所有模块中的类打包到单个jar中,我执行了以下操作:
创建了附加模块,仅用于将所有其他模块的内容打包到单个jar中。这通常被称为汇编模块。尝试将此模块称为目标jar文件。
在这个新模块的pom.xml中,我添加了maven-assemby-plugin。这个插件打包所有类并将它们放在单个文件中。它使用其他配置文件(步骤4。)
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>go-framework-assemby</id> <phase>package</phase><!-- create assembly in package phase (invoke 'single' goal on assemby plugin)--> <goals> <goal>single</goal> </goals> <configuration> <descriptors> <descriptor>src/main/assemble/framework_bin.xml</descriptor> </descriptors> <finalName>framework</finalName> <appendAssemblyId>false</appendAssemblyId> </configuration> </execution> </executions> </plugin> </plugins> </build>
3.在这个新模块的pom.xml中,我还向所有其他模块添加了依赖项,包括父pom。只有依赖项中包含的模块才会打包在目标jar文件中。
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>fwk-bam</artifactId>
<version>${project.version}</version>
</dependency>...
4.最后我在汇编模块中创建了汇编描述符(文件:src / main / assemble / framework_bin.xml)
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
<id>all-jar</id>
<formats>
<format>jar</format> <!-- the result is a jar file -->
</formats>
<includeBaseDirectory>false</includeBaseDirectory> <!-- strip the module prefixes -->
<dependencySets>
<dependencySet>
<unpack>true</unpack> <!-- unpack , then repack the jars -->
<useTransitiveDependencies>false</useTransitiveDependencies> <!-- do not pull in any transitive dependencies -->
</dependencySet>
</dependencySets>
</assembly>
答案 2 :(得分:0)
预定义的bin
不会在这里诀窍。您必须使用类似于预定义bin
描述符的自定义描述符,但声明moduleSet
以包含项目模块。