使用maven-assembly-plugin打包java

我一般使用maven-assembly-plugin打包程序的时候, 会专门在工程中创建一个module, 比如就叫xxx-package吧.

然后在这个xxx-packagesrc/main下创建src/main/assembly/bin.xml文件, 其实文件位置不一定非得这么设置哈. 后面的bin.xml文件中会指定这个位置的. 所以你完全可以按照你自己的喜好放置这个文件.

pom.xml

我的xxx-packagemodule的pom.xml文件的内容为:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>xxx</artifactId>
        <groupId>com.xxx.xxx</groupId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>xxx-package</artifactId>

    <properties>
        <maven_deploy_skip>true</maven_deploy_skip>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.xxx.xxx</groupId>
            <artifactId>xxx</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            <mainClass>com.xxx.xxx.aaa.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <id>assemble</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <finalName>xxx-${project.version}</finalName>
                            <descriptors>
                                <descriptor>src/main/assembly/bin.xml</descriptor>
                            </descriptors>
                            <tarLongFileMode>gnu</tarLongFileMode>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <finalName>xxx</finalName>
    </build>
</project>

其中的<dependencies>部分会把自己依赖jar打包到bin.xml中配置的lib目录下.
其中的<descriptor>src/main/assembly/bin.xml</descriptor>指定了bin.xml文件的位置

bin.xml

我的bin.xml文件的内容为:

<assembly
        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
  http://maven.apache.org/xsd/assembly-1.1.2.xsd">

    <id>bin</id>

    <formats>
        <format>dir</format>
        <format>tar.gz</format>
    </formats>

    <baseDirectory>xxx-${project.version}</baseDirectory>

    <dependencySets>
        <dependencySet>
            <outputDirectory>default/lib</outputDirectory>
            <unpack>false</unpack>
            <useProjectArtifact>false</useProjectArtifact>
        </dependencySet>
    </dependencySets>


    <fileSets>
        <fileSet>
            <directory>../</directory>
            <includes>
                <include>default/README</include>
                <include>default/LICENSE</include>
                <include>default/bin/**</include>
                <include>default/conf/**</include>
                <include>default/runit/**</include>
                <include>java/**</include>
                <include>bin/**</include>
                <include>runit/**</include>
            </includes>

            <excludes>
                <exclude>xxx/**</exclude>
                <exclude>server/**</exclude>
                <exclude>**/target/**</exclude>
                <exclude>**/.classpath</exclude>
                <exclude>**/.project</exclude>
                <exclude>**/.settings/**</exclude>
                <exclude>lib/**</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>../target/site</directory>
            <includes>
                <include>/**</include>
            </includes>
            <outputDirectory>docs</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

进行打包

运行clean package -Dmaven.test.skip=true命令, 会在xxx-packagetarget目录下生成下面的东西:

drwxr-xr-x  2 rollenholt  staff    68B Sep 20 11:51 archive-tmp
drwxr-xr-x  3 rollenholt  staff   102B Sep 20 11:51 maven-archiver
drwxr-xr-x  3 rollenholt  staff   102B Sep 20 11:51 xxx-1.0.0-SNAPSHOT-bin
-rw-r--r--  1 rollenholt  staff    93M Sep 20 11:51 xxx-1.0.0-SNAPSHOT-bin.tar.gz
-rw-r--r--  1 rollenholt  staff   2.8K Sep 20 11:51 xxx-xxx-package.jar

我们需要的东西其实是这个xxx-1.0.0-SNAPSHOT-bin.tar.gz, 这个xxx-1.0.0-SNAPSHOT-bin其实就是这个tar.gz文件解压
后的内容. 如果你使用tree .查看xxx-1.0.0-SNAPSHOT-bin目录的内容的话, 会发现自己在bin.xml<include>中指定的内容都会被打包在这个目录下面. 同时这个xxx-package模块的相关maven依赖, 也会被自动打包到lib目录下.

然后后续我们就可以使用这个tar.gz文件进行rpm打包了. 关于如何进行rpm打包的话, 请查看[rpmbuild spec文件的编写,以及rpm包的打包](rpmbuild spec文件的编写,以及rpm包的打包)

如果你想就本篇文章与我交流,可以在文章下方留言或者写邮件到me#wenchao.ren(#->@)
本文版权归作者所有,除非文章内特别说明,否则你可以随意转载本站的文章,但请文章页面明显位置给出原文连接。谢谢。
赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注