maven:将多模块项目组装成单个jar

时间:2010-04-23 10:04:26

标签: maven maven-2 archive maven-assembly-plugin multi-module

我有一个多模块项目,想要创建一个包含所有模块类的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时,只包含父文件夹中的源(空)。如何将模块中的源包含到存档中?

3 个答案:

答案 0 :(得分:7)

我认为您正在寻找Maven Shade插件:

http://maven.apache.org/plugins/maven-shade-plugin/index.html

将任意数量的依赖项打包成uber包的依赖性。然后可以将其部署到存储库。

答案 1 :(得分:3)

要将所有模块中的类打包到单个jar中,我执行了以下操作:

  1. 创建了附加模块,仅用于将所有其他模块的内容打包到单个jar中。这通常被称为汇编模块。尝试将此模块称为目标jar文件。

  2. 在这个新模块的pom.xml中,我添加了maven-assemby-plugin。这个插件打包所有类并将它们放在单个文件中。它使用其他配置文件(步骤4。)

  3. <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以包含项目模块。