亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot?項(xiàng)目瘦身maven/gradle詳解

 更新時(shí)間:2023年01月06日 11:35:18   作者:howeres  
這篇文章主要介紹了SpringBoot項(xiàng)目瘦身(maven/gradle),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

maven thin jar 步驟

spring-boot-maven-plugin
    configuration
        layout ZIP
        includes
            include non-exists

maven-dependency-plugin
	excutions
		excution
			goal copy-dependencies
			configuration outputDirectory
<build>
	<finalName>thin-jar</finalName>
	<!--java -jar -Dloader.path=./lib thin-jar.jar-->
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
			<version>${spring.boot.version}</version>
			<executions>
				<execution>
					<goals>
						<goal>repackage</goal>
					</goals>
				</execution>
			</executions>
			<configuration>
				<!-- fork=true 新開 Jvm 運(yùn)行插件 -->
				<fork>true</fork>
				<addResources>true</addResources>
				<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
				<layout>ZIP</layout>
				<includes>
					<include>
						<groupId>non-exists</groupId>
						<artifactId>non-exists</artifactId>
					</include>
				</includes>
			</configuration>
		</plugin>

		<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}/lib</outputDirectory>
						<!--是否排除傳遞性-->
						<excludeTransitive>false</excludeTransitive>
						<!--是否去掉jar包版本信息-->
						<stripVersion>false</stripVersion>
						<!--包含范圍-->
						<includeScope>runtime</includeScope>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>
  • <fork>false</fork>

表示 Maven 使用自身的 JVM 虛擬機(jī)運(yùn)行插件, 而 <fork>true</fork> 則告知 Maven 啟動(dòng)一個(gè)新的 JVM 虛擬機(jī)進(jìn)程運(yùn)行插件. 使用 spring-boot-devtools 模塊時(shí)需要特定 JVM 配置來運(yùn)行, 所以需要?jiǎng)?chuàng)建新的 JVM 虛擬機(jī)進(jìn)程來運(yùn)行. 所以通常使用 spring-boot-devtools 熱部署時(shí), 需要在 spring-boot-maven-plugin 插件上會(huì)加上 fork=true

  • <layout>ZIP</layout>

MANIFEST.MF 文件中 Main-Class 是 PropertiesLauncher, 就是 spring-boot-maven-plugin 插件配置 <layout>ZIP</layout> 的結(jié)果

  • layout:
  • JAR,即通常的可執(zhí)行jar
  • Main-Class: org.springframework.boot.loader.JarLauncher
  • WAR,即通常的可執(zhí)行war,需要的servlet容器依賴位于WEB-INF/lib-provided
  • Main-Class: org.springframework.boot.loader.warLauncher
  • ZIP,即DIR,類似于JAR
  • Main-Class: org.springframework.boot.loader.PropertiesLauncher
  • MODULE,將所有的依賴庫(kù)打包(scope為provided的除外),但是不打包Spring Boot的任何Launcher
  • NONE,將所有的依賴庫(kù)打包,但是不打包Spring Boot的任何Launcher
  • 此外 <classifier>suffix</classifier> project-1.1.1-suffix 與 mvn package 所打成的 jar 進(jìn)行區(qū)分
  • mvn package 打包時(shí)使用 maven-jar-plugin 插件執(zhí)行 package 命令, 生成的 jar 不包含依賴, 不可以執(zhí)行但可以作為依賴引用
  • 使用 spring-boot-maven-plugin 插件打包將 mvn package 生成的軟件包重命名為了 *.original

Gradle thin jar

task clearJar(type: Delete) {
    delete "$buildDir/libs/lib"
}
 
// 將依賴包復(fù)制到lib目錄
task copyJar(type: Copy, dependsOn: 'clearJar') {
    into "$buildDir/libs/lib"
    from configurations.runtime

    // from configurations.compileClasspath
}
 
bootJar {
    // mainClassName = ''
    // 例外所有的jar
    excludes = ["*.jar"]
    // lib目錄的清除和復(fù)制任務(wù) 
    dependsOn clearJar
    dependsOn copyJar
 
    // 指定依賴包的路徑, 無需 java.ext.dir 或 loader.path 參數(shù)
    manifest {
        attributes "Manifest-Version": 1.0,
            'Class-Path': configurations.compileClasspath.files.collect { "lib/$it.name" }.join(' ')
    }
}

需要把 dependencies 放到了 bootJar{} 之前

調(diào)用 bootJar 打包

運(yùn)行的時(shí)候也不需要指定 -Djava.ext.dirs=./lib 或 -Dloader.path=./lib 了, 將 lib 目錄放在 jar 包同級(jí)目錄下, 直接 -jar運(yùn)行就可以了

