Rumah >Java >javaTutorial >Bagaimana untuk membungkus projek Java atau Java Web ke dalam pakej JAR atau pakej WAR
Terdapat pendapat yang berbeza tentang isu ini di Internet. Berdasarkan pemahaman peribadi dan pendapat dalam talian, ia dibungkus sebagai pakej balang untuk kemudahan orang lain. Jika anda menjalankan program java, anda tidak perlu mencari kelas yang mengandungi kaedah utama untuk dilaksanakan jika anda menggunakan pakej balang pihak ketiga, import pakej balang terus ke dalam projek anda sendiri dan bukannya menyalin sekumpulan balang; fail kelas. Membina pakej perang ialah kaedah penggunaan aplikasi web yang dipilih dalam persekitaran pengeluaran sebenar Dikatakan dalam talian bahawa kaedah ini tidak akan menyebabkan kehilangan fail seperti terus menyalin folder, dan pelayan akan mengoptimumkan aplikasi, seperti memadam folder kosong, dsb. Perkara di atas adalah untuk makluman sahaja.
Persekitaran setempat ialah windows 10, jdk 1.8
Alat yang sama jdk/ digunakan untuk membungkus balang atau perang pakej. bin/jar.exe
Pengenalan Projek
Struktur jadual pangkalan data dan jadualnya penyataan penciptaan
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', 'ylee@coyote.com'); 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', 'rabbit@wascally.com'); INSERT INTO `customer` VALUES (10004, 'Yosemite Place', '829 Riverside Drive', 'Phoenix', 'AZ', '88888', 'UK', 'Y Sam', 'sam@yosemite.com'); INSERT INTO `customer` VALUES (10005, 'gzn or 1=1', '4545 53rd Street', 'Chicago', 'IL', '54545', '', 'E Fudd', NULL);Struktur Projek
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. Gunakan balang untuk membungkus secara manual
(2) Untuk mencipta fail semasa menjalankan arahan
jar -cvf helloworld.jar .
- c (buat, cipta) jadual dalam direktori ini
-f (nama fail) menentukan nama fail termampat
helloworld.jar Nama fail boleh disesuaikan
Menunjukkan helloworld Untuk semua fail dalam direktori, "." (Tambahan,
* asterisk juga boleh diterima)
Setakat ini, pembungkusan berjaya, tetapi ia tidak boleh dijalankan. Jika anda mahu ia berfungsi, anda perlu mengubah suai fail
MANIFEST.MFdalam helloword.jar. (3) Gunakan alat penyahmampatan untuk membuka helloword.jar dan edit META-INF/MANIFEST.MF untuk menambah atribut
MANIFEST.MF keadaan awal
Manifest-Version: 1.0 Created-By: 1.8.0_161 (Oracle Corporation)
Tambah atribut : (
Perhatikan bahawa kolon ialah kolon Inggeris dan terdapat ruang selepas kolon)
Kelas Utama: Kelas yang mengandungi kaedah utama Laluan Kelas:
Laluan pakej balang bergantung Jika anda bergantung pada berbilang pakej balang, gunakan ruang untuk memisahkannya Laluan: laluan relatif, laluan pakej balang berbanding helloworld. fail jar Laluan mutlak, pakej balang berada dalam sistem pengendalian Laluan
biasanya digunakan sebagai laluan relatif Letakkan pakej balang bergantung dan pakej balang anda sendiri dalam direktori yang sama, supaya Laluan Kelas boleh terus menulis nama pakej balang bergantung.
Status selepas menambah atribut:
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) Jalankan ujian
Salin kebergantungan ke direktori yang sama seperti helloworld.jar dan gunakan java -jar helloworld.jar untuk menjalankan program .Jika pakej balang hanya untuk digunakan oleh pembangun lain dan tidak perlu dijalankan, teruskan ke langkah (2) .
1. 2. Gunakan IDEA untuk pembungkusan
Kelas Utama: Mengandungi yang utama kaedah Kelas; ekstrak ke JAR sasaran
: Ekstrak balang sasaran Pilihan ini memerlukan anda mengkonfigurasi laluan mutlak untuk balang bergantung. salin ke direktori output dan pautan melalui manifes
: Salin balang bergantung ke direktori output, yang merupakan direktori tahap yang sama dengan balang yang dibungkus oleh projek anda. Dengan cara ini, IDEA boleh mengkonfigurasi terus laluan relatif untuk atribut Class-Path dalam MENIFEST.MF.
Direktori Output: Laluan keluaran berpakej.
Jalankan ujian:
首先进入jar包输入路径C:\Users\gzn\Desktop\helloworld\out\artifacts\HelloWorld_jar;
运行 java -jar helloworld.jar;
comment是我的一个已将编译好的web项目,使用cmd进入comment目录下执行命令
jar -cvf comment.war .
注意在项目目录下执行命令, “.” 表示对项目目录下的所有文件进行打包,将打包好的项目复制到Tomcat/webapps目录下,启动Tomcat服务器,就可以进行测试了。
Atas ialah kandungan terperinci Bagaimana untuk membungkus projek Java atau Java Web ke dalam pakej JAR atau pakej WAR. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!