Java学习之:如何将 java 程序打包成 .jar 文件

2023-10-31

之前上课老师布置了分布式系统的作业,让我们写一个分布式系统,实现客户端和服务端的通信工作,然后让我们吧可执行的代码封装成 客户端.jar 和 服务端.jar 由于两个包中都使用了很多依赖,所以在这篇文章中会详细介绍如何把可执行的程序和相关依赖打到一个包里。

文档结构如下
在这里插入图片描述

开始打包

打开文件结构

  • 通过图中指示的地方打开
  • 或者通过 File -> Project structure
    在这里插入图片描述

选中 Artifacts,点 “+”

在这里插入图片描述

from modules with dependencies

  • 把执行文件和依赖打包到一起
    在这里插入图片描述

选择想打包的 module

  • 因为在本文中是将 Server 和 Client 分别打包,因此我们先选择 Server
    在这里插入图片描述

选择 Server Module 中的 main 函数所在的文件

  • 这里是选择执行文件作为程序的入口。
    在这里插入图片描述

确认即可

在这里插入图片描述

对 Client Module 重复以上操作

在这里插入图片描述
在这里插入图片描述

在左侧的栏中,可以看到我们已经初步完成了 jar 包的构建

在这里插入图片描述

完成上述步骤,src 中会出现 META-INF 这个文件夹

  • 如果你想重复执行打包操作,或者是在打包的过程中报错。就把 META-INF 这个文件夹删掉再来一次。
  • 因为 MEAT-INF 文件夹的存在是构建 jar 包的关键。如果你要重新打包,一定要把这个文件夹删掉再来
  • out 文件夹是最终输出 jar 包的地方,如果你想重来,这个包也删掉。或者不删,重新打包时他也会自动覆盖。
    在这里插入图片描述

将刚才预备好的 jar Artifacts build 成 真正的 jar 文件

在这里插入图片描述

选择 All Artifacts 进行 Build

  • 因为我们之前的 Artifacts 已经准备好了 Client.jarServer.jarArtifacts,因此我们同时把这两个 jar build 出来就行了。
  • 当然你也可以选择一个一个的 build。 方法就是选中下面的 Server.jar 或者 Client.jarbuild
    在这里插入图片描述

完成后,out 包里面会有两个 _jar 文件,里面包含了我们的 .jar 文件

在这里插入图片描述

到此为止,我们就完成了所有的打包步骤。

  • 这两个 .jar 文件可以 单独执行,因为里面包含了所有的依赖文件。

