當(dāng)前大部分開(kāi)發(fā)者在開(kāi)發(fā)Java程序時(shí)使用Eclipse,它可以方便的進(jìn)行程序的編譯、打包和運(yùn)行。但是不使用IDE,在完全的命令行下進(jìn)行Java開(kāi)發(fā)者從未用過(guò)的。在命令行下進(jìn)行開(kāi)發(fā)不是用來(lái)在展現(xiàn)自己有多牛,而是通過(guò)命令行開(kāi)發(fā),可以對(duì)Java的編譯、jar包等各個(gè)部分有一個(gè)深入了解。
下面的幾篇博客將會(huì)對(duì)Java的編譯、打包和運(yùn)行方法由淺入深的進(jìn)行介紹。
在這里使用的操作系統(tǒng)是Linux,并提供相應(yīng)的shell和python腳本。
首先介紹一下三個(gè)常用的命令:javac、jar、java。每個(gè)命令都有不同的參數(shù),這些參數(shù)的用法會(huì)詳細(xì)介紹。
1. javac javac的功能是對(duì)java源代碼進(jìn)行編譯,將后綴為.java的文件編譯為.class的文件。javac的一般格式是
javac <選項(xiàng)> <源文件>
例如:
javac Main.java
會(huì)產(chǎn)生Main.class文件。
javac的常用選項(xiàng)有:
-classpath <路徑> 指定查找用戶(hù)類(lèi)文件的位置
-cp <路徑> 指定查找用戶(hù)類(lèi)文件的位置(與上面的選項(xiàng)一樣,cp是classpath的簡(jiǎn)寫(xiě))
-d <目錄> 指定存放生成的類(lèi)文件的位置
2.jar jar的功能是根據(jù)選項(xiàng)將指定的一些.class文件打包為一個(gè)jar包。jar的一般格式是
jar {ctxui}[vfm0Me] [jar-文件] [manifest-文件] [-C 目錄](méi) 文件名 ...
例如,
jar cvf Test.jar Main.class Bar.class
它將Main.class和Bar.class打包為一個(gè)文件Test.jar。
jar命令的選項(xiàng)比較多,用到選項(xiàng)包括:
-c 創(chuàng)建新的歸檔文件
-t 列出歸檔目錄
-x 從檔案中提取指定的 (或所有) 文件
-u 更新現(xiàn)有的歸檔文件
-v 在標(biāo)準(zhǔn)輸出中生成詳細(xì)輸出
-f 指定歸檔文件名
-m 包含指定清單文件中的清單信息
-e 為捆綁到可執(zhí)行 jar 文件的獨(dú)立應(yīng)用程序,指定應(yīng)用程序入口點(diǎn)
-C 更改為指定的目錄并包含其中的文件,如果有任何目錄文件, 則對(duì)其進(jìn)行遞歸處理。
例如,
上例中的cvf參數(shù),分別表示創(chuàng)建新的jar文件、創(chuàng)建時(shí)顯示jar包的信息(可以執(zhí)行看一下)、指定jar包名為T(mén)est.jar。
jar tf Test.jar 查看Test.jar的內(nèi)容,其中t表示列出jar包內(nèi)容,f指定jar包名
jar xf Test.jar 解壓Test.jar文件
jar xf Test.jar Main.class 僅解壓Test.jar中的Main.class文件
這里要指出的是,f/m/e都指定一個(gè)名稱(chēng)(jar包名, 清單文件名和入口點(diǎn)名稱(chēng)),相應(yīng)的名稱(chēng)順序與參數(shù)的順序要一致。
3.java java的功能是執(zhí)行應(yīng)用程序。java的一般格式是
執(zhí)行一個(gè)類(lèi): java [ options ] class [ argument ... ]
執(zhí)行一個(gè)jar包:java [ options ] -jar file.jar [ argument ... ]
例如:
java Main
執(zhí)行Main.class,注意上面沒(méi)有.class后綴
java Test.jar
執(zhí)行一個(gè)jar包,這個(gè)jar包中要指定了程序入口點(diǎn)(通過(guò)在MANIFEST.MF文件中指定)。
常用的java的選項(xiàng):
-classpath<類(lèi)搜索路徑> 指定用戶(hù)類(lèi)文件的位置,可能為文件夾、zip、jar文件
總結(jié)
通過(guò)這篇內(nèi)容,我們應(yīng)用學(xué)會(huì)了如何使用javac編譯自己的類(lèi),并使用java執(zhí)行自己的類(lèi)。但是關(guān)于打包的操作及jar的執(zhí)行比較復(fù)雜,將在以后繼續(xù)介紹。