JAVA语言之SpringBoot项目使用maven-assembly-plugin根据不同环境打包成tar.gz
小标 2019-03-27 来源 : 阅读 4389 评论 0

摘要:本文主要向大家介绍了JAVA语言之SpringBoot项目使用maven-assembly-plugin根据不同环境打包成tar.gz,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之SpringBoot项目使用maven-assembly-plugin根据不同环境打包成tar.gz,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

JAVA语言之SpringBoot项目使用maven-assembly-plugin根据不同环境打包成tar.gz

spring-boot-assembly




  1. 在spring boot项目中使用maven profiles和maven assembly插件根据不同环境打包成tar.gz或者zip


  2. 将spring boot项目中的配置文件提取到外部config目录中


  3. 将spring boot项目中的启动jar包移动到boot目录中


  4. 将spring boot项目中的第三方依赖jar包移动到外部lib目录中


  5. bin目录中是启动,停止,重启服务命令


  6. 打包后的目录结构类似于tomcat/maven目录结构




GITHUB项目主页


https://github.com/geekidea/spring-boot-assembly


主要插件



  1. maven-assembly-plugin


  2. maven-jar-plugin


  3. spring-boot-maven-plugin


  4. maven-dependency-plugin


  5. maven-resources-plugin



1.maven-assembly-plugin 配置assembly.xml文件路径


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


2.assembly.xml打包配置文件


<?xml version="1.0" encoding="UTF-8"?>
<assembly>
    <!-- 可自定义,这里指定的是项目环境 -->
    <!-- spring-boot-assembly-local-1.0.RELEASE.tar.gz  -->
    <id>${profileActive}-${project.version}</id>

    <!-- 打包的类型,如果有N个,将会打N个类型的包 -->
    <formats>
        <format>tar.gz</format>
        <!--<format>zip</format>-->
    </formats>

    <includeBaseDirectory>true</includeBaseDirectory>

    <fileSets>
        <!--
            0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;
            0644->即用户具有读写权限,组用户和其它用户具有只读权限;
        -->

        <!-- 将src/bin目录下的所有文件输出到打包后的bin目录中 -->
        <fileSet>
            <directory>${basedir}/src/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <fileMode>0755</fileMode>
            <includes>
                <include>**.sh</include>
                <include>**.bat</include>
            </includes>
        </fileSet>

        <!-- 指定输出target/classes中的配置文件到config目录中 -->
        <fileSet>
            <directory>${basedir}/target/classes</directory>
            <outputDirectory>config</outputDirectory>
            <fileMode>0644</fileMode>
            <includes>
                <include>application.yml</include>
                <include>application-${profileActive}.yml</include>
                <include>mapper/**/*.xml</include>
                <include>static/**</include>
                <include>templates/**</include>
                <include>*.xml</include>
                <include>*.properties</include>
            </includes>
        </fileSet>

        <!-- 将第三方依赖打包到lib目录中 -->
        <fileSet>
            <directory>${basedir}/target/lib</directory>
            <outputDirectory>lib</outputDirectory>
            <fileMode>0755</fileMode>
        </fileSet>

        <!-- 将项目启动jar打包到boot目录中 -->
        <fileSet>
            <directory>${basedir}/target</directory>
            <outputDirectory>boot</outputDirectory>
            <fileMode>0755</fileMode>
            <includes>
                <include>${project.build.finalName}.jar</include>
            </includes>
        </fileSet>

        <!-- 包含根目录下的文件 -->
        <fileSet>
            <directory>${basedir}</directory>
            <includes>
                <include>NOTICE</include>
                <include>LICENSE</include>
                <include>*.md</include>
            </includes>
        </fileSet>
    </fileSets>

</assembly>


3.spring-boot-maven-plugin 排除启动jar包中依赖的jar包


<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <layout>ZIP</layout>
        <includes>
            <!-- 项目启动jar包中排除依赖包 -->
            <include>
                <groupId>non-exists</groupId>
                <artifactId>non-exists</artifactId>
            </include>
        </includes>
    </configuration>
</plugin>


4.maven-jar-plugin 自定义maven jar打包内容


<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <archive>
            <manifest>
                <!-- 项目启动类 -->
                <mainClass>Application</mainClass>
                <!-- 依赖的jar的目录前缀 -->
                <classpathPrefix>../lib</classpathPrefix>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
        <includes>
            <!-- 只打包指定目录的文件 -->
            <include>io/geekidea/springboot/**</include>
        </includes>
    </configuration>
</plugin>   


5.maven-dependency-plugin 复制项目的依赖包到指定目录


<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>target/lib</outputDirectory>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>false</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
                <includeScope>compile</includeScope>
            </configuration>
        </execution>
    </executions>
</plugin>   


6.maven-resources-plugin


<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.1.0</version>
</plugin>

<resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
    <includes>
        <include>application.yml</include>
        <include>application-${profileActive}.yml</include>
        <include>mapper/**/*.xml</include>
        <include>static/**</include>
        <include>templates/**</include>
        <include>*.xml</include>
        <include>*.properties</include>
    </includes>
</resource>


7.maven profiles配置


<!--MAVEN打包选择运行环境-->
<!-- 1:local(默认) 本地 2:dev:开发环境 3:test 4:uat 用户验收测试 5.pro:生产环境-->
<profiles>
    <profile>
        <id>local</id>
        <properties>
            <profileActive>local</profileActive>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>dev</id>
        <properties>
            <profileActive>dev</profileActive>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>test</id>
        <properties>
            <profileActive>test</profileActive>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>uat</id>
        <properties>
            <profileActive>uat</profileActive>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profileActive>prod</profileActive>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
</profiles>


8.阿里云仓库配置


<repositories>
    <!--阿里云仓库-->
    <repository>
        <id>aliyun</id>
        <url>//maven.aliyun.com/nexus/content/groups/public/</url>
    </repository>
</repositories>




项目源码结构


├─bin
│      restart.sh
│      shutdown.sh
│      startup.bat
│      startup.sh

├─logs
│      springboot-assembly.log

├─main
│  ├─assembly
│  │      assembly.xml
│  │
│  ├─java
│  │  └─io
│  │      └─geekidea
│  │          └─springboot
│  │              └─assembly
│  │                      Application.java
│  │                      HelloController.java
│  │                      HelloService.java
│  │                      HelloServiceImpl.java
│  │
│  └─resources
│      │  application-dev.yml
│      │  application-local.yml
│      │  application-prod.yml
│      │  application-test.yml
│      │  application-uat.yml
│      │  application.yml
│      │
│      ├─mapper
│      │  │  test.xml
│      │  │
│      │  └─hello
│      │          hello.xml
│      │
│      ├─static
│      │      index.html
│      │
│      └─templates
│              test.txt

└─test


项目打包


mvn clean package


使用maven assembly插件打包local环境后的压缩包,target目录下


spring-boot-assembly-local-1.0.RELEASE.tar.gz


linux解压tar.gz


tar -zxvf spring-boot-assembly-local-1.0.RELEASE.tar.gz


解压后的目录结构


└─spring-boot-assembly
    │  LICENSE
    │  NOTICE
    │  README.md
    │
    ├─bin
    │      restart.sh
    │      shutdown.sh
    │      startup.bat
    │      startup.sh
    │
    ├─boot
    │      spring-boot-assembly.jar
    │
    ├─config
    │  │  application-local.yml
    │  │  application.yml
    │  │
    │  ├─mapper
    │  │  │  test.xml
    │  │  │
    │  │  └─hello
    │  │          hello<span class="h    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程