# java -Djava.ext.dirs=./lib -jar bootrun.jar
java -jar bootrun.jar

loader.path

loader.path 是 Spring 提供的配置參數(shù)

可以使用 --classpath / -cp 指定類加載的路徑,但 classpath 的生效是有條件的

# 運(yùn)行 class 生效
java -cp .;lib/x.jar Test
# 運(yùn)行 jar 失效
java -cp lib/x.jar -jar app.jar

使用 java -jar boot.jar 時(shí) (此時(shí) -cp 無效), 可以使用 loader.path 指定類加載路徑加載其他 jar, loader.path 實(shí)現(xiàn)了 classpath 的功能

但 loader.path 生效是有條件的

當(dāng) MANIFEST.MF 的 Main-Class 為:

  • PropertiesLauncher (額外配置) 生效
  • JarLauncher (默認(rèn)配置) 失效 (啟動(dòng)會(huì)快一些)

為了使用 loader.path,需要把 jar 包的 Main-Class 配置為 PropertiesLauncher,在 build.gradle 中如下配置,可參考 Using the PropertiesLauncher

bootJar {
    manifest {
        attributes 'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher'
    }
}

So by adding all the needed classpaths to the loader.path variable, spring will be able to boostrap the application. (details)

到此這篇關(guān)于SpringBoot 項(xiàng)目瘦身(maven/gradle)的文章就介紹到這了,更多相關(guān)SpringBoot 瘦身maven/gradle內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Arrays.sort(arr)是什么排序及代碼邏輯

    Arrays.sort(arr)是什么排序及代碼邏輯

    在學(xué)習(xí)過程中觀察到Arrays.sort(arr)算法可以直接進(jìn)行排序,但不清楚底層的代碼邏輯是什么樣子,今天通過本文給大家介紹下Arrays.sort(arr)是什么排序,感興趣的朋友一起看看吧
    2022-02-02
  • Java數(shù)據(jù)結(jié)構(gòu)之位圖的簡(jiǎn)單實(shí)現(xiàn)和使用

    Java數(shù)據(jù)結(jié)構(gòu)之位圖的簡(jiǎn)單實(shí)現(xiàn)和使用

    位圖,?是一種非常常見的結(jié)構(gòu),?它使用每個(gè)二進(jìn)制位來存放一個(gè)值的狀態(tài),?就類似于?Java?當(dāng)中?HashSet?存儲(chǔ)元素的功能。本文主要來介紹一下位圖的簡(jiǎn)單實(shí)現(xiàn)和使用,需要的可以參考一下
    2023-05-05
  • 探討Java語(yǔ)言中那些修飾符

    探討Java語(yǔ)言中那些修飾符

    在java中常見的修飾符有:abstract(抽象的)、static(靜態(tài)的)、public(公共的)、protected(受保護(hù)的)、private(私有的)、synchronized(同步的)、native(本地的)、transient(暫時(shí)的)、volatile(易失的)、final(不可改變的)。對(duì)java語(yǔ)言修飾符感興趣的朋友一起看看吧
    2016-11-11
  • java網(wǎng)上圖書商城(5)購(gòu)物車模塊2

    java網(wǎng)上圖書商城(5)購(gòu)物車模塊2

    這篇文章主要為大家詳細(xì)介紹了java網(wǎng)上圖書商城,購(gòu)物車模塊第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • IDEA中如何正確快速打jar包的方式

    IDEA中如何正確快速打jar包的方式

    這篇文章主要介紹了IDEA中如何正確快速打jar包,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • springBoo3.0集成knife4j4.1.0的詳細(xì)教程(swagger3)

    springBoo3.0集成knife4j4.1.0的詳細(xì)教程(swagger3)

    這篇文章主要介紹了springBoo3.0集成knife4j4.1.0的詳細(xì)教程(swagger3),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Kafka之kafka-topics.sh的使用解讀

    Kafka之kafka-topics.sh的使用解讀

    這篇文章主要介紹了Kafka之kafka-topics.sh的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java線程中start和run方法全面解析

    Java線程中start和run方法全面解析

    這篇文章主要介紹了Java線程中start和run方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • SpringBoot2.0如何啟用https協(xié)議

    SpringBoot2.0如何啟用https協(xié)議

    這篇文章主要介紹了SpringBoot2.0如何啟用https協(xié)議,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • Java中final作用于變量、參數(shù)、方法及類該如何處理

    Java中final作用于變量、參數(shù)、方法及類該如何處理

    Java中的final關(guān)鍵字非常重要,它可以應(yīng)用于類、方法以及變量,下面這篇文章主要給大家介紹了關(guān)于Java中final作用于變量、參數(shù)、方法及類該如何處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12

最新評(píng)論