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

相關文章
相關標籤/搜索