spring boot 使用assembly插件将依赖jar打包到外部独立文件夹中

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

相关文章
相关标签/搜索