1. 程式人生 > >JAVA classpath設定方式啟動詳解java -jar

JAVA classpath設定方式啟動詳解java -jar

方式一:java -jar jar包名

Java 命令列提供瞭如何擴充套件bootStrap 級別class的簡單方法. 
-Xbootclasspath: 完全取代基本核心的Java class 搜尋路徑. 
不常用,否則要重新寫所有Java 核心class 
-Xbootclasspath/a: 字尾在核心class搜尋路徑後面.常用 
-Xbootclasspath/p: 字首在核心class搜尋路徑前面.不常用,避免 
引起不必要的衝突.

當用java -jar yourJarExe.jar來執行一個經過打包的應用程式的時候,你會發現如何設定-classpath引數應用程式都找不到相應的第三方類,報ClassNotFound錯誤。 
實際上這是由於當使用-jar引數執行的時候,java VM會遮蔽所有的外部classpath,而只以本身yourJarExe.jar的內部class作為類的尋找範圍。

語法如下: 
(分隔符與classpath引數類似,unix使用:號,windows使用;號,這裡以unix為例)

java -Xbootclasspath/a:/usrhome/thirdlib.jar: -jar yourJarExe.jar

設定方式: 
1、extend class 擴充套件方案 
Java exten class 存放在{Java_home}\jre\lib\ext目錄下.當呼叫Java時,對擴充套件class路徑的搜尋是自動的.總會搜尋的.這樣,解決的方案就很簡單了,將所有要使用的第三方的jar包都複製到ext 目錄下.

2、User class擴充套件方案 
當使用-jar執行可執行Jar包時,JVM將Jar包所在目錄設定為codebase目錄,所有的class搜尋都在這個目錄下開始.所以如果使用了其他第三方的jar包,一個比較可以接受的可配置方案,就是利用jar包的Manifest擴充套件機制. 
步驟如下: 
1、將需要的第三方的jar包,複製在同可執行jar所在的目錄或某個子目錄下. 比如:jar 包在 /usrhome/yourJarExe.jar 那麼你可以把所有jar包複製到/usrhome目錄下或/usrhome/lib 等類似的子目錄下. 
2、修改Manifest 檔案 
在Manifest.mf檔案里加入如下行 
Class-Path:classes12.jar lib/thirdlib.jar //多個jar包可以使用空格分開 。常用方式。 
3、ClassLoader方案 
設定自己ClassLoader進行載入jar類,否則只能通過以上兩種方法設定classpath。高階方式,一般apache的java專案多是使用此方式定製自己的類載入路徑。