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