Java中基本的打包jar和war文件(包括eclipse打包操作)


前言:

為什么要打jar包?

1、舉個例子,當編寫一個工具類庫,里面有十幾個類,每個類對應一個class文件時,為了方便別人調用,是不是要裝在一個文件中,方便傳遞和引用。

2、打jar包還有一個好處,就是不包含源文件,對於一些機密信息的庫,jar包和代碼混濁是一個首選。

3、方便部署和引用。

打包jar有兩類,包含main入口和不包含main入口的(大概的意思是比如一些jar是直接類庫引用的,不需要執行,這些就不用包含main入口),這里一般都是包含main入口的進行測試。包含main入口也叫做可執行jar文件。

在打包可執行jar文件時,通常會有一個指定Main-Class入口的文件MANIFEST.MF,一般這個文件是放置在META-INF目錄。詳細的配置參考:http://www.cnblogs.com/EasonJim/p/6485677.html

war是針對web項目的,同時war包也是為了方便部署。

經過測試,在web項目上也能到處jar包,如果指定了Main-Class入口,也是能正常輸出的。

JAR和WAR包的本質區別應該在於目錄的結構,其打包的命令都是jar去完成的;結構參考:http://www.cnblogs.com/EasonJim/p/6498804.html

一、命令行:

1、JAR:

jar命令行的說明:jar -h

用法: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
選項:
    -c  創建新檔案
    -t  列出檔案目錄
    -x  從檔案中提取指定的 (或所有) 文件
    -u  更新現有檔案
    -v  在標准輸出中生成詳細輸出
    -f  指定檔案文件名
    -m  包含指定清單文件中的清單信息
    -n  創建新檔案后執行 Pack200 規范化
    -e  為綁定到可執行 jar 文件的獨立應用程序
        指定應用程序入口點
    -0  僅存儲; 不使用任何 ZIP 壓縮
    -M  不創建條目的清單文件
    -i  為指定的 jar 文件生成索引信息
    -C  更改為指定的目錄並包含以下文件
如果任何文件為目錄, 則對其進行遞歸處理。
清單文件名, 檔案文件名和入口點名稱的指定順序
與 'm', 'f' 和 'e' 標記的指定順序相同。

示例 1: 將兩個類文件歸檔到一個名為 classes.jar 的檔案中:
       jar cvf classes.jar Foo.class Bar.class
示例 2: 使用現有的清單文件 'mymanifest' 並
           將 foo/ 目錄中的所有文件歸檔到 'classes.jar' 中:
       jar cvfm classes.jar mymanifest -C foo/ .

注意:jar打包也叫壓縮,就唯一一個方法。

假設我已經建立好代碼文件,命名為MyProgram.java,內容如下:

package jartest;

public class MyProgram {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("hello world");
    }

}

注意:上面包含了包名jartest。

接下來要做的就是使用javac進行編譯出字節碼class文件。命令如下:

javac jartest/MyProgram.java

測試編譯出的字節碼在運行上會有所不同,你不能進入到jartest文件夾來運行,只能在外部這樣執行:

java jartest.MyProgram

然后在最外層目錄上新建MANIFEST.MF文件,內容如下:

Manifest-Version: 1.0
Main-Class: jartest.MyProgram

注意:上面的內容上要留多一行空的,不然無法識別。

接下來就是測試命令行:

參考:http://www.jb51.net/article/43033.htm

這里假設我的文件放在這個目錄:D:\開發工程\GitHub\5_java_example\packagetest\commandlinetest\jar\,那么命令行需要進入到這個目錄下。

①打包

jar cf JAR文件名稱 程序文件名稱或者程序所在的文件夾(可以使用通配符查找文件)

舉例:

jar cf MyApp.jar jartest\MyProgram.class

②查看一個jar文件的內容

jar tvf JAR文件名稱

舉例:

jar tvf MyApp.jar

③將一個jar文件解壓縮

jar xf JAR文件名稱

舉例:

jar xf MyApp.jar

④往壓縮包里面增加文件

jar xf JAR文件名稱 添加的文件或者其他的jar文件

舉例:

jar xf MyApp.jar jartest\MyProgram_new.class.class

⑤更新一個jar文件

jar uf JAR文件名稱 更新的文件或者其他的jar文件

舉例:

jar uf MyApp.jar jartest\MyProgram_new.class.class

⑥創建一個可以運行的jar文件

jar cvfm MyApp.jar MANIFEST.MF 文件或文件夾路徑

舉例:

jar cvfm MyApp.jar MANIFEST.MF jartest\MyProgram.class 

⑦運行一個jar程序

java -jar JAR文件名稱

舉例:

java -jar MyApp.jar

 

測試工程:https://github.com/easonjim/5_java_example/tree/master/packagetest/commandlinetest/jar

 

2、WAR:

經過研究,打war包也是通過jar命令進行完成,不同的是后綴變了,所以直接運行上面的打包命令即可。

 

 

 

 

二、GUI工具eclipse:

1、JAR:

eclipse下打jar包相對來說比較簡單,不用關心MANIFEST.MF文件的編寫,只需要把核心放在代碼上即可。

具體操作:

說明:假設已經建立好工程,下面就是直接GUI的操作。

①項目->【右鍵】->【Export】

②選擇【JAR file】

③選擇要導出包的文件和路徑

④Next

⑤選擇Main class:

⑥測試到處的包能不能正常輸出

完全正常。

 

總結:其實eclipse這樣的GUI工具非常方便的到處jar包,並且可以選擇其它的選項,而且免去自己手動配置這些文件的問題。

項目地址:https://github.com/easonjim/5_java_example/tree/master/packagetest/eclipsetest/jar

 

2、WAR:

說明:

war包一般針對web項目,但是經過測試web項目也能到處jar包,並可以指定入口,也就是可以執行。

war包一般是部署到容器中運行,比如tomcat,但是用jetty可以實現內嵌web的方式,然后用java -jar去運行,從而實現可執行的war包方式。這里先不講解這種方式,后面再開專題詳解研究。可以參考:https://www.eclipse.org/jetty/。線索:jetty內嵌war、war內嵌tomcat。

具體操作:

這里假設已經建立好web項目。

①新建web項目(重點在如何新建jsp項目)

新建jsp頁面

 右鍵,【Run as】->【Run On Server】

②到處war包

項目右鍵->【Export】->【WAR file】

 

 

總結:到處war包相對來說比較簡單。

項目地址:https://github.com/easonjim/5_java_example/tree/master/packagetest/eclipsetest/war

 

三:maven

此方法省略,以后會統一詳解maven的構建。


免責聲明!

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



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