Linux下編譯打包Java成Jar併成功執行
1.Linux下編譯Java原始檔:
1.1 編譯命令:
javac [-d] [-o] [-verbose] [-classpath][-sourcepath]
-d: 指定生成的.class檔案存放目錄,一般省略則預設放在java原始檔同一目錄下;
-o: 這個選項告訴javac優化內聯的static,final以及privite成員函式所產生的碼;
-verbose:此選項告知java顯示出有關被編譯的原始檔和任何被呼叫類庫的資訊;
如-verbose:class能看到各種載入的資訊,-verbose:gc 是garbagecollection 的資訊。
-classpath:設定編譯時要用到的類路徑,可以是目錄,jar檔案,zip檔案(裡面都是class檔案);
值得注意的是,此classpath可以簡寫為cp,當用到多個類時各類路徑之間用 : 相隔。
此項也可以省略,省略則預設使用環境變數$CLASSPATH路徑。
classpath中的內容是會覆蓋掉環境變數CLASSPATH裡面的設定。
所以一般classpath的設定都是:當前目錄加環境變數CLASSPATH設定目錄,如
javac -cp .:$CLASSPATH abc.java
-sourcepath:設定要編譯的java檔案路徑,可以是目錄,jar檔案,zip檔案(裡面都是java檔案);
注意,若編譯的是jar包中的主類檔案abc.java時,一般編譯整個包javac edu.test.jar或者包資料夾javac ./edu/test。
一般當有多個java檔案需要編譯時,可以逐一列出,也可以將檔名列在一個檔案中,名稱間用空格或者回車行來進行分隔,然後在命令列中使用該列表名,名字前冠以@字元,如:
javac @usr/test/sourcefile.list 編譯目錄usr/test 下的sourcefile.list中的java檔案
1.2 說明:
1)一般對於只有一個出口主函式main,其他java檔案是以內聯類的形式被主函式呼叫的多個java檔案組成的工程來說,編譯時只需要對出口主函式main所在java檔案編譯即可,工程中的其他java檔案會自動關聯編譯;
2)對於程式中呼叫到了第三方類或者package的情況,則一般先需要在程式檔案中加入import第三方類或者jar包;
如 import edu.test.abc 引用jar包edu.test下的abc.java,為穩妥,一般都引用整個包內檔案import edu.test.*。編譯時需要將jar包路徑或者資料夾根目錄,如edu的路徑加入到classpath中。一般常把jar包或者根資料夾拷貝到當前目錄下,指定classpath為.,編譯器自動會從當前目錄開始尋找。
1.3 例項:
javac -cp .:/home/Test/lib/commons-collections-3.2.2.jar -d . *.java
2.將Java原始檔打成Jar包:
2.1 打包命令:
jar {ctxu}[vfm0M][jar-檔案] [manifest-檔案] [-C 目錄] 檔名
其中 {ctxu} 是 jar命令的子命令,每次 jar 命令只能包含 ctxu 中的一個,它們分別表示:
-c:建立新的 JAR 檔案包;
-t:列出 JAR 檔案包的內容列表;
-x:展開 JAR檔案包的指定檔案或者所有檔案;
-u:更新已存在的 JAR 檔案包(新增檔案到 JAR 檔案包中);
特別注意,在引數的下達中, c/x/t/u僅能存在一個,不可同時存在!因為不可能同時壓縮與解壓縮。
-z:是否同時具有 gzip的屬性?亦即是否需要用 gzip 壓縮;
-j:是否同時具有 bzip2的屬性?亦即是否需要用 bzip2 壓縮;
-v:壓縮的過程中顯示檔案!這個常用,但不建議用在背景執行過程;
-f:指定 JAR檔名,通常這個引數是必須的;
請留意,在 f之後要立即接檔名喔!不要再加引數!
比如:
『 tar -zcvfP tfile sfile』就是錯誤的寫法,
『 tar -zcvPf tfile sfile』才是正確的寫法。
-p:使用原檔案的原來屬性(屬性不會依據使用者而變;
-P :可以使用絕對路徑來壓縮;
-N:比後面接的日期(yyyy/mm/dd)還要新的才會被打包進新建的檔案;
-excludeFILE:在壓縮的過程中,不要將 FILE 打包;
-m:指定需要包含的 MANIFEST清單檔案;
-0:只儲存,不壓縮,這樣產生的 JAR檔案包會比不用該引數產生的體積大,但速度更快;
-M:不產生所有項的清單(MANIFEST〕檔案,此引數會忽略-m 引數;
[jar-檔案]:即需要生成、檢視、更新或者解開的 JAR 檔案包,它是 -f 引數的附屬引數;
[manifest-檔案]:即MANIFEST 清單檔案,它是 -m 引數的附屬引數
[-C 目錄]表示轉到指定目錄下去執行這個 jar 命令的操作,它相當於先使用 cd 命令轉該目錄下再執行不帶 -C 引數的命令,它只能在建立和更新 JAR檔案包的時候可用。
檔名:指定一個檔案/目錄列表,這些檔案/目錄就是要新增到 JAR 檔案包中的檔案/目錄。如果指定了目錄,那麼jar命令打包的時候會自動把該目錄中的所有檔案和子目錄打入包中。
2.2 例項:
jar -cvf IDMatch_V1.jar *.class
3.執行jar包:
3.1 執行命令:
1、java -jar xxxxx.jar
當前ssh視窗被鎖定,可按CTRL + C打斷程式執行,或直接關閉視窗,程式退出。
2、java -jar xxxxx.jar &
當前ssh視窗不被鎖定,但是當視窗關閉時,程式中止執行。
3、nohup Java -jar xxxxxx.jar &
不掛斷執行命令,當賬戶退出或終端關閉時,程式仍然執行。