咱們有的時候老是要使用將本身寫的工程編譯成 class 文件,同時打包成 jar,雖然有各類工具能夠幫助咱們,可是畢竟掌握使用 java 原本的命令去作這些更靈活html
好比我要編譯包名爲 com.demo,全稱爲 com.demo.Main 的這個類,同時將生成的文件指定到當前目錄下的 bin 文件夾下,那麼在麼作呢?java
Main.java 內容:編程
1 package com.demo; 2 public class Main{ 3 4 public static void main(String[] argvs){ 5 System.out.println("-------****Hello world!***-------"); 6 } 7 8 }
因爲編譯的類是有包名的,因此必須在工做目錄下建立包名對應的文件夾,將源碼放在對應文件夾下,若是不這麼作會找不到這個類,而後執行 javac 命令服務器
1 mkdir bin #建立輸出目錄 2 javac com/demo/Main.java -d bin #會在 bin 文件夾下生成 com/demo/Main.class 文件
打包 bin 文件夾下全部資源到 jar 包oracle
1 touch bin/property.pro 2 jar -cvfm main.jar mymanifest -C bin .#這裏 mymanifest 對應 m 選項,會將 mymanifset 合併到 jar 中的 META-INF/MANIFEST.MF,也就是跟新清單配置文件了,-C 後面指定要打包的目錄 (編譯的時候沒有這麼方便) 注意目錄後面的 . 表明全部文件 3 #最終會在當前工做目錄下生成一個 main.jar 包文件,裏面包括 bin 下的全部文件
更新 jar 包內容編程語言
1 mkdir res 2 touch res/map.property 3 jar -uvf main.jar res/map.property #此時若是解壓 jar 包,會發現生成了 res 目錄,同時目錄下有 map.property 文件,固然若是文件以前已經存在, 那麼這個文件會被更新 4 #jar -uvfm main.jar manifest 若是要跟新清單文件要用 m 選項
jar -xvf main.jar #會在當前目錄下解壓 main.jar 包,注意不能指定解壓路徑
1 java -jar main.jar #java -classpath main.jar com.demo.Main 2 #輸出 3 -------****Hello world!***-------
1 javac 2 3 用法: javac <options> <source files> 4 其中, 可能的選項包括: 5 -g 生成全部調試信息 6 -g:none 不生成任何調試信息 7 -g:{lines,vars,source} 只生成某些調試信息 8 -nowarn 不生成任何警告 9 -verbose 輸出有關編譯器正在執行的操做的消息 10 -deprecation 輸出使用已過期的 API 的源位置 11 -classpath <路徑> 指定查找用戶類文件和註釋處理程序的位置 12 -cp <路徑> 指定查找用戶類文件和註釋處理程序的位置 13 -sourcepath <路徑> 指定查找輸入源文件的位置 14 -bootclasspath <路徑> 覆蓋引導類文件的位置 15 -extdirs <目錄> 覆蓋所安裝擴展的位置 16 -endorseddirs <目錄> 覆蓋簽名的標準路徑的位置 17 -proc:{none,only} 控制是否執行註釋處理和/或編譯。 18 -processor <class1>[,<class2>,<class3>...] 要運行的註釋處理程序的名稱; 繞過默認的搜索進程 19 -processorpath <路徑> 指定查找註釋處理程序的位置 20 -parameters 生成元數據以用於方法參數的反射 21 -d <目錄> 指定放置生成的類文件的位置 22 -s <目錄> 指定放置生成的源文件的位置 23 -h <目錄> 指定放置生成的本機標頭文件的位置 24 -implicit:{none,class} 指定是否爲隱式引用文件生成類文件 25 -encoding <編碼> 指定源文件使用的字符編碼 26 -source <發行版> 提供與指定發行版的源兼容性 27 -target <發行版> 生成特定 VM 版本的類文件 28 -profile <配置文件> 請確保使用的 API 在指定的配置文件中可用 29 -version 版本信息 30 -help 輸出標準選項的提要 31 -A關鍵字[=值] 傳遞給註釋處理程序的選項 32 -X 輸出非標準選項的提要 33 -J<標記> 直接將 <標記> 傳遞給運行時系統 34 -Werror 出現警告時終止編譯 35 @<文件名> 從文件讀取選項和文件名
1 jar 2 3 用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ... 4 選項: 5 -c 建立新檔案 6 -t 列出檔案目錄 7 -x 從檔案中提取指定的 (或全部) 文件 8 -u 更新現有檔案 9 -v 在標準輸出中生成詳細輸出 10 -f 指定檔案文件名 11 -m 包含指定清單文件中的清單信息 12 -n 建立新檔案後執行 Pack200 規範化 13 -e 爲捆綁到可執行 jar 文件的獨立應用程序 14 指定應用程序入口點 15 -0 僅存儲; 不使用任何 ZIP 壓縮 16 -P 保留文件名中的前導 '/' (絕對路徑) 和 ".." (父目錄) 組件 17 -M 不建立條目的清單文件 18 -i 爲指定的 jar 文件生成索引信息 19 -C 更改成指定的目錄幷包含如下文件 20 若是任何文件爲目錄, 則對其進行遞歸處理。 21 清單文件名, 檔案文件名和入口點名稱的指定順序 22 與 'm', 'f' 和 'e' 標記的指定順序相同。 23 24 示例 1: 將兩個類文件歸檔到一個名爲 classes.jar 的檔案中: 25 jar cvf classes.jar Foo.class Bar.class 26 示例 2: 使用現有的清單文件 'mymanifest' 並 27 將 foo/ 目錄中的全部文件歸檔到 'classes.jar' 中: 28 jar cvfm classes.jar mymanifest -C foo/ .
1 java 2 3 用法: java [-options] class [args...] 4 (執行類) 5 或 java [-options] -jar jarfile [args...] 6 (執行 jar 文件) 7 其中選項包括: 8 -d32 使用 32 位數據模型 (若是可用) 9 -d64 使用 64 位數據模型 (若是可用) 10 -server 選擇 "server" VM 11 默認 VM 是 server, 12 由於您是在服務器類計算機上運行。 13 14 15 -cp <目錄和 zip/jar 文件的類搜索路徑> 16 -classpath <目錄和 zip/jar 文件的類搜索路徑> 17 用 : 分隔的目錄, JAR 檔案 18 和 ZIP 檔案列表, 用於搜索類文件。 19 -D<名稱>=<值> 20 設置系統屬性 21 -verbose:[class|gc|jni] 22 啓用詳細輸出 23 -version 輸出產品版本並退出 24 -version:<值> 25 警告: 此功能已過期, 將在 26 將來發行版中刪除。 27 須要指定的版本才能運行 28 -showversion 輸出產品版本並繼續 29 -jre-restrict-search | -no-jre-restrict-search 30 警告: 此功能已過期, 將在 31 將來發行版中刪除。 32 在版本搜索中包括/排除用戶專用 JRE 33 -? -help 輸出此幫助消息 34 -X 輸出非標準選項的幫助 35 -ea[:<packagename>...|:<classname>] 36 -enableassertions[:<packagename>...|:<classname>] 37 按指定的粒度啓用斷言 38 -da[:<packagename>...|:<classname>] 39 -disableassertions[:<packagename>...|:<classname>] 40 禁用具備指定粒度的斷言 41 -esa | -enablesystemassertions 42 啓用系統斷言 43 -dsa | -disablesystemassertions 44 禁用系統斷言 45 -agentlib:<libname>[=<選項>] 46 加載本機代理庫 <libname>, 例如 -agentlib:hprof 47 另請參閱 -agentlib:jdwp=help 和 -agentlib:hprof=help 48 -agentpath:<pathname>[=<選項>] 49 按完整路徑名加載本機代理庫 50 -javaagent:<jarpath>[=<選項>] 51 加載 Java 編程語言代理, 請參閱 java.lang.instrument 52 -splash:<imagepath> 53 使用指定的圖像顯示啓動屏幕 54 有關詳細信息, 請參閱 http://www.oracle.com/technetwork/java/javase/documentation/index.html。