spring boot 在打包运行jar的时候,默认会把依赖jar所有打包到一个jar中,这样有一个不方便的地方,就是打包的jar包比较大,每次上传到服务器都要上传很久,这里咱们能够使用assembly插件将依赖jar打包到外部独立文件夹中,之后每次只须要上传不包含依赖jar的包就能够了,这样打出来的jar也能够运行spring
在pom中添加如下插件:apache
<build> <!-- <finalName>fileName</finalName>--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <!-- 项目启动类,这里须要替换成启动类 --> <mainClass>com.bc.Application</mainClass> <!-- 依赖的jar的目录前缀 --> <classpathPrefix>../lib</classpathPrefix> <addClasspath>true</addClasspath> </manifest> </archive> <excludes> <exclude>assembly.xml</exclude> <exclude>application.properties</exclude> <exclude>application.yml</exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>true</appendAssemblyId> <descriptors> <descriptor>src/main/resources/assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
对应的assembly.xml配置文件:服务器
<?xml version="1.0" encoding="UTF-8"?> <assembly> <!-- 可自定义--> <id>assembly-${project.version}</id> <!-- 打包的类型,若是有N个,将会打N个类型的包 --> <formats> <format>zip</format> <!-- <format>tar.gz</format> --> </formats> <includeBaseDirectory>true</includeBaseDirectory> <!-- 将依赖jar打包到lib文件夹中 --> <dependencySets> <dependencySet> <outputDirectory>lib</outputDirectory> <scope>runtime</scope> <excludes> <exclude>${groupId}:${artifactId}</exclude> </excludes> </dependencySet> </dependencySets> <fileSets> <!-- 0755->即用户具备读/写/执行权限,组用户和其它用户具备读写权限; 0644->即用户具备读写权限,组用户和其它用户具备只读权限; --> <!-- 将src/bin目录下的全部文件输出到打包后的bin目录中 --> <fileSet> <directory>${basedir}/bin</directory> <outputDirectory>bin</outputDirectory> <fileMode>0755</fileMode> <includes> <include>**.sh</include> <include>**.bat</include> </includes> </fileSet> <!-- 指定输出target/classes中的配置文件到config目录中 --> <fileSet> <directory>${basedir}/target/classes</directory> <outputDirectory>bin</outputDirectory> <fileMode>0644</fileMode> <includes> <include>application.properties</include> <include>application.yml</include> </includes> </fileSet> <!-- 将第三方依赖打包到lib目录中 --> <fileSet> <directory>${basedir}/target/lib</directory> <outputDirectory>lib</outputDirectory> <fileMode>0755</fileMode> </fileSet> <!-- 将项目启动jar打包到bin目录中 --> <fileSet> <directory>${basedir}/target</directory> <outputDirectory>bin</outputDirectory> <fileMode>0755</fileMode> <includes> <include>${project.build.finalName}.jar</include> </includes> </fileSet> <!-- 包含根目录下的文件 --> <fileSet> <directory>${basedir}</directory> <includes> <include>NOTICE</include> <include>LICENSE</include> <include>*.md</include> </includes> </fileSet> </fileSets> </assembly>
执行mvn package就能够生成压缩文件,运行的jar在bin目录下,解压出来能够直接运行app
还一种将依赖jar复制到外部目录的方式,使用maven-dependency-plugin插件maven
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <excludeTransitive>false</excludeTransitive> <stripVersion>false</stripVersion> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin>
将assembly.xml文件中的dependencySets节点注释掉,这样也能够复制依赖jar到lib文件夹中ui