注意

  • 如果报这个错误;果断把 META-INF 删了,然后把所有步骤重新执行一遍
  • 最好也把 out 文件夹全删了,无所谓,不会有问题的。
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java学习之:如何将 java 程序打包成 .jar 文件 的相关文章

  • 将 SQL 数据库附加到 ComboBox.ItemSsource (WPF)

    我想知道如何将 SQL Server 数据库分配给 ComboBox 的 ItemSource 属性 在 WPF 应用程序中 我将数据源分配给项目 但不知道如何分配给属性 此致 你可以这样尝试 你可以像下面这样绑定组合框的项目源属性 Ite
  • Maven项目中的HDF5

    我正在尝试将 hdf hdf5lib H5 导入到 NetBeans 中的 Maven 项目中 它有这个作为导入行 import hdf hdf5lib H5 正如这里所建议的 https support hdfgroup org prod
  • 内部/匿名类的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 匿名类和静态内部类的最佳实践 设计和性能方面 是什么 就我个人而言 我认为静态内部类提供了更好的封装 并且应该提供更好的性能 因为它们无法访问类
  • bean 的 CDI @TransactionAttribute

    我正在尝试CDI在测试应用程序上 我有一个DAO它注入一个托管的容器JTA像这样的持久化上下文 public class TestDAO implements Serializable PersistenceContext private
  • Jboss EAP 7 - 如何从部署中排除隐式模块(javax.jms)?

    我没想到我会来到这里 但经过大量 Google 和 StackOverflow 搜索后 我来到了这里 这就是我的确切问题 https www linkedin com pulse tale two jars marco antonio al
  • 竞争条件和 Clojure Atoms

    clojure atom 的文档指出 Changes to atoms are always free of race conditions 然而 竞争条件不仅是根据更改定义的 而且是在不同线程中并行逻辑操作的上下文中定义的 我想知道 保证
  • 同时触发 Windows 事件 id 4802 和 4803(调用和取消屏幕保护程序)

    事件 id 4803 关闭屏幕保护程序 在事件 id 4802 调用屏幕保护程序 之后立即触发 请注意 屏幕保护程序实际上仍然处于打开状态 直到检测到用户交互 我使用的是 Windows 8 1 在 Windows 7 上 事件 id 48
  • 在休眠搜索中使用现有分析器AnalyzerDiscriminator

    Entity Indexed AnalyzerDefs AnalyzerDef name en tokenizer TokenizerDef factory StandardTokenizerFactory class filters To
  • 错误包括 bouncycastle 提供商

    我需要使用bouncycastle provider我的项目中的库 我已将其包含在 gradle 项目中 apply plugin application sourceCompatibility 1 6 version 1 0 0 main
  • 如何从 Windows 批处理文件中的 ECHO 字符串中去除引号?

    我正在创建一个 Windows 批处理文件 但我必须 ECHO 一个大型复杂字符串 因此我必须在两端加上双引号 问题是引号也被回显到我正在写入的文件中 如何 ECHO 这样的字符串并去掉引号 UPDATE 我花了两天的时间研究这个问题 终于
  • org.apache.poi 中的异常

    我试图编写一个可以读取和写入的程序 xlsx文件中 下面提供的代码旨在能够编写其第一个 Excel 程序 package excel reader import java io FileOutputStream import java io
  • .NET 进程分配的内存何时释放回 Windows

    设置 NET 在启动时以及在收集后尝试满足分配请求时 分段为每一代的堆 0 1 2 LOH 分配内存 以获得连续的内存块 为每个堆分配的内存可能会随着应用程序 预热 而趋于平稳 但第 2 代和大型对象堆可能除外 在垃圾收集期间 每个堆 0
  • SFTP Java - 管道关闭 Jsch 异常

    我正在研究一种 java 方法 将文件从一个位置复制到另一个远程位置 我的代码如下 我尝试使用jsch 0 1 42 0 1 50 0 1 54 public static void processFiles ArrayList
  • java.lang.IllegalStateException:FragmentManager 已被销毁

    活动中onResume我称之为 volley request 的方法 它获取项目列表 然后将它们加载到此活动内的 ListFragment 中 当我第一次进入活动时 一切正常 但当我重新进入活动时 ListFragment 为空 并且控制台
  • 为什么将多线程应用程序限制在一个核心上会使其运行速度更快?

    我有一个本机多线程Win32用 C 编写的应用程序 大约有 3 个相对繁忙的线程和 4 到 6 个不执行太多操作的线程 当它在正常模式下运行时 在 8 核计算机上 总 CPU 使用率总计约为 15 并且应用程序在大约 30 秒内完成 当我通
  • 使用 ProcessBuilder 启动 CMD

    我尝试使用以下代码在 Windows 中启动 CMD 应用程序 但它无法按预期工作 来自不同网站的几个示例表明 cmd 作为 ProcessBuilder 构造中的参数应该有效 我需要做什么才能让我的 Java 应用程序在 Windows
  • CreateProcess error=206,运行 gwtCompile 时文件名或扩展名太长

    我的应用程序是一个 springboot gradle 应用程序 我的应用程序的一部分涉及使用 gradle 进行遗留 gwt 编译 它工作正常 但今天当我运行下面的 gradle 任务时 它显示 CreateProcess error 2
  • 找出对象列表中是否包含具有指定字段值的内容?

    我有一个从数据库收到的 DTO 列表 它们有一个 ID 我想确保我的列表包含具有指定 ID 的对象 显然 在这种情况下创建具有预期字段的对象不会有帮助 因为 contains 调用 Object equals 并且它们不会相等 我想出了这样
  • 如何将字符串解析为map

    有一个像A B C D E F这样的字符串 如何将其解析为map 我会使用拆分 String text A B C D E F Map
  • 如何将元素添加到通用集合

    我想知道如何将专用对象添加到通用集合中 我正在使用以下代码 Collection

