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 文件 的相关文章

  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • 如果我使用客户端计算机上未安装的字体,会发生什么情况?

    有人可以告诉我 如果我在 WinForms 应用程序中使用目标计算机上不可用的字体 会发生什么情况 它是否使用同一系列的字体 只是 Sans Serif 还是其他字体 您的应用程序将回退到 Segoe UI Tahoma 然后是 MS Sa
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem

随机推荐

  • 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