使用Maven组件插件分隔罐子

时间:2018-12-19 03:17:07

标签: maven maven-assembly-plugin

我需要将罐子分成不同的文件夹。

在我的项目中,我有几个模块,即:module1,module2和Assembly。

通过使用Maven程序集插件,我想将从modules1和module2生成的jar放入目标/模块,并将所有依赖项放入目标/依赖性。

我如何达到此要求?

谢谢

1 个答案:

答案 0 :(得分:1)

基于您的项目结构如下:

project
    |- module1
    |- module2
    |- assembly
        |- pom.xml
        |- src
            |- assembly
                |- bin.xml

assembly应该取决于module1module2;在assembly/pom.xml中设置这些依赖项:

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>module1</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>module2</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

您还必须在maven-assembly-plugin中添加assembly/pom.xml

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <descriptors>
            <descriptor>src/assembly/bin.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

assembly:single绑定到package阶段,以在运行mvn package时创建程序集。

最后,如下定义assembly/src/assembly/bin.xml

<assembly   xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
    <id>bin</id>
    <formats>
        <format>dir</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <outputDirectory>modules</outputDirectory>
            <includes>
                <include>${project.groupId}:*:*</include>
            </includes>
            <excludes>
                <exclude>${project.groupId}:${project.artifactId}:*</exclude>
            </excludes>
        </dependencySet>
        <dependencySet>
            <useTransitiveDependencies>true</useTransitiveDependencies>
            <outputDirectory>dependencies</outputDirectory>
            <excludes>
                <exclude>${project.groupId}:*:*</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>
  • format定义所需的程序集格式(此处为目录,但可以为tar.gzzip,...)
  • 第一个dependencySet定义一个文件夹modules/,来自同一groupId的所有工件都将放置在该文件夹中。在这里,您还可以控制是否只需要一些工件(例如,如果只需要module1)。 assembly JAR从此文件夹中排除,因为此模块仅用于创建装配体
  • 第二个dependencySet定义了一个文件夹dependencies/,所有依赖项(以及传递性依赖项)都将放在该文件夹中。这里的依赖表示带有不同groupId 的工件,如excludes子句
  • 所述

mvn package随后将使用所需的结构生成名为assembly/target/的程序集(在assembly-${project.version}-bin文件夹中)。