随机推荐

  • Java基础13--面向对象:继承

    Java基础13 面向对象 继承 文章目录 Java基础13 面向对象 继承 继承的概念 生活中的继承 类的继承格式 继承类型 继承的特性 继承关键字 extends关键字 implements关键字 super 与 this 关键字 fi
  • Cesium案列学习(Multi-partCZML.html)

    在学习这个案例之前 先花一点时间了解一下什么是CZML CZML Structure AnalyticalGraphicsInc czml writer Wiki github com Cesium Language CZML 入门1 CZ
  • 中国集成电路产业人才供需报告

    导读 集成电路产业是信息产业的核心 更是支撑经济社会发展和保障国家安全的战略性 基础性和先导性产业 中国大陆集成电路产业处于突破技术封锁 攻坚 卡脖子 瓶颈 构筑核心优势的关键窗口期 迫切需要产业领军人才 专业技术人才 基础研究人才等有力支
  • 什么是静态测试?什么是动态测试?

    如果从被测试对象是否被运行的角度来划分 测试可以分为静态测试和动态测试两种 静态测试是指不运行被测试的软件系统 而是采用其他手段和技术对被测试软件进行检测的一种测试技术 例如 代码走读 文档评审 程序分析等都是静态测试的范畴 常用的静态分析
  • Win10安装Linux子系统WSL(ubuntu2204)及图形桌面xfce4

    WSL简介 什么是 WSL 在计算机上使用 Linux 系统通常有两种方式 使用虚拟机或安装 Linux 系统 使用虚拟机时开销较大 直接使用 Linux 系统虽然可以带来流畅体验 但与 Windows 之间来回切换比较麻烦 为此 微软开发
  • [激光原理与应用-47]:《焊接质量检测》-4-普雷茨特激光焊接过程监控系统LWM分析

    目录 第1章 激光焊接过程监控系统LWM概述 第2章 产品特性与功能 2 1 生产相关的信息 2 2 原始信息检测 2 3 焊接质量分析信息 2 4 缺陷报告与生产控制 2 5 LWM给客户带来的好处 2 6 适用范围 2 7 人机界面 H
  • OCX中主Frame中处理view(备用)

    if m ptmpview NULL m ptmpview GetWindow GW CHILD if m ptmpview NULL m ptmpview gt SendMessage WM PAINT CRect rc CRect 0
  • c++,qt 如何动态获取类的字段的名称和数据

    在C 和Qt中 无法直接通过类来动态获取字段的名称和数据 C 是一种静态类型语言 它在编译时需要确定类的结构 包括字段的名称和数据类型 因此 需要在代码中显式地引用字段名称才能访问其数据 然而 你可以使用反射 reflection 库或自定
  • 浏览器跨域问题的总结

    本文主要总结了5中常用的跨域方法 包括JSONP CORS Nginx Proxy与WebSocket 在日常练手的小项目中 推荐CORS 比较方便易理解 部分图片来源网络 如有侵权 请联系删除 1 浏览器同源策略 所谓同源是指 域名 协议
  • 【Git系列】分支操作

    分支操作 1 什么是分支 2 分支的好处 3 分支操作 3 1 查看分支 3 2 创建分支 3 3 切换分支 4 分支冲突 4 1 环境准备 4 2 分支冲突演示 其他系列 Git最详细的体系化教程 1 什么是分支 在版本控制过程中 使用多
  • Ptython入门学习:模块导入自定义函数与 时间模块练习

    目录 Python 日期和时间 Python 第三方模块 Python 日期和时间 Python 的 time 模块下有很多函数可以转换常见日期格式 如函数time time 用于获取当前时间戳 import time import dat
  • element plus 表格,单元格颜色,边框设置

    先看效果 cell style cellStyle 设置单元格颜色 边框 返回值一定是个对象包含
  • 使用fetch函数发送AJAX请求

    使用fetch函数发送AJAX请求 案例 点击按钮发送AJAX请求
  • MySQL第一章 创建数据库及数据表 ② 代码

    MySQL第一章 创建数据库及数据表 代码 创建表 方式一 手动点击创建 1 连接MySQL 2 创建数据库 3 创建Student1表格 4 编辑表格中的数据内容 方式二 代码编写创建 1 在MySQL 一级数据库 中新建查询链接 2 在
  • Web 3.0顶级干货教学:什么是Web 3.0 ?

    Web 3 0顶级干货教学 什么是Web 3 0 尊重原创 编写不易 帮忙点赞关注一下 转载小伙伴请注明出处 谢谢 什么是Web 3 0 Web 3 0 是 John Markoff 在 2006 年提出的一种新型网络 它被定义为语义网络
  • 浏览器页面不能正常显示

    1 考虑是不是浏览器的vpn和软件vpn冲突导致的浏览器页面不能正常显示 2 考虑是不是自己的hosts文件 将一些网址指向了 127 0 0 1 因为我修改过hosts文件 指向了一些网址到这个IP 而我的浏览器VPN也手动代理了这个IP
  • Netty (2)-ChannelInboundHandlerAdapter入站事件

    在第1篇 我们继承ChannelInboundHandlerAdapter后 即可收到消息并处理 本篇介绍其更多的用法 基本概念 Channel 可以理解为一个连接 每一个客户端连到服务器 都会有一个与之对应的Channel Channel
  • 嫁给程序员的十大好处

    医生 医生很危险 我对医生的印象太差 放下他身边女生太多 会跟某个护士小姐跑掉 或是被一个假装生病的年轻女人勾引走不说 而且这种倒霉事还往往发生在你已经为他生了几个小孩的时候 现在的医生都是领提成的昧着良心看病 有钱就是病人 没有钱死了都没
  • 【学习笔记】李宏毅2020ML&DL课程 13_2 Unsupervised Learning

    Neighbor embedding manifold learning LLE 地球就是一个流形 流形学习就是将高维的 流形的 feature的摊平 摊平之后就可以用欧氏距离了 假设空间中有两个点xi和xj 他们俩的关系为wij LLE方
  • Java学习之:如何将 java 程序打包成 .jar 文件

    文章目录 开始打包 打开文件结构 选中 Artifacts 点 from modules with dependencies 选择想打包的 module 选择 Server Module 中的 main 函数所在的文件 确认即可 对 Cli