一、为什么打包关于此问题,网上众说纷纭。结合个人理解以及网上说法,打成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', '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);
项目结构
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.0created-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.0created-by: 1.8.0_161 (oracle corporation)class-path: mysql-connector-java-5.1.18.jarmain-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或java web项目如何打包为jar包或war包的详细内容。