美文网首页
springboot-使用assembly进行项目打包

springboot-使用assembly进行项目打包

作者: 沉沦2014 | 来源:发表于2018-10-03 13:59 被阅读116次

    springboot-maven插件

    springboot-maven插件

    repackage目标声明

    
    Requires a Maven project to be executed.
    Requires dependency resolution of artifacts in scope: compile+runtime.
    Since version: 1.1.
    Binds by default to the lifecycle phase: package.
    

    1. 项目打包Jar

    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    如此,执行mvn package可自动生成一个独立可执行的jar文件

    2. 项目完整构建

    通常,项目发布时除了jar包,还会包含配置文件、启停脚本等,此时需要借助assembly插件完成重复打包
    构建结构

    base
        - bin
            - start.sh
            - stop.sh
        - application.properties
        - log4j.properties
        - app-0.0.1-SNAPSHOT.jar
    

    pom定义

    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.4</version>
                    <executions>
                        <execution>
                            <id>bundle</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                            <configuration>
                                <descriptors>
                                    <descriptor>${basedir}/src/main/build/assembly.xml</descriptor>
                                </descriptors>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    说明
    将assembly定义在spring-boot:repackage之后,这样maven在执行package阶段时会按照声明顺序处理;
    assembly.xml存放于src/main/build目录,此外用于发布的config、bin目录及文件都放到这个目录;

    assembly定义

    <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>bundle</id>
        <formats>
            <format>tar.gz</format>
        </formats>
        <includeBaseDirectory>false</includeBaseDirectory> <!-- disable the creation of root's distribution dir in the archive -->
    
         <fileSets>  
            <!-- config files -->
            <fileSet>  
                <directory>${basedir}/src/main/build/config</directory>  
                <excludes></excludes>  
                 <includes>
                    <include>application*.properties</include>
                    <include>log4j.properties</include> 
                </includes>
                <fileMode>0644</fileMode>
                <outputDirectory>/</outputDirectory>  
            </fileSet>  
            <!-- scripts -->
            <fileSet>
                <directory>${basedir}/src/main/build/bin</directory>
                <includes>
                    <include>*.sh</include>
                </includes>
                <fileMode>0755</fileMode>
                <outputDirectory>/</outputDirectory>
            </fileSet>
            <!-- executable jar -->
             <fileSet>
                <directory>${project.build.directory}</directory>
                <outputDirectory>/</outputDirectory>
                <includes>
                    <include>${project.artifactId}-${project.version}.jar</include>
                </includes>
                <fileMode>0755</fileMode>
            </fileSet>
        </fileSets>  
    
    </assembly>
    

    关于内置变量

    3. 本地包依赖

    • 定义scope=system依赖
    <dependency>
       <groupId>com.xxx.component</groupId>
       <artifactId>mongoop</artifactId>
       <version>0.0.1-SNAPSHOT</version>
       <scope>system</scope>
       <systemPath>D:\work\maven\repo\m2\xxx.jar</systemPath>
      </dependency>
    
    • 声明springboot打包时包含system范围的依赖
    <build>
      <plugins>
       <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
         <includeSystemScope>true</includeSystemScope>
        </configuration>
        <executions>
         <execution>
          <goals>
           <goal>repackage</goal>
          </goals>
         </execution>
        </executions>
       </plugin>
      </plugins>
     </build>
    

    参考文档

    springboot文档-maven插件使用
    关于springboot-repackage
    maven内置变量

    相关文章

      网友评论

          本文标题:springboot-使用assembly进行项目打包

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