標籤:搜尋 ict 標記 sea isp 獨立 targe class 包括
背景
我們有的時候總是要使用將自己寫的工程編譯成 class 檔案,同時打包成 jar,雖然有各種工具可以協助我們,但是畢竟掌握使用 java 本來的命令去做這些更靈活
編譯
比如我要編譯包名為 com.demo,全稱為 com.demo.Main 的這個類,同時將產生的檔案指定到目前的目錄下的 bin 檔案夾下,那麼在麼做呢?
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 包
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 res2 touch res/map.property3 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 @<檔案名稱> 從檔案讀取選項和檔案名稱
javac
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/ .
jar
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" VM11 預設 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-search30 警告: 此功能已淘汰, 將在31 未來發行版中刪除。32 在版本搜尋中包括/排除使用者專用 JRE33 -? -help 輸出此協助訊息34 -X 輸出非標準選項的協助35 -ea[:<packagename>...|:<classname>]36 -enableassertions[:<packagename>...|:<classname>]37 按指定的粒度啟用斷言38 -da[:<packagename>...|:<classname>]39 -disableassertions[:<packagename>...|:<classname>]40 禁用具有指定粒度的斷言41 -esa | -enablesystemassertions42 啟用系統斷言43 -dsa | -disablesystemassertions44 禁用系統斷言45 -agentlib:<libname>[=<選項>]46 載入本機代理庫 <libname>, 例如 -agentlib:hprof47 另請參閱 -agentlib:jdwp=help 和 -agentlib:hprof=help48 -agentpath:<pathname>[=<選項>]49 按完整路徑名載入本機代理庫50 -javaagent:<jarpath>[=<選項>]51 載入 Java 程式設計語言代理, 請參閱 java.lang.instrument52 -splash:<imagepath>53 使用指定的映像顯示啟動螢幕54 有關詳細資料, 請參閱 http://www.oracle.com/technetwork/java/javase/documentation/index.html。
java
Java 編譯打包命令