java判断在idea中运行_让java代码在Idea外面运行起来

今天在写聊天程序,终于写到双方通信的时候,发现idea只能开一个客户端。虽说可以开多线程来实现多开,但是懒得改动代码,所以我就试试能不能把jar包导出来运行。首先我用maven自带的工具打了jar包,然后放到桌面。运行命令:

java -jar xxxx.jar

报错:没有.jar中主清单属性,搜索后得知要指定main函数所在位置,所以我又运行命令指定了主类(包名+类名):

java -cp xxx.jar com.xxx.xxx.NettyServer

又报错,错误如图:

c562533e3450c40180dbb5ed33a30352.png

看这个似乎是没有找到依赖,所以我又把jar包解压看了一下:

46ecb7c711d35b091409410660a2356f.png

还真没有lib文件夹,这里依赖了fastjson、netty、slf4j等外部库,所以我就搜索了一下如何导出可以运行的jar包:

搜索到一篇靠谱的文章 (project structure-->project settings-->Artifacts-->+-->jar-->按照步骤指定lib和main函数,输出目录指定resources,里面会生成MAINFEST文件,指定主类位置。-->build -->build ArtiFacts-->out目录下面找jar包)

按照教程果然导出来可以运行的jar包,导出的包里面有一个MANIFEST.MF文件指定了jar包中主类的位置,但是我的这个jar包里面有两个要启动的项目,一个是服务端,一个是客户端,都在一个包里面,所以我又探索能不能传入参数,来控制启动哪一个包。我先考虑到main函数有args参数,在命令行输入参数,不知道能不能由args字符串数组接收到,所以我写了一个简单的测试:

importjava.util.Scanner;public classTestMainArgs {public static voidmain(String[] args) {

System.out.println("外界传入参数:");for(String arg : args) {

System.out.println(arg);

}

Scanner scanner= newScanner(System.in);

System.out.println("输入任意字符结束");

scanner.next();

}

}

放在桌面,使用命令编译:

javac XXX.java

然后运行,发现可以传入多个参数:

0e0b371e791049bebc922fe9b37e3251.png

所以我在项目里面添加了一个类,接受命令再根据命令执行对应的主类(其实也可以调用任意的函数):

public classSelectServerCommand {public static voidmain(String[] args) {if (args.length>0){

exec(args);

}else{

System.out.println("在java -jar XXX.jar后面带上server开启服务端,client开启客户端:");

}

}public static voidexec(String[] args) {if ("server".equals(args[0])){

NettyServer.main(args);

}else if ("client".equals(args[0])){

NettyClient.main(args);

}else{

System.out.println("无法识别的命令!");

}

}

}

效果良好:

c390ee0129c0c5a8f29070dee94c4ba3.png

指定server:

447b26333c53c053215fb46010df5a72.png

50a4e697b647984cd2b6364b6ab5f3d1.png

指定client:

2137dcdc06d1dd52a02a8d503c9247db.png

abd9ffd74431915e204eafcadd3990b5.png

最后传到虚拟机试一试:

5c05af6257488e0dfc5f61bbb7b267a3.png

成功在虚拟机部署了服务端,并且本地连接成功可以通信!这样的部署只需要一个jar包要管理,真的很方便。就是配置文件不知道怎么搞,还要继续试验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值