springboot打jar包分离lib和resources
为什么要配置、依赖⽂件分离:
1.在传统jar包中,所有⽂件都打包到⼀个jar包中,jar⾮常臃肿,在进⾏服务更新部署时⾮常不便,⽽且传输不稳定时导致传输失
败。如果过实⾏⽂件分离、在依赖不改变的情况下,仅仅上传更新后的编译⽂件是⾮常xxxxxxxxxxxxxxxxxxxxxxxxxxxx⽅便的。
2. 如果要修改⼀些配置⽂件:properties、xml,静态⽂件等可以直接在服务器上编辑。
那么怎么实⾏配置、依赖⽂件分离呢?
插件介绍
1. maven-jar-plugin 这个插件式专门⽤来打包⽤的,可以配置需要打包进去的⽂件,程序的⼊⼝类等。
2. maven-resources-plugin 这个插件是⽤来拷贝资源⽂件的。
3. maven-maven-dependency-plugin 这个插件是⽤来拷贝依赖库的。
4. maven-assembly-plugin 可以说包含了以上插件的功能,但是可以做到更精细的控制。
5. spring-boot-maven-plugin 这个不⽤说,springboot 项⽬最重要的插件,整个项⽬的打包处理过程还是要依附于它。
打包成可执⾏jar,不仅仅局限SpringBoot项⽬(主⼊⼝函数存在)
maven-jar-plugin 插件打包jar
在pom⽂件中配置,但是这样依赖的jar并不会打进来(后⾯会有解决⽅法),适⽤不需要依赖⽂件的项⽬。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3</version>
<configuration>
<archive>
<manifest>
<!--是否添加依赖-->
<addClasspath>true</addClasspath>
<!--设置启动类-->
<mainClass&Main</mainClass>
</manifest>
</archive>
<!--设置⽣成jar输出位置-->
<outputDirectory>${project.build.directory}</outputDirectory>
</configuration>
</plugin>
maven-assembly-plugin 插件打包jar
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<!--不添加AssemblyId-->
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<!--配置打包的时候⼀并打包依赖jar-->
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!--⼊⼝类-->
<mainClass&Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<!--绑定⽣命周期-->
<phase>package</phase>
<goals>
<!--执⾏assembly -->
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
打包SpringBoot 项⽬
⽅案⼀、
<plugins>
<!--打包jar-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!--MANIFEST.MF 中 Class-Path 加⼊前缀-->
<classpathPrefix>lib/</classpathPrefix>
<!--jar包不包含唯⼀版本标识-->
<useUniqueVersions>false</useUniqueVersions>
maven打包本地jar包<!--指定⼊⼝类-->
<mainClass&Application</mainClass>
</manifest>
<manifestEntries>
<!--MANIFEST.MF 中 Class-Path 加⼊资源⽂件⽬录-->
<Class-Path>/resources</Class-Path>
</manifestEntries>
</archive>
<outputDirectory>${project.build.directory}/dis</outputDirectory>
</configuration>
</plugin>
<!--拷贝依赖 copy-dependencies-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/dis/lib/
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!--拷贝资源⽂件 copy-resources-->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<outputDirectory>${project.build.directory}/dis/resources</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!--spring boot repackage,依赖 maven-jar-plugin 打包的jar包重新打包成 spring boot 的jar包-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<!--使⽤外部配置⽂件,jar包⾥没有资源⽂件-->
<addResources>true</addResources>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
⽅案⼆
这⾥依赖l 描述⽂件
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor&l</descriptor>
</descriptors>
<outputDirectory>${project.build.directory}/dist/</outputDirectory>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 打包成jar⽂件,并指定lib⽂件夹以及resources资源⽂件夹 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass&Application</mainClass>
<!--依赖前缀-->
<classpathPrefix>lib/</classpathPrefix>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<Class-Path>resources/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
<assembly xmlns="/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/plugins/maven-assembly-plugin/assembly/1.1.2 /xsd/assembly-1.1.2.xsd">
<id>distribution</id>
<!--输出格式 zip 最终结果⽣成zip -->
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<!--设置需要输出⽂件-->
<fileSets>
<fileSet>
<directory>src/main/resources/</directory>
<outputDirectory>/resources</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<!--依赖包的输出⽬录-->
<outputDirectory>/lib</outputDirectory>
<scope>runtime</scope>
<excludes>
<exclude>${upId}:${project.artifactId}</exclude> </excludes>
</dependencySet>
<dependencySet>
<!--jar包的输出⽬录-->
<outputDirectory>/</outputDirectory>
<includes>
<include>${upId}:${project.artifactId}</include> </includes>
</dependencySet>
</dependencySets>
</assembly>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论