Maven系列(七)assembly打包-程序和依赖jar包分开化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qqHJQS/article/details/72722156

  如果对maven不会用甚至不知道是什么的话,建议先看看下面几篇,看完,相信你会有所启发,并会对项目进行一个完整的依赖构建-打包测试-部署发布

maven.png

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

一般来讲,springboot项目使用这个插件,就自动将程序和那些依赖的jar包捆绑在一起,然后通过java -jar xxx.jar运行就OK了

再来说说maven打包的方式,整体来讲分为两大类

  • 第一种就是上面说的将所有的依赖jar包、资源文件和程序捆绑在一起,比较常见;
  • 第二种就是将程序和依赖的jar包和资源文件分开,比较灵活,可以自己编写一些shell脚本来启动或停止程序

各有各的好,具体的还需要视项目来定。
接下来说说第二种打包方式,我这里使用的是maven插件assembly,自己顺便写了个linux下执行和停止的脚本,解决了上面的问题,而且使用起来很方便,下面是步骤

去掉其他打包的插件

我将springboot的打包插件删掉,使用下面的插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <archive>
            <manifest>
                <!--指定main入口-->
                <mainClass>com.quick.Application</mainClass>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
            </manifest>
            <manifestEntries>
                <Class-Path>./</Class-Path>
            </manifestEntries>
        </archive>
        <excludes>
            <exclude>config/**</exclude>
        </excludes>
    </configuration>
</plugin>
<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <!-- not append assembly id in release file name -->
        <appendAssemblyId>false</appendAssemblyId>
        <descriptors>
            <!--打包的详细描述,需要配置额外文件-->
            <descriptor>src/main/build/package.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

对应的package.xml文件内容为

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
    <id>package</id>
    <formats>
        <!--压缩文件的类型-->
        <format>zip</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <!--需要包含的文件与输出的路径-->
        <fileSet>
            <directory>src/main/bin</directory>
            <outputDirectory>bin/</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>src/main/resources</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
            <scope>runtime</scope>
            <excludes>
                <exclude>${groupId}:${artifactId}</exclude>
            </excludes>
        </dependencySet>
    </dependencySets>
</assembly>

这些可以直接拿来用,如果想看详细的解析点我
下面是项目的结构目录

结构.png
项目里有脚本,在linux里可以执行,执行命令mvn clean install之后就会生成对应一个zip压缩包,解压后如图

文件目录.png
这样程序和jar包、资源文件分开,就方便调用了,代码上传到了github上。

欢迎浏览我的个人博客

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页