Java(21)classpath和jar包
阿新 • • 發佈:2020-08-29
classpath和jar包
classpath(很少設定,一般預設)
classpath
是JVM
用到的一個環境變數,它用來指示JVM
如何搜尋class
。所以,classpath
就是一組目錄的集合,它設定的搜尋路徑與作業系統相關。
在windows系統中,可能長這樣,分隔符為";"
:
C:\work\project1\bin;C:\shared;"D:\My Documents\project1\bin"
在Linux系統中,可能長這樣,分隔符為":"
:
/usr/shared:/usr/local/bin:/home/liaoxuefeng/bin
強烈不推薦在系統環境變數中設定classpath
,那樣會汙染整個系統環境。在啟動JVM時設定classpath
才是推薦的做法。實際上就是給java
命令傳入-classpath
或-cp
引數:
java -classpath .;C:\work\project1\bin;C:\shared abc.xyz.Hello
或者使用-cp
的簡寫:
java -cp .;C:\work\project1\bin;C:\shared abc.xyz.Hello
.
代表當前目錄。如果JVM在某個路徑下找到了對應的class
檔案,就不再往後繼續搜尋。如果所有路徑下都沒有找到,就報錯。
沒有設定系統環境變數,也沒有傳入-cp
classpath
為.
,即當前目錄:
java abc.xyz.Hello
不要把任何Java核心庫新增到classpath中!JVM根本不依賴classpath載入核心庫!
更好的做法是,不要設定classpath
!預設的當前目錄.
對於絕大多數情況都夠用了
jar包
如果一個專案有很多個.class檔案
,且存放在不同的目錄下,管理起來很不方便,如果能夠將眾多目錄打包成一個檔案,就方便多了,如下圖:
jar包實際上是一個zip格式的壓縮檔案,相當於windows系統裡普通的檔案打包。如果將jar包字尾名改為.zip
,則可在windows裡檢視jar的內容。
jar包 包含一個特殊的/META-INF/MANIFEST.MF
MANIFEST.MF
是純文字,可以指定Main-Class
和其它資訊。JVM會自動讀取這個MANIFEST.MF
檔案,如果存在Main-Class
,我們就不必在命令列指定啟動的類名,而是用更方便的命令,如下:
java -jar hello.jar //沒有指定啟動的類,因為存在Main-Class
在大型專案中,不可能手動編寫MANIFEST.MF
檔案,再手動建立zip包。Java社群提供了大量的開源構建工具,例如Maven,可以非常方便地建立jar包。