欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java?-jar/-cp啟動(dòng)添加外部的依賴(lài)包方式

 更新時(shí)間:2024年01月15日 09:42:39   作者:班班v  
這篇文章主要介紹了java?-jar/-cp啟動(dòng)添加外部的依賴(lài)包方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java -jar/-cp啟動(dòng)添加外部的依賴(lài)包

啟動(dòng)java主要有兩種方式,分別為:java -jar test.jar、java -cp/-classpath test.jar com.main.Test。

然后分別講一下這兩種方式啟動(dòng)程序時(shí),如何加載外部依賴(lài)的包。

為了方便大家理解,首先說(shuō)一下Java的ClassLoader。

ClassLoader的具體作用就是將class文件加載到j(luò)vm虛擬機(jī)中去。

我們都知道在Java中程序是運(yùn)行在虛擬機(jī)中,我們平常用文本編輯器或者是IDE編寫(xiě)的程序都是.java格式的文件,這是最基礎(chǔ)的源碼,但這類(lèi)文件是不能直接運(yùn)行的。

需要將.java的文件編譯成字節(jié)碼.class文件,才能加載到JVM中運(yùn)行,這個(gè)過(guò)程由ClassLoader來(lái)完成,Java自帶的ClassLoader有3大類(lèi),分別為:

Bootstrap ClassLoader 最頂層的加載類(lèi),主要加載核心類(lèi)庫(kù),%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。

另外需要注意的是可以通過(guò)啟動(dòng)jvm時(shí)指定-Xbootclasspath和路徑來(lái)改變Bootstrap ClassLoader的加載目錄。

比如java -Xbootclasspath/a:path被指定的文件追加到默認(rèn)的bootstrap路徑中。

我們可以打開(kāi)我的電腦,在上面的目錄下查看,看看這些jar包是不是存在于這個(gè)目錄。

  • Extention ClassLoader 擴(kuò)展的類(lèi)加載器,加載目錄%JRE_HOME%\lib\ext目錄下的jar包和class文件。還可以加載-D java.ext.dirs選項(xiàng)指定的目錄。
  • Appclass Loader也稱(chēng)為SystemAppClass 加載當(dāng)前應(yīng)用的classpath的所有類(lèi)。

所以,我們要改變這加入外部依賴(lài)的jar包,可以分別考慮改變這3個(gè)ClassLoader來(lái)實(shí)現(xiàn),分別來(lái)講一下這3種實(shí)現(xiàn)方法。

一、Bootstrap ClassLoader通過(guò)改變Xbootclasspath參數(shù)實(shí)現(xiàn)

一般有3種方法:

  • -Xbootclasspath: 完全取代基本核心的Java class 搜索路徑.不常用,否則要重新寫(xiě)所有Java 核心class
  • -Xbootclasspath/a: 后綴在核心class搜索路徑后面(推薦使用)
  • -Xbootclasspath/p: 前綴在核心class搜索路徑前面.不常用,避免引起不必要的沖突.

使用Bootstrap ClassLoader的一般方式為:

 java -Xbootclasspath/a:test1.jar -jar test2.jar					//-jar方式
 java -Xbootclasspath/a:test1.jar -cp test2.jar com.test2.Test2		//-cp方式

二、Extention ClassLoader通過(guò)改變參數(shù)java.ext.dirs實(shí)現(xiàn)

java中系統(tǒng)屬性java.ext.dirs指定的目錄由ExtClassLoader加載器加載,如果您的程序沒(méi)有指定該系統(tǒng)屬性(-Djava.ext.dirs=lib)那么該加載器默認(rèn)加載 $JAVA_HOME/lib/ext目錄下的所有jar文件。

但如果你手動(dòng)指定系統(tǒng)屬性且忘了把$JAVA_HOME/lib/ext路徑給加上,那么ExtClassLoader不會(huì)去加載$JAVA_HOME/lib/ext下面的jar文件,這意味著你將失去一些功能,例如java自帶的加解密算法實(shí)現(xiàn)。

所以我們要既要帶有原來(lái)的lib/ext下的包,也要加入其他依賴(lài),則可以這樣寫(xiě)

java -Djava.ext.dirs=%JAVA_HOME%\jre\lib\ext;lib -jar test2.jar
java -Djava.ext.dirs=%JAVA_HOME%\jre\lib\ext;lib -cp test2.jar com.test2.Test2
#java.ext.dirs需要寫(xiě)成目錄格式

三、Appclass Loader加載的是classpath配置的jar包

java -cp和java -jar命令啟動(dòng)程序的時(shí)候,有一些不同,主要為:

