Maven花式打包

/ Java / 0 条评论 / 340 浏览

基本支持

  1. 打出来的包自定义名称

    <build>
        <finalName>新的名称</finalName>
    </build>
    

    例如

    <build>
        <finalName>lianglianglee-${version}</finalName>
    </build>
    

    打出来的包,就是lianglianglee-1.0.jar 版本号取project版本号

  2. 静态资源打入包中

    <resources>
      <resource>
         <directory>src/main/resources</directory>
         <filtering>true</filtering>
      </resource>
    </resources>
    

    directory可以是任何项目内文件夹

利用插件

插件名称 maven-assembly-plugin

官方提供的打包方式: bin, jar-with-dependencies, src, project

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>3.0.0</version>
  <configuration>
     <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
     </descriptorRefs>
  </configuration>
</plugin>
  1. 自定义打包方式

    在项目中创建一个package.xml文件

<assembly
  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
 <!--模版ID-->
  <id></id>
  <!-- 生成的包类型-->
  <formats>
    <format>tar.gz</format>
  </formats>
  <!-- 工程打包内容 就是jar的打包-->
  <dependencySets>
    <dependencySet>
      <!--输出到jar的哪个位置-->
      <outputDirectory></outputDirectory>
    </dependencySet>
  </dependencySets>
  <!-- 管理最后包中的内容-->
  <fileSets>
    <fileSet>
      <!-- 包含的文件(夹)-->
      <includes>
        <include></include>
      </includes>
      <!--排除的文件(夹)-->
      <excludes>
        <exclude></exclude>
      </excludes>
      <!--自定义文件权限-->
      <fileMode></fileMode>
    </fileSet>
  </fileSets>
  <!-- 引入的文件列表-->
  <files>
    <file>
      <!-- 源文件-->
      <source></source>
      <!-- 输出的相对路径-->
      <outputDirectory></outputDirectory>
      <!-- 重命名-->
      <destName></destName>
      <!-- 权限-->
      <fileMode></fileMode>
    </file>
  </files>
</assembly>

模版配置

实战

我现在的场景是

打出标准的SpringBoot项目包

最终生成一个zip,一个tar.gz

将application.yml打包到压缩包的跟路径

将start.sh,stop.sh打到压缩包跟路径,并配置权限

POM.xml配置

    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <appendAssemblyId>false</appendAssemblyId>
        <finalName>gems-${version}</finalName>
        <descriptors>
          <descriptor>package.xml</descriptor>
        </descriptors>
      </configuration>
      <executions>
        <execution>
          <id>make-assembly</id> <!-- this is used for inheritance merges -->
          <phase>package</phase> <!-- bind to the packaging phase -->
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

自定义配置文件配置

package.xml和POM同目录

<assembly
  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <!-- 项目打成Zip包的Id -->
  <id>zip-targz</id>
  <formats>
    <!-- 包的后缀 -->
    <format>zip</format>
    <format>tar.gz</format>
  </formats>

  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <!-- 项目一些说明的资源输出的目录,下面为当前目录 -->
    <fileSet>
      <outputDirectory>/</outputDirectory>
      <directory>src\main\resources</directory>
      <!-- 指定那些文件需要复制进该目录下 -->
      <includes>
        <include>application.yml</include>
      </includes>
    </fileSet>
    <fileSet>
      <outputDirectory>/</outputDirectory>
      <directory>target</directory>
      <includes>
        <include>*.jar</include>
      </includes>
    </fileSet>
  </fileSets>
  <files>
    <file>
      <source>start.sh</source>
      <fileMode>0551</fileMode>
      <outputDirectory>/</outputDirectory>
    </file>
    <file>
      <source>stop.sh</source>
      <fileMode>0551</fileMode>
      <outputDirectory>/</outputDirectory>
    </file>
  </files>

</assembly>  

打出的包 target目录下:

1539742308100

压缩包内:

1539742350386