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

(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>

然后打包出来的结构

运行就ok了

以上是 Springboot如何基于assembly服务化实现打包 的全部内容, 来源链接: utcz.com/z/311910.html

回到顶部