【问题标题】:Seperate the jars using maven assembly plugin使用 Maven 程序集插件分离 jars
【发布时间】:2018-12-19 03:17:07
【问题描述】:

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

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

通过使用maven组装插件,我想将模块1和模块2生成的jar放入target/modules,并将所有依赖项放入target/dependencies。

我怎样才能达到这个要求?

谢谢

【问题讨论】:

    标签: maven maven-assembly-plugin


    【解决方案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>
    

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

    <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,具有您想要的结构。

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 2010-12-29
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多