常规的springboot打包后,只生成一个jar包,配置文件和所有依赖包都在一起,当有一点点改动,上线时需要把整个包发布上去,有些不太方便。
pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.mei.dubbo</groupId> <artifactId>SpringBootPackageTest</artifactId> <version>0.0.1</version> <name>SpringBootPackageTest</name> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <!-- 去除resources下的所有文件 --> <excludes> <exclude>**/*.properties</exclude> <exclude>**/*.xml</exclude> <exclude>**/*.yml</exclude> <exclude>static/**</exclude> <exclude>templates/**</exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layout>ZIP</layout> <includes> <!-- 打包时,本jar包不包含其他依赖包 , 否则打出的jar包还是很大 --> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptors> <!-- 用于复制文件等配置 --> <descriptor>assembly.xml</descriptor> </descriptors> <finalName>${project.artifactId}</finalName> <appendAssemblyId>false</appendAssemblyId> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
assembly.xml
<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>release</id> <includeBaseDirectory>true</includeBaseDirectory> <formats> <!-- 打出包的后缀, xxxx.tar.gz --> <format>tar.gz</format> <format>dir</format> </formats> <fileSets> <fileSet> <directory>target/classes</directory> <outputDirectory>config</outputDirectory> <includes> <include>*.yml</include> <include>*.xml</include> <include>*.properties</include> </includes> </fileSet> <fileSet> <directory>target/classes</directory> <outputDirectory>resources</outputDirectory> <includes> <include>static/**</include> <include>templates/**</include> </includes> </fileSet> </fileSets> <dependencySets> <dependencySet> <!-- 将项目所有依赖包拷贝到发布包的lib目录下 --> <outputDirectory>lib</outputDirectory> <useProjectArtifact>false</useProjectArtifact> </dependencySet> </dependencySets> </assembly>
项目结构如下:
使用eclipse maven install 打包后,结构如下:
tar.gz 包中没有SpringBootPackageTest-0.0.1.jar包, 解压SpringBootPackageTest-0.0.1.tar.gz后需要手动考进去。
运行: java -Dloader.path=./lib,config -jar SpringBootPackageTest-0.0.1.jar
访问:
暂时简单测试没问题。这种方式只适合不带页面的后台程序运行(如前后端分离的后端程序),有页面的工程暂时没找到解决方法。