Java 編譯打包命令


背景

我們有的時候總是要使用將自己寫的工程編譯成 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 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   @<文件名>                     從文件讀取選項和文件名
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" 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。
java

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM