欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Springboot如何基于assembly服务化实现打包

程序员文章站 2023-11-07 20:35:46
(1)首先我们编辑 assembly.xml 配置文件,在前文的基础上新增第三方依赖设置(高亮部分),实现将第三方的 jar 包添加到压缩包里的 lib 目录:

(1)首先我们编辑 assembly.xml 配置文件,在前文的基础上新增第三方依赖设置(高亮部分),实现将第三方的 jar 包添加到压缩包里的 lib 目录:

<?xml version="1.0" encoding="utf-8"?>
<assembly>
  <!--
    必须写,否则打包时会有 assembly id must be present and non-empty 错误
    这个名字最终会追加到打包的名字的末尾,如项目的名字为 hangge-test-0.0.1-snapshot,
    则最终生成的包名为 hangge-test-0.0.1-snapshot-bin.tar.gz
   -->
  <id>bin</id>
  <!-- 打包的类型,如果有n个,将会打n个类型的包 -->
  <formats>
<!--    <format>tar.gz</format>-->
    <format>zip</format>
  </formats>
  <includebasedirectory>true</includebasedirectory>

  <!--第三方依赖设置-->
  <dependencysets>
    <dependencyset>
      <!-- 不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录 -->
      <useprojectartifact>false</useprojectartifact>
      <outputdirectory>lib</outputdirectory>
      <unpack>false</unpack>
    </dependencyset>
  </dependencysets>

  <!--文件设置-->
  <filesets>
    <!--
      0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;
      0644->即用户具有读写权限,组用户和其它用户具有只读权限;
    -->
    <!-- 将src/main/assembly/bin目录下的所有文件输出到打包后的bin目录中 -->
    <fileset>
      <directory>src/main/assembly/bin</directory>
      <outputdirectory>bin</outputdirectory>
      <filemode>0755</filemode>
      <!--如果是脚本,一定要改为unix.如果是在windows上面编码,会出现dos编写问题-->
      <lineending>unix</lineending>
      <filtered>true</filtered><!-- 是否进行属性替换 -->
    </fileset>
    <!-- 将src/main/assembly/config目录下的所有文件输出到打包后的config目录中 -->
    <fileset>
      <directory>src/main/assembly/config</directory>
      <outputdirectory>config</outputdirectory>
      <filemode>0644</filemode>
    </fileset>
    <!-- 将src/main/resources下配置文件打包到config目录 -->
    <fileset>
      <directory>src/main/resources</directory>
      <outputdirectory>./config</outputdirectory>
      <includes>
        <include>**/*.xml</include>
        <include>**/*.properties</include>
        <include>**/*.yml</include>
      </includes>
      <filtered>true</filtered><!-- 是否进行属性替换 -->
    </fileset>
    <!-- 将项目启动jar打包到lib目录中 -->
    <fileset>
      <directory>target</directory>
      <outputdirectory>./</outputdirectory>
      <includes>
        <include>*.jar</include>
      </includes>
    </fileset>
    <!-- 将项目说明文档打包到docs目录中 -->
    <!-- <fileset>
      <directory>.</directory>
      <outputdirectory>./docs</outputdirectory>
      <includes>
        <include>*.md</include>
      </includes>
      <filemode>0644</filemode>
    </fileset>-->
    <fileset>
      <directory>docs</directory>
      <outputdirectory>./docs</outputdirectory>
      <filemode>0644</filemode>
    </fileset>
    <fileset>
      <directory>src/main/assembly/docs</directory>
      <outputdirectory>./docs</outputdirectory>
      <filemode>0644</filemode>
    </fileset>
  </filesets>
</assembly>

(2)接着编辑项目的 pom.xml 文件,先前使用的是 spring-boot-maven-plugin 来打包,这个插件会将项目所有的依赖打入项目 jar 包里面。我们将其替换为 maven-jar-plugin,并进行相关设置

 <build>
    <plugins>
      <!-- 指定启动类,将依赖打成外部jar包 -->
      <plugin>
        <groupid>org.apache.maven.plugins</groupid>
        <artifactid>maven-jar-plugin</artifactid>
        <configuration>
          <archive>
            <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
            <addmavendescriptor>false</addmavendescriptor>
            <manifest>
              <!-- 是否要把第三方jar加入到类构建路径 -->
              <addclasspath>true</addclasspath>
              <!-- 外部依赖jar包的最终位置 -->
              <!-- 因为我们将第三方jar和本项目jar放在同一个目录下,这里就使用./ -->
              <classpathprefix>./lib</classpathprefix>
              <!-- 项目启动类 -->
              <mainclass>com.yuehang.disneyland.disneylandapplication</mainclass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
      <plugin>
        <!--主要使用的是maven提供的assembly插件完成-->
        <artifactid>maven-assembly-plugin</artifactid>
        <version>3.1.1</version>
        <configuration>
          <descriptors>
            <!--具体的配置文件-->
            <descriptor>src/main/assembly/assembly.xml</descriptor>
          </descriptors>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <!--绑定到maven操作类型上-->
            <phase>package</phase>
            <!--运行一次-->
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

然后打包出来的结构

Springboot如何基于assembly服务化实现打包

运行就ok了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。