使用IDEA给项目打jar包

news/2024/10/5 6:09:40/文章来源:https://www.cnblogs.com/fragmentary/p/18282457

使用IDEA给项目打jar包

参考地址:https://www.cnblogs.com/blog5277/p/5920560.html 感谢作者

一、准备一个Java项目并先看看效果

​ 只想打包,就跳过这一步: 一、准备一个Java项目并先看看效果。

​ 如果启动jar包遇到报错:无法找到/加载主类就去看看第二步开头。

1、找一个项目

​ 这里我准备了一个最近在学的一个聚合工程的项目(你可以找一个自己写过的非Spring的项目试试,如果有写过的基于Swing和AWT的可视化的项目更好,还能看呢)的其中一个模块 im-tcp,为什么呢?我想着要是后面要线上部署这个项目,但是这个模块又不是基于SpringBoot开发的 -_-,那就通过jar包的方式运行部署吧。

2、运行指令

​ 一般:java -jar xx.jar就行了,我这里需要注意以下两个问题。

1、首先就是这个args 参数需要读取:

    // 启动类这里通过 args 给到对应的启动所需的yml配置文件地址public static void main(String[] args) {if (args.length > 0) {start(args);}else {System.out.println("启动失败,没有在args中设置启动参数!");}}
# 参考指令
java -jar im-tcp.jar E:\\JavaEEUtils\\im-system\\im-tcp\\src\\main\\resources\\config2.yml # 我这里规定参数1就是yml文件的路径

2、其次就是这里需要启动多个项目集群:

