一、为什么打包

关于此问题,网上众说纷纭。结合个人理解以及网上说法,打成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.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包相关推荐

  1. java maven 打包jar_maven项目如何打jar包?eclipse将maven项目打包成jar包方法

    下面的内容是要给大家介绍eclipse将maven项目打包成jar包的方法,一起来看看整个过程是怎样的吧,希望对你的编程之路可以有所帮助哦. 利用eclipse把项目打包成jar,放入服务器执行. 1 ...

  2. 在IDEA中将SpringBoot项目打包成jar包的方法 不要用 在上面有可以用的

    在IDEA中将SpringBoot项目打包成jar包的方法 2018年03月07日 10:43:52 叶叶叶叶大爷 阅读数 71375 版权声明: https://blog.csdn.net/qq_3 ...

  3. Intellij IDEA--将Java项目打包为jar包--方法/实例

    原文网址:Intellij IDEA--将Java项目打包为jar包--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Idea打包普通Java项目的方法. 本文使用Idea将普通Java ...

  4. IDEA MAVEN项目打包成jar包的两种简单方式

    IDEA MAVEN项目打包成jar包的两种简单方式 准备了两个打包方法 1.IEDA自带打包方法 2.用Maven插件maven-shade-plugin打包 IDEA自带打包 适用于任何打包,稍微 ...

  5. Maven项目打包为jar的几种方式

    Maven项目打包为jar的几种方式 这里收集整理下以往打包MAVEN项目为JAR包的各种方式 ##直接打包,不打包依赖包 直接打包,不打包依赖包,仅打包出项目中的代码到JAR包中.在POM中添加如下 ...

  6. springboot项目打成jar包和war包,并部署(快速打包部署)

    War和Jar的区别: 通过jar运行实际上是启动了内置的tomcat,所以用的是应用的配置文件中的端口 通过war直接部署到tomcat之后,内置的tomcat就不会启用,所以相关配置就以安装的to ...

  7. 将Spring Boot项目打包成jar包war包

    任务一:将Spring Boot项目打包成jar包 1.在pom.xml文件中添加依赖 2.通过cmd命令行来进行打包jar包(首先进入项目的目录中) 3.进入项目中的target目录下查看包 4.使 ...

  8. linux上jar包无法识别本地文件格式,解决使用maven将项目打包成jar包后运行在linux系统中无法读取jar包中文件的问题...

    哈哈,之前计划的每周至少更新一个博客的计划又因为各种原因都泡汤了.看来坚持真得是一件挺让人头疼的问题,无论如何,从这周开始接下来每周一定要至少更新一个技术博客,欢迎大家监督! 好,言归正传.之前前几周 ...

  9. AndroidStudio项目打包成jar

    前言:在eclipse中我们知道如何将一个项目导出为jar包,现在普遍AndroidStuido开发,这里一步一步详加介绍AS项目打包成jar,jar和arr的使用 一.作用: 为了供其它项目使用,将 ...

  10. eclipse中将项目打包成jar的两种方法,及其问题与解决方法

    eclipse中将项目打包成jar的两种方法,及其问题与解决方法 参考文章: (1)eclipse中将项目打包成jar的两种方法,及其问题与解决方法 (2)https://www.cnblogs.co ...

最新文章

  1. 深入浅出VC++串口编程--短信应用开发
  2. 高达大战分晓!日本机器人先赢后输,遭电锯切割惨惨惨 | 附高清完整视频
  3. macOS Big Sur 11.5 (20G71) 虚拟机 ISO 镜像
  4. 免费顺丰快递单号查询电子面单api接口对接【快递鸟API】
  5. 四年的自学,通过这些学习工具拿到了大厂offer,分享给大家
  6. 基于MATLAB/Simulink的电力电子电路仿真技术——直流降压(Buck)变换器及Powergui的使用
  7. Lammps计算纳米压痕—包含全部In文件
  8. 操作系统和内核有什么区别?
  9. 2022牛客寒假训练营1-K冒险公社
  10. [落选]狗熊会人才计划第6期选拔作业
  11. 计算机电脑怎么开热点,笔记本电脑怎么开热点_教你笔记本电脑开热点的方法...
  12. 商务周刊:别了,摩托罗拉
  13. 信息系统开发方法以及其应用-系统分析师论文-2022年上半年必考知识点
  14. ChatGPT 免费体验来了
  15. TikTok全球下载突破超20亿人次,它做对了什么?
  16. 移动硬盘接口坏了怎么办解决教程
  17. 软件工程的10个知识领域
  18. 某企业发放的奖金根据利润进行提成,利润低于或等于10万元时,奖金为利润的10%;利润高于10万元低于20万元时,低于10万元部分,奖金按利润的10%提成。。。。。。
  19. 1044:判断是否为两位数
  20. python猜拳if判断语句_python使用if语句实现一个猜拳游戏详解

热门文章

  1. 一维卷积神经网络原理,卷积神经网络原理简述
  2. python 会议室预约系统解决方案_会议预约管理系统解决方案
  3. 【Python成长之路】卡萨帝冰箱能买吗?让数据来说话!
  4. .NET/C#大型项目研发必备(12)--使用MQ消息队列
  5. 使用单片机设计的智能温控风扇论文资料
  6. 三、Serializer序列化器
  7. bitvise ssh client 连接linux,推荐SSH客户端Bitvise SSH Client
  8. iot_programe Makefile hacking
  9. PaddlePaddle入门实践——手写数字识别
  10. 电容式触摸按键原理调研总结