天天看點

java -cp 指令參數簡述

說明一

java -cp .;c:\dir1\lib.jar Test

-cp 和 -classpath 一樣,是指定類運作所依賴其他類的路徑,通常是類庫,jar包之類,需要全路徑到jar包,window上分号“;”

分隔,linux上是分号“:”分隔。不支援通配符,需要列出所有jar包,用一點“.”代表目前路徑。

雖然現在都有eclipse之類的IDE了,但有時候後會手工編譯和運作一些程式,很多人包括多年開發經驗的人都不知道怎麼在指令行參

數運作類。有點杯具……

使用範例:

java -cp …\lib\hsqldb.jar org.hsqldb.Server -database mydb

java -cp …/lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 mydb

1 Java代碼

2 java -jar minusyhd.jar

3 Manifest-Version: 1.0

4 Main-Class: minusyhd.MinusYHD

5 Class-Path: jconn4.jar

-cp 參數後面是類路徑,是指定給解釋器到哪裡找到你的.class檔案,

寫法:

java -cp .;myClass.jar packname.mainclassname  
           

classpath中的jar檔案能使用通配符,如果是多個jar檔案,要一個一個地羅列出來,從某種意義上說jar檔案也就是路徑。

要指定各個JAR檔案具體的存放路徑,相同路徑有多個可使用通配符

java -cp .;c:\classes\myClass.jar;d:\classes\*.jar packname.mainclassname 
           

bat檔案寫法:

Java代碼

java -cp MinusYHD.jar minusyhd.MinusYHD > minusyhed.log

exit

”> minusyhed.log“ 指定System.out輸出檔案名

說明二

cp參數就是classpath

java -cp ".;dir/;dir/a.jar;dir/b.jar" Main
           

從java1.6開始,cp參數支援通配符比對jar檔案。需要注意兩點:

用引号"

用*,而不是*.jar

Windows:

java -cp “Test.jar;lib/*” my.package.MainClass

Linux:

java -cp “Test.jar:lib/*” my.package.MainClass

若不支援通配符,bash shell支援用以下方式:

java -cp $(echo lib/*.jar | tr ’ ’ ‘:’)

其中先執行KaTeX parse error: Double superscript at position 31: …b/*.jar | tr ' '̲ ':',然後把(echo lib/*.jar | tr ’ ’ ‘:’)部分替換為指令傳回的字元串,再執行替換後的java指令。

tr ’ ’ ':'會把空格替換為:

注意:

-cp "foo/"隻表示foo目錄下的jar,不包括foo下的class,若要包括則用-cp "foo;foo/"或-cp “foo/*;foo”,這裡的順序會決定是先加載jar還是class。

foo/*不會遞歸加載foo下子目錄的jar。

foo/*加載foo目錄下的jar順序不是固定的,是以程式不應該依賴固定的順序。若需要依賴則用枚舉方式而不是通配符方式添加。

manifest.mf中的Class-Path不支援通配符。