注意:我这里为了节约时间简单处理了一下,可以参考SpringBoot的jar包运行,你可以可以给args参数赋值,然后通过类似:--server.port=9090 这种的方式来处理,思路:可以先看看args参数的输出结果,然后通过字符串匹配 + 反射给对应的与yml文件对应的类set值,这样回更零活

    private static void start(String[] args) {try {//1、读取对应的yaml配置Yaml yaml = new Yaml();InputStream inputStream = new FileInputStream(args[0]);BootstrapConfig bootstrapConfig = yaml.loadAs(inputStream, BootstrapConfig.class);System.out.println(bootstrapConfig.toString());// 注意:先读取yml文件到类,然后在设置参数这样覆盖 参数的优先级才会高于yml啊if(args.length == 3) {	//这里简单处理 如果有后面两个参数那就是对应的端口bootstrapConfig.getLim().setTcpPort(Integer.parseInt(args[1]));bootstrapConfig.getLim().setWebSocketPort(Integer.parseInt(args[2]));}......
# 参考指令
java -jar im-tcp.jar yml文件路径 TCP端口号 WebSocket端口号
3、先看看效果
# 指令:
java -jar im-tcp.jar E:\\JavaEEUtils\\im-system\\im-tcp\\src\\main\\resources\\config2.yml 9001 19001

可以看到,对应的端口也设置好了,我们再开一个端口启动一个:

我们可以通过Zookeeper的查看工具ZooInspector看到启动的两个服务都成功的注册进来了。

二、使用IDEA打包

​ 在此之前请自行配置号对应的maven。

​ 我在最开始使用时这个方式打包。启动jar包结果报错:无法找到/加载主类 然后通过设置目录为模块的根路径就处理了,如果你确定你的主类设置和.MF文件都有,就可以试试在 3,4步使用模块根路径是否就可以处理了。

1、

2、

点击Artifacts 然后点击 + 号对应选择下方:

3、

选择对应模块、对应启动类路径、生成.MF文件的地址(不要用默认地址!选择模块的根路径,如果使用其他地址可能导致无法启动

注意:如果提示已经有了这个文件,就先去删除对应的文件再来生成

4、

勾选对应位置,填写jar包输出地址(还是推荐模块的根目录)确定好了后,Apply 再 OK

5、

点击此处

6、

点击构建,然后就可以在下方看到进度条,完成后模块的根目录下就会出现jar包

输出的jar包:

测试

​ 使用java -jar指令就可以测试效果了,前面第一步已经看了这里就不赘述了。

java -jar im-tcp.jar E:\\JavaEEUtils\\im-system\\im-tcp\\src\\main\\resources\\config2.yml 9001 19001

总结

​ 我为什么写这个,最开始打包没有改.MF的路径就报错:无法找到/加载主类。所以在找到这篇博客后:https://www.cnblogs.com/blog5277/p/5920560.html 后总结了一下。

​ 为什么打jar包?-_-,一是方便,你写好了,直接给jar包别人用就行了(如果你的项目中除了Java运行环境还有其他前置条件如数据库等,可以使用线上的,这样别人只需要java就可以运行了)。还有就是我是为了部署运行非SpringBoot项目,当然你也可以研究一下生成.exe,自己用Java的GUI写一个简单的东西给自己或者给别人用。

打exe可执行程序的参考教程(感谢作者):

https://blog.csdn.net/m0_37701381/article/details/104163877?app_version=6.2.8&code=app_1562916241&csdn_share_tail={"type"%3A"blog"%2C"rType"%3A"article"%2C"rId"%3A"104163877"%2C"source"%3A"m0_64512076"}&uLinkId=usr1mkqgl919blen&utm_source=app

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/737012.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MCU点灯

MCU点灯 芯片型号:STM32F407ZET6 4个LED灯,网络标号分别为LED0 ,LED1,FSMC D10,FSMC D11。对应的引脚号分别为PF9,PF10,PE12,PE13。原理图//1.定义变量 GPIO_InitTypeDef GPIO_InitStructureF;//F端口 GPIO_InitTypeDef GPIO_InitStructureE;//E端口 int main()//中文注释 …

电子计算机类比赛的“武林秘籍”-电赛光电设计大赛计算机设计大赛嵌入式芯片与系统设计竞赛,你要的都在这里!

本文主要介绍了工科类学生参加比赛的必要性和益处、电子计算机类比赛的基本思路等内容电子计算机类比赛的“武林秘籍”-电赛光电设计大赛计算机设计大赛嵌入式芯片与系统设计竞赛,你要的都在这里! 为什么需要参加电子计算机类比赛 对于实现短期目标而言: 电子计算机类学科竞…

VMware安装CentOS7环境

准备 CentOS7的iso镜像 下载链接:https://mirrors.aliyun.com/centos/7/isos/x86_64/配置步骤 步骤一——创建虚拟机 1、点击创建新的虚拟机2、选择典型3、选择镜像文件4、填写对应信息5、选择虚拟机存储的位置6、存储为单个文件7、创建步骤二——配置centos7 1、打开虚拟机后…

Mybatis执行器

mybatis执行sql语句的操作是由执行器(Executor)完成的,mybatis中一共提供了3种Executor:类型 名称 功能REUSE 重用执行器 缓存PreparedStatement,下一次执行相同的sql可重用BATCH 批量执行器 将修改操作记录在本地,等待程序触发或有下一次查询时才批量执行修改操作SIMPLE…

本地安装seata

1. 下载,解压steata安装包 2. 修改配置里面的端口号 只要是localhost或者不是自己的端口号都更改成自己的端口号3. 修改配置nacos的文件执行 4、数据库中添加对应的表 数据库中的表名称尽量位seata_server,避免后面去修改 5、线上nacos配置 在public 下面进行配置,修改自己对…

关于自定义unordered_set\unordered_map中Hash和KeyEqual:函数对象和lambda表达式简单应用

以unordered_set为例,首先在cppreference中查看其模板定义:可以看到Hash类默认是std::hash<Key,KeyEqual类似,本文将Hash以函数对象写出,将KeyEqual以lambda写出。 class hashvec{public:size_t operator()(const vector<int> & vec) const {return hash<…

Python预测体重变化:决策树、tf神经网络、随机森林、梯度提升树、线性回归可视化分析吸烟与健康调查数据

全文链接:https://tecdat.cn/?p=36648 原文出处:拓端数据部落公众号 在当今的数据驱动时代,机器学习算法已成为解析复杂数据集、揭示隐藏模式及预测未来趋势的重要工具。特别是在医疗健康领域,这些算法的应用极大地提升了我们对疾病预防、诊断及治疗方案的理解与制定能力。…

Nuxt3 的生命周期和钩子函数(九)

摘要:本文介绍了Nuxt3中与Vite相关的五个生命周期钩子,包括vite:extend、vite:extendConfig、vite:configResolved、vite:serverCreated和vite:compiled,展示了如何在每个钩子中扩展Vite配置、读取配置、添加中间件和处理编译事件。每个钩子都有详细的描述和示例代码,帮助开…

地理信息科学:生态保护的智慧经纬

在地球这颗蓝色星球上,每一片森林的呼吸、每一条河流的流淌,都是生命交响曲中不可或缺的音符。而地理信息科学(GIS),正是我们手中解读自然密码、护航生态平衡的精密仪器。今天,让我们深入探讨GIS如何在生物多样性保护和生态系统管理中发挥其不可替代的作用。 🌱 GIS——…

软连接与硬链接

(1)软链接(symbolic link) 创建命令:ln -s <target> <link_name>其中:<target> 是目标文件或目录的路径,可以是相对路径或绝对路径。<link_name> 是要创建的软链接的名称,可以是相对路径或绝对路径。特点:笔试面试填空题和简答题:软链接的特点…

pycharm导入第三方包出现红色波浪线或新建flask项目出现红色波浪线解决办法

设置 -> 项目结构(Project Structure) ,将site-packages设为源代码

开源软件开发平台哪家好?

低代码技术平台、开源软件开发平台哪家好?进行数字化转型,离不开低代码技术平台等软件产品的加持与助力。因为它更好操作、更灵活、易维护等优势特点突出,在推动企业实现流程化办公的过程中助力明显,作用大,深得客户喜爱。那么,低代码技术平台、开源软件开发平台哪家好?…