使用IDEA给项目打jar包
一、准备一个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可执行程序的参考教程(感谢作者):
标签:java,项目,args,jar,IDEA,tcp,im,yml From: https://www.cnblogs.com/fragmentary/p/18282457