美文网首页
maven:assembly打包插件简记

maven:assembly打包插件简记

作者: 末池桑 | 来源:发表于2020-04-18 10:59 被阅读0次

之前记录了 maven:jar、dependency打包插件简记,这里再记录一下 maven-assembly打包插件的使用,方便日后回顾和查阅。

maven-assembly-plugin

assembly 也是 maven 下的一个打包插件,其可以将项目里的资源按照相应的配置(需要配置相应的 descriptor 描述文件)打包成一个包(支持zip、jar、tar、tar.gz、tar.bz2包),其 pom 的配置和解释如下:

<!-- maven-assembly-plugin 自定义打包貌似无法打可执行 Jar,这里用 maven-jar-plugin 来打可执行jar包-->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <useUniqueVersions>false</useUniqueVersions>
                <mainClass>com.chifuyong.TestDemo</mainClass>
                <addClasspath>true</addClasspath>
                <classpathPrefix>dependencies/</classpathPrefix>
            </manifest>
        </archive>
    </configuration>
</plugin>
<!-- maven-assembly-plugin 打包配置,使用自定义文件描述来打包 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.2.0</version>
    <executions>
        <execution>
            <id>assembly-test</id>
            <!-- 在 package 阶段执行 assembly:single -->
            <phase>package</phase>
            <goals>
                <!-- 在 package 阶段执行 assembly:single -->
                <goal>single</goal>
            </goals>
            <configuration>
                <!-- 打包后的文件名会以 finalName-id (id 为 descriptor xml 的 id ) -->
                <finalName>${project.artifactId}</finalName>
                <descriptors>
                    <!-- 自定义描述文件(里面定义了如何打包)的路径 -->
                    <descriptor>assemblies/assembly.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
        <!-- 如果还需要打另一个以不同方式打的包,可以再配置一个 execution -->
    </executions>
</plugin>

这里使用了 jar-plugin 来将项目打包成可执行 Jar,再通过 pom.xml 下的 <descriptor> 标签配置的描述文件 ,对项目里的资源进行整合打包成一个包文件,此次示例中用到的描述文件为:assemblies/assembly.xml ,其具体配置和解释如下:

    <!-- maven-assembly-plugin 自定义打包配置-->
    <id>${project.version}</id>
    <formats>
        <!--打包的类型:zip、jar、tar、tar.gz、tar.bz2、war、dir-->
        <format>tar.gz</format>
    </formats>
    <!-- 打包后有无根路径目录,这边为true,
         根路径目录为 pom 文件中的<finalName>${project.artifactId}</finalName> -->
    <includeBaseDirectory>true</includeBaseDirectory>
    <!-- 打包单个文件 -->
    <files>
        <file>
            <!-- 把项目 jar 打包进去,并改名 -->
            <source>${project.build.directory}/${project.artifactId}-${project.version}.jar</source>
            <outputDirectory>/</outputDirectory>
            <!-- 可以修改打包后文件的名称-->
            <destName>maven-plugin-example.jar</destName>
        </file>
    </files>
    <!--打包文件集-->
    <fileSets>
        <fileSet>
            <!-- 文件目录 -->
            <directory>${project.basedir}/src/main/resources/bin</directory>
            <!-- 目标目录 -->
            <outputDirectory>/</outputDirectory>
        </fileSet>
        <!-- config文件打包 -->
        <fileSet>
            <!-- ${profile.env} 为自定义的 profile -->
            <directory>${project.basedir}/src/main/resources/config/${profile.env}</directory>
            <outputDirectory>/conf</outputDirectory>
            <includes>
                <include>*.xml</include>
            </includes>
        </fileSet>
    </fileSets>
    <!--打包依赖库-->
    <dependencySets>
        <dependencySet>
            <!-- 依赖所属目录 -->
            <outputDirectory>/lib</outputDirectory>
            <!--是否把包解开,默认为 false-->
            <unpack>false</unpack>
            <!-- 排除自身 -->
            <useProjectArtifact>false</useProjectArtifact>
            <!-- scope 范围-->
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
</assembly>

mvn:package 之后,打包后的会生成一个 *.tar.gz 文件,这个包里的文件就是按照描述里的配置而打包出来的,具体内容如下:

默认的话 assembly 也有四个内置的 assembly descriptor 可以使用,在 maven-assembly-plugin.3.2.0.jar 下可以看到,相应的描述文件及其作用,如下图 bin.xml、jar-with-dependencies.xml 、src.xml、project.xml 都是其内置的描述文件,可以点击查看其相应的配置。

如果想用内置描述文件进行打包也可以,这里用 jar-with-dependencies.xml (将项目代码和其所依赖的所有 jar 都打包到一个 jar 里)这个内置描述文件做例子,其配置如下:

<!-- maven-assembly-plugin 打包配置:jar-with-dependencies -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <appendAssemblyId>false</appendAssemblyId>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>com.chifuyong.TestDemo</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

打包后的 jar 进行反编译,内容如下:

具体的演示代码 GitHub 地址 > 点击这里

相关文章

网友评论

      本文标题:maven:assembly打包插件简记

      本文链接:https://www.haomeiwen.com/subject/lgadvhtx.html