用java -jar啟動(dòng)的時(shí)候,java VM會(huì)屏蔽所有的外部classpath,也就是配置的 -cp/-classpath環(huán)境變量會(huì)失效,而只以本身jar的內(nèi)部class作為類(lèi)的尋找范圍。

這時(shí)候只能通過(guò)改變META-INF/MANIFEST.MF來(lái)設(shè)置classpath,而java -cp方式則可以正常加載內(nèi)部的類(lèi)來(lái)實(shí)現(xiàn)。

所以這兩種方式加載外部類(lèi)的方法分別為:

3.1 java -cp/classpath方式

java -cp test2.jar;test1.jar com.test2.Test2  #Test是main方法,通過(guò)-cp方式加載2個(gè)jar包

3.2 java -cp方式

修改主類(lèi)jar包 META-INF/MANIFEST.MF內(nèi)容種的

Main-Class屬性,例如

Main-Class: /home/test1.jar /home/test3.jar

#多個(gè)jar包用空格隔開(kāi)

我的做法是:

直接修改java.ext.dirs來(lái)加載jar包的屬性來(lái)實(shí)現(xiàn)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring容器中添加bean的5種方式

    Spring容器中添加bean的5種方式

    我們知道平時(shí)在開(kāi)發(fā)中使用Spring的時(shí)候,都是將對(duì)象交由Spring去管理,那么將一個(gè)對(duì)象加入到Spring容器中,有哪些方式呢,感興趣的可以了解一下
    2021-07-07
  • RocketMQ源碼分析之Broker過(guò)期消息清理機(jī)制

    RocketMQ源碼分析之Broker過(guò)期消息清理機(jī)制

    這篇文章主要為大家介紹了RocketMQ源碼分析之Broker過(guò)期消息清理機(jī)制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Kotlin與Java的主客觀對(duì)比分析

    Kotlin與Java的主客觀對(duì)比分析

    這篇文章主要介紹了Kotlin與Java的主客觀對(duì)比分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java通過(guò)PowerMockito和Mokito進(jìn)行單元測(cè)試的實(shí)現(xiàn)

    Java通過(guò)PowerMockito和Mokito進(jìn)行單元測(cè)試的實(shí)現(xiàn)

    PowerMockito和Mockito都是Java語(yǔ)言中的測(cè)試框架,用于進(jìn)行單元測(cè)試和集成測(cè)試,本文就來(lái)詳細(xì)的介紹一下通過(guò)PowerMockito和Mokito進(jìn)行單元測(cè)試,感興趣的可以了解一下
    2023-08-08
  • java實(shí)現(xiàn)mongodb的數(shù)據(jù)庫(kù)連接池

    java實(shí)現(xiàn)mongodb的數(shù)據(jù)庫(kù)連接池

    這篇文章主要介紹了基于java實(shí)現(xiàn)mongodb的數(shù)據(jù)庫(kù)連接池,Java通過(guò)使用mongo-2.7.3.jar包實(shí)現(xiàn)mongodb連接池,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Javafx利用fxml變換場(chǎng)景的實(shí)現(xiàn)示例

    Javafx利用fxml變換場(chǎng)景的實(shí)現(xiàn)示例

    本文主要介紹了Javafx利用fxml變換場(chǎng)景的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • mybatis-plus中更新null值的問(wèn)題解決

    mybatis-plus中更新null值的問(wèn)題解決

    本文主要介紹 mybatis-plus 中常使用的 update 相關(guān)方法的區(qū)別,以及更新 null 的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • springcloud本地調(diào)試feign調(diào)用出現(xiàn)的詭異404問(wèn)題及解決

    springcloud本地調(diào)試feign調(diào)用出現(xiàn)的詭異404問(wèn)題及解決

    這篇文章主要介紹了springcloud本地調(diào)試feign調(diào)用出現(xiàn)的詭異404問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java整數(shù)和字符串相互轉(zhuǎn)化實(shí)例詳解

    Java整數(shù)和字符串相互轉(zhuǎn)化實(shí)例詳解

    這篇文章主要介紹了Java整數(shù)和字符串相互轉(zhuǎn)化實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • SpringAOP中的Advisor詳解

    SpringAOP中的Advisor詳解

    這篇文章主要介紹了SpringAOP中的Advisor詳解,平時(shí)我們項(xiàng)目中涉及到?AOP,基本上就是聲明式配置一下就行了,無(wú)論是基于?XML?的配置還是基于?Java?代碼的配置,都是簡(jiǎn)單配置即可使用,今天就來(lái)看一下聲明式配置的使用,需要的朋友可以參考下
    2023-08-08

最新評(píng)論