当前位置:

首页 > 编程开发 > 怎么将java或javaweb项目打包为jar包或war包

怎么将java或javaweb项目打包为jar包或war包

一、为什么打包关于此问题,网上众说纷纭。结合个人理解以及网上说法,打成jar包是为了方便别人使用。如果是运行java程序,就不需要在寻找包含main方法的类去执行;如果是使用第三方jar包,直接在自己项目中导入jar包,而不是复制一堆类文件。打成war包是真实生产环境选择的web应用部署方式,网上说这样不会像直接复制文件夹那样可能造成文件丢失,而且服务器会对应用做优化,如删除空文件夹等。以上仅供了解。二、如何打包本机环境windows10,jdk1.8打成jar或war包使用的是相同的工具jdk/bin/

本文目录

      一、为什么打包

      关于此问题,网上众说纷纭。结合个人理解以及网上说法,打成jar包是为了方便别人使用。 如果是运行java程序,就不需要在寻找包含main方法的类去执行;如果是使用第三方jar包,直接在自己项目中导入jar包,而不是复制一堆类文件。打成war包是真实生产环境选择的web应用部署方式,网上说这样不会像直接复制文件夹那样可能造成文件丢失,而且服务器会对应用做优化,如删除空文件夹等。以上仅供了解。

      二、如何打包

      本机环境windows 10, jdk 1.8

      打成jar或war包使用的是相同的工具 jdk/bin/jar.exe

      1、打成jar包

      |-----------------可以略过,仅为了方便理解打包需要注意的事项------------------|

      项目简介

      数据库表结构及其建表语句

      怎么将java或javaweb项目打包为jar包或war包

      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);

      项目结构

      怎么将java或javaweb项目打包为jar包或war包

      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找到项目编译输出的路径

      怎么将java或javaweb项目打包为jar包或war包

      怎么将java或javaweb项目打包为jar包或war包

      (2) 在该目录下运行命令 jar -cvf helloworld.jar .

      -c (create,创建)表时要创建文件
      -v (verbose,冗长的,详细的) 在控制台打印压缩详情
      -f (filename)指定压缩文件名
      helloworld.jar 文件名可以自定义
      . 表示helloworld目录下的所有文件,这里一定要写“.”,其他可能出错。(补充,*星号也可以)

      怎么将java或javaweb项目打包为jar包或war包

      至此打包成功,但不能运行。想要可以运行还要修改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 运行程序。

      怎么将java或javaweb项目打包为jar包或war包

      怎么将java或javaweb项目打包为jar包或war包

      如果jar包仅是为了供其他开发者使用,不需要运行,则进行到第(2)步即可。

      1. 2、使用IDEA进行打包

      怎么将java或javaweb项目打包为jar包或war包

      怎么将java或javaweb项目打包为jar包或war包

      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属性直接配置相对路径。

      怎么将java或javaweb项目打包为jar包或war包

      Output Directory: 打包后的输出路径。

      运行测试:

      首先进入jar包输入路径C:\Users\gzn\Desktop\helloworld\out\artifacts\HelloWorld_jar;
      运行 java -jar helloworld.jar;

      怎么将java或javaweb项目打包为jar包或war包

      2、打成war包

      comment是我的一个已将编译好的web项目,使用cmd进入comment目录下执行命令

      jar -cvf comment.war .

      怎么将java或javaweb项目打包为jar包或war包
      注意在项目目录下执行命令, “.” 表示对项目目录下的所有文件进行打包,将打包好的项目复制到Tomcat/webapps目录下,启动Tomcat服务器,就可以进行测试了。

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Java
      相关文章 更多
      Java单元测试入门:使用JUnit 5编写第一个测试用例
      Java单元测试入门:使用JUnit 5编写第一个测试用例

      面向初学者的JUnit 5实用入门指南。从测试概念、Maven依赖配置,到手把手编写首个单元测试用例及断言验证,助你掌握Java单元测试的核心流程。

      Java变量未初始化报错解析:局部变量与成员变量默认值差异
      Java变量未初始化报错解析:局部变量与成员变量默认值差异

      深入解析Java中局部变量未初始化编译报错与成员变量自动赋予默认值的机制差异,涵盖JVM内存分配、编译期确定性赋值检查与实际排查修复方案。

      Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat
      Java获取当前时间并格式化输出:DateTimeFormatter与SimpleDateFormat

      详细讲解在Java中获取当前系统时间并进行格式化输出的两种核心方案:基于Java 8全新日期时间API的DateTimeFormatter与传统遗留的SimpleDateFormat,包含完整代码示例、线程安全机制对比及生产选型建议。

      Java中final与static final常量的定义及初始化规则
      Java中final与static final常量的定义及初始化规则

      深入解析Java中final变量与static final常量的定义、内存语义、初始化时机及合法赋值路径,涵盖编译期常量优化与实战避坑指南。

      Java抽象方法与接口方法的区别及选型建议
      Java抽象方法与接口方法的区别及选型建议

      深入对比Java中抽象类抽象方法与接口方法的语法演进、设计意图及运行期差异,并提供清晰的架构选型决策流程与实战范例。

      Java实现HTTP请求与JSON解析的完整代码示例
      Java实现HTTP请求与JSON解析的完整代码示例

      本文提供Java标准库HttpClient发起HTTP GET/POST请求并结合Jackson进行JSON数据反序列化与序列化的完整代码示例与工程实践指南。

      Java递归出现StackOverflowError的原因分析及栈空间优化方案
      Java递归出现StackOverflowError的原因分析及栈空间优化方案

      详细分析Java递归调用出现StackOverflowError的原因,结合代码说明线程栈、栈帧和递归深度之间的关系,并介绍终止条件排查、迭代改写、减少栈帧开销以及通过-Xss调整JVM栈空间的方法。

      Java空指针异常(NPE)的代码排查与修复实例
      Java空指针异常(NPE)的代码排查与修复实例

      针对Java中常见的NullPointerException(NPE),本文从堆栈日志定位、典型代码触发场景、具体修复代码对比到防御体系进行系统讲解,提供实用且易上手的排查与修复方案。

      selenium上传文件教程本地文件路径设置方法
      selenium上传文件教程本地文件路径设置方法

      深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
      大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

      针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。