首页 > 其他分享 >使用IDEA给项目打jar包

使用IDEA给项目打jar包

时间:2024-07-03 19:58:10浏览次数:13  
标签:java 项目 args jar IDEA tcp im yml

使用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

标签:java,项目,args,jar,IDEA,tcp,im,yml
From: https://www.cnblogs.com/fragmentary/p/18282457

相关文章

  • 全球半导体CVD和ALD用前驱体行业现状、重点企业分析及项目可行性研究报告(2024-2030)
    2024年7月3日环洋市场咨询机构出版了一份详细的、综合性的调研分析报告【全球半导体CVD和ALD用前驱体行业总体规模、主要厂商及IPO上市调研报告,2024-2030】。本报告研究全球半导体CVD和ALD用前驱体总体规模,包括产量、产值、消费量、主要生产地区、主要生产商及市场份额,同时分......
  • link项目开发
    两种方式例如组件名是Child,引用组件的项目为Parent方式一Child里npmlink(tnpmlink),生成一个地址Parent里npmlink生成的地址(tnpmlink/Users/liyuan/Documents/团长端/mmc-leader-share-drawer)Parent里引用Child的位置,写法如下,要写src,不是构建产物lib或者es......
  • 一个能解决95%定时任务问题的项目,这是什么级别的存在...(领私活源码)
     最近在做项目中涉及到了任务创建和任务运行。结合老大意思,想让我做一个单独的执行器服务。这就有些头疼了。整理起来也比较费事儿!打工人,不能轻易说不!于是就上网划水,突然间XXL-JOB就在我眼前闪过!了解下发现挺适合的。就这样故事开始了...XXL-JOB简介XXL-JOB是一个分......
  • flutter项目正式打包上线
    正式打包修改应用版本以及升级打包 ......
  • 从0到1写一个vue2管理后台项目(二)
    前言:现在有很多vue2的管理后台系统,为什么还要自己写一个呢?我觉得会用总没有会写理解得深一、有了基础框架(一)之后,对于一个vue开发工程师来说如何自己搭建自己的后台管理系统呢?当然可以直接抄一些现有的开源系统的代码,比如admin、ruoyi等,同样我想试试通过AI来写,一步一步完善,于是用......
  • vue项目子组件使用 dialog 弹框,如何实现父子组件弹框展示状态关联?
    vue项目,子组件使用el-dialog组件,想要实现在父组件可以控制子组件dialog的展示和隐藏,子组件自己可以控制dialog展示和隐藏,该如何实现?1.子组件(DialogComponent.vue)子组件接受一个来自父组件的prop,用来控制dialog的显示状态,并且当子组件内部需要改变dialog状态时,通过......
  • 软考中项(第三版):项目立项管理总结
    前言系统集成项目管理工程师考试(简称软考中项),其中案例分析也是很大一部分考试内容,目前正在学习中,现总结一些可能会考到的知识点供大家参考。1.1、项目建议与立项申请1、立项管理包括的4个阶段:(1)项目建议书与立项申请(2)初步可行性研究(3)详细可性型研究(4)项目评估与决策2、......
  • GIT - 一条命令把项目更新到远程仓库
    前言阅读本文大概需要3分钟说明更新项目到远程仓库只需要执行一条命令,相当的简便步骤第一步编辑配置文件vim~/.bash_profile第二步写入配置文件gsh(){localmsg="${1:-ADDCOMMITPUSH}"gitadd.&&gitcommit-m"$msg"&&gitpush}第三步......
  • 2024年5大最强免费项目管理软件使您能够轻松应对各种项目管理难题
    作为软件开发人员或测试人员,选择最适合自己的测试管理工具可能是一项艰巨的任务。目前有无数种免费的测试管理工具,它们旨在帮助开发人员轻松管理测试流程。以下是2024年5大最强免费测试管理工具,帮助您轻松应对各种测试难题。1.禅道项目管理软件禅道作为国内知名的开源项目管理......
  • 以Java项目为例,实现Jenkins对接CCE Autopilot集群
    本文分享自华为云社区《Jenkins对接CCEautopilot集群实战》,作者:可以交个朋友。一背景鉴于日趋流行的serverless技术架构、以及用户经常谈及的降本的需求。考虑Jenkins主从架构的特性,slave节点可以在工作的时候部署在任意平台上执行master节点下发的任务,因此可以基于CCEAuto......