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