如何將java或javaweb項目打包為jar包或war包
一、為什麼打包
關於此問題,網上眾說紛紜。結合個人理解以及網上說法,打成jar包是為瞭方便別人使用。 如果是運行java程序,就不需要在尋找包含main方法的類去執行;如果是使用第三方jar包,直接在自己項目中導入jar包,而不是復制一堆類文件。打成war包是真實生產環境選擇的web應用部署方式,網上說這樣不會像直接復制文件夾那樣可能造成文件丟失,而且服務器會對應用做優化,如刪除空文件夾等。以上僅供瞭解。
二、如何打包
本機環境windows 10, jdk 1.8
打成jar或war包使用的是相同的工具 jdk/bin/jar.exe
1、打成jar包
|—————–可以略過,僅為瞭方便理解打包需要註意的事項——————|
項目簡介
數據庫表結構及其建表語句
CREATE TABLE `customer` ( `cust_id` int(11) NOT NULL AUTO_INCREMENT, `cust_name` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `cust_address` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `cust_city` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `cust_state` char(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `cust_zip` char(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `cust_country` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `cust_contact` char(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `cust_email` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`cust_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 10006 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; INSERT INTO `customer` VALUES (10001, 'Coyote Inc.', '200 Maple Lane', 'Detroit', 'MI', '44444', 'china', 'Y Lee', '[email protected]'); INSERT INTO `customer` VALUES (10002, 'Mouse House', '333 Fromage Lane', 'Columbus', 'OH', '43333', '', 'Jerry Mouse', NULL); INSERT INTO `customer` VALUES (10003, 'Wascals', '1 Sunny Place', 'Muncie', 'IN', '42222', 'USA', 'Jim Jones', '[email protected]'); INSERT INTO `customer` VALUES (10004, 'Yosemite Place', '829 Riverside Drive', 'Phoenix', 'AZ', '88888', 'UK', 'Y Sam', '[email protected]'); INSERT INTO `customer` VALUES (10005, 'gzn or 1=1', '4545 53rd Street', 'Chicago', 'IL', '54545', '', 'E Fudd', NULL);
項目結構
app.java
package com.gzn.demo; import java.sql.*; import java.util.Scanner; /** * @author: gzn * @date: 2019/4/13 10:53 */ public class App { public static void main(String[] args) { int count = Integer.valueOf(args[0]); System.out.println("請輸入要查詢用戶的條數?(0到5之間):"); Scanner sc = new Scanner(System.in); int count = sc.nextInt(); String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/corejava"; String username = "root"; String password = "root"; String sql = "select cust_id, cust_name, cust_address, cust_city from customer limit 0, ? "; try { Class.forName(driver); Connection conn = DriverManager.getConnection(url, username, password); PreparedStatement pstat = conn.prepareStatement(sql); pstat.setInt(1, count); ResultSet rs = pstat.executeQuery(); while(rs.next()) { System.out.println("cust_id:" + rs.getObject("cust_id").toString()); System.out.println("cust_name: " + rs.getObject("cust_name").toString()); System.out.println("cust_address: " + rs.getObject("cust_address").toString()); System.out.println("cust_city:" + rs.getObject("cust_city").toString()); System.out.println("----------------------" +"\n"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } }
|—————————————————————————|
1.1、使用jar手動打包
(1)使用cmd找到項目編譯輸出的路徑
(2) 在該目錄下運行命令 jar -cvf helloworld.jar .
-c (create,創建)表時要創建文件
-v (verbose,冗長的,詳細的) 在控制臺打印壓縮詳情
-f (filename)指定壓縮文件名
helloworld.jar 文件名可以自定義
. 表示helloworld目錄下的所有文件,這裡一定要寫“.”,其他可能出錯。(補充,*星號也可以)
至此打包成功,但不能運行。想要可以運行還要修改helloword.jar中的MANIFEST.MF文件。
(3)使用解壓縮工具打開helloword.jar並編輯META-INF/MANIFEST.MF添加屬性
MANIFEST.MF初始狀態
Manifest-Version: 1.0 Created-By: 1.8.0_161 (Oracle Corporation)
添加屬性:(註意,冒號為英文冒號且冒號後有空格)
Main-Class: 包含main方法的類
Class-Path: 依賴的jar包的路徑,如果依賴多個jar包,使用空格隔開
路徑:相對路徑,jar包相對於helloworld.jar文件的路徑
絕對路徑,jar包在操作系統中的路徑
常用相對路徑,將依賴的jar包和自己的jar包放在同一級目錄下,這樣Class-Path直接寫依賴jar包的名字即可。
添加屬性後狀態:
Manifest-Version: 1.0 Created-By: 1.8.0_161 (Oracle Corporation) Class-Path: mysql-connector-java-5.1.18.jar Main-Class: com.gzn.demo.App
(4)運行測試
將依賴復制到helloworld.jar 同級目錄下,使用 java -jar helloworld.jar 運行程序。
如果jar包僅是為瞭供其他開發者使用,不需要運行,則進行到第(2)步即可。
1. 2、使用IDEA進行打包
Main Class: 包含main方法的類;
extract to the target JAR: 提取目標jar,此選項需要你為依賴的jar配置絕對路徑。
copy to the output directory and link via manifest: 將依賴的jar復制到輸出目錄中,即和你項目打包的jar在同一級目錄。這樣IDEA就可以在MENIFEST.MF為Class-Path屬性直接配置相對路徑。
Output Directory: 打包後的輸出路徑。
運行測試:
首先進入jar包輸入路徑C:\Users\gzn\Desktop\helloworld\out\artifacts\HelloWorld_jar;
運行 java -jar helloworld.jar;
2、打成war包
comment是我的一個已將編譯好的web項目,使用cmd進入comment目錄下執行命令
jar -cvf comment.war .
註意在項目目錄下執行命令, “.” 表示對項目目錄下的所有文件進行打包,將打包好的項目復制到Tomcat/webapps目錄下,啟動Tomcat服務器,就可以進行測試瞭。
到此這篇關於如何將java或javaweb項目打包為jar包或war包的文章就介紹到這瞭,更多相關java打包為jar包或war包內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!