Java 編譯打包命令

背景

咱們有的時候老是要使用將本身寫的工程編譯成 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   @<文件名>                     從文件讀取選項和文件名
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
相關文章
相關標籤/搜索