将java或javaweb项目打包为jar包或war包[通俗易懂]

将java或javaweb项目打包为jar包或war包[通俗易懂]一、为什么打包?         关于此问题,网上众说纷纭。结合个人理解以及网上说法,打成jar包,方便别人使用。如果别人运行java程序,不需要在寻找包含main方法的类去执行;如果别人使用jar包,直接在自己项目中导入jar包,而不是赋值一堆类文件。打成war包是真实生产化境,选择的web应用部署方式,网上说…

大家好,又见面了,我是你们的朋友全栈君。

一、为什么打包

        关于此问题,网上众说纷纭。结合个人理解以及网上说法,打成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服务器,就可以进行测试了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142199.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Windows 10版本business_editions和consumer_editions的区别?「建议收藏」

    Windows 10版本business_editions和consumer_editions的区别?「建议收藏」Windows10版本business_editions和consumer_editions的区别?【答1】二者都内置专业版,不同之处在于:consumer_editions版本包含:Home(家庭版);Education(教育版);Professional(专业版);business_editions版本包含:Education(教育版);Enterprise(企业版);Pro…

    2022年10月28日
  • pycharm的字体设置_香港3开头的固定号码是什么

    pycharm的字体设置_香港3开头的固定号码是什么具体设置路径:File->settings->Editor->FileandCodeTemplates->PythonScript

  • 怎么用vscode运行java_捷达vs9参数配置

    怎么用vscode运行java_捷达vs9参数配置首先,当然是先下载VSCode官方链接:https://code.visualstudio.comVSCode(VisualStudioCode)官网选择匹配自己的操作系统版本就好(Windows,macOS,Linux),敢说自己是「Codeediting.Redefined.」,看得出来VSCode的底气。VSCode三大特点:免费、开源、跨平台下载运行后,会看到如下的Welcome「欢迎」界面。【VSCode】的颜值和【Github】夜间版都属一流

  • 2021了,真的不要再说 Node.js 是一门编程语言了「建议收藏」

    2021了,真的不要再说 Node.js 是一门编程语言了「建议收藏」Node.js全栈基础1.Node.js光速入门1.1Node.js概述Node.js是什么Node.js不是一门编程语言,它是一个执行JavaScript代码的工具。工具是指可以安装在计算机操作系统之上的软件。为什么浏览器和Node.js都可以运行JavaScript因为浏览器和Node.js都内置了JavaScriptV8Engine。它可以将JavaScript代码编译为计算机能够识别的机器码。3.浏览器中运行的JavaScrip

  • anaconda卸载后问题

    anaconda卸载后问题anaconda卸载后问题因platformio问题,我将电脑中的anaconda卸载后,出现重新安装anaconda后,无法使用(无conda命令,无jupyter,spyder等图标的问题);经搜索,通过安装miniconda后,用conda命令安装anaconda解决了问题。但除了了使用anacondaprompt时,出现系统找不到指定路径的提示,比较碍眼,(同cmd亦是)。经查,将注册表中的anaconda字符改为miniconda也能解决问题;如下图…

  • CPU 流水线的前世今生[通俗易懂]

    CPU 流水线的前世今生[通俗易懂]title:CPU流水线的前世今生date:2021-11-2121:56:40author:gatiemetags:-linux-architecture-intelcategories:-技术积累thumbnail:blogexcerpt:CPU流水线的探秘之旅本作品采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可,转载请注明出处,谢谢合作因本人技术水平和知识面有限,内容如有纰漏或者需要修正的地方,欢迎大家指正,鄙.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号