让java代码在Idea外面运行起来
今天在写聊天程序,终于写到双方通信的时候,发现idea只能开一个客户端。虽说可以开多线程来实现多开,但是懒得改动代码,所以我就试试能不能把jar包导出来运行。首先我用maven自带的工具打了jar包,然后放到桌面。运行命令:
java -jar xxxx.jar
报错:没有.jar中主清单属性,搜索后得知要指定main函数所在位置,所以我又运行命令指定了主类(包名+类名):
java -cp xxx.jar com.xxx.xxx.NettyServer
又报错,错误如图:

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

还真没有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字符串数组接收到,所以我写了一个简单的测试:
import java.util.Scanner;
public class TestMainArgs {
public static void main(String[] args) {
System.out.println("外界传入参数:");
for (String arg : args) {
System.out.println(arg);
}
Scanner scanner = new Scanner(System.in);
System.out.println("输入任意字符结束");
scanner.next();
}
}
放在桌面,使用命令编译:
javac XXX.java
然后运行,发现可以传入多个参数:

所以我在项目里面添加了一个类,接受命令再根据命令执行对应的主类(其实也可以调用任意的函数):
public class SelectServerCommand {
public static void main(String[] args) {
if (args.length>0){
exec(args);
}else{
System.out.println("在java -jar XXX.jar后面带上server开启服务端,client开启客户端:");
}
}
public static void exec(String[] args) {
if ("server".equals(args[0])){
NettyServer.main(args);
}else if ("client".equals(args[0])){
NettyClient.main(args);
}else {
System.out.println("无法识别的命令!");
}
}
}
效果良好:

指定server:


指定client:


最后传到虚拟机试一试:

成功在虚拟机部署了服务端,并且本地连接成功可以通信!这样的部署只需要一个jar包要管理,真的很方便。就是配置文件不知道怎么搞,还要继续试验。
让java代码在Idea外面运行起来的更多相关文章
- java代码修改了之后运行仍然是原程序
有的时候java代码改了之后但是运行的程序却没有发生改动,这是什么情况呢?可能懂得的人都觉得十分简单,但对于我这样的小白来说确实很费力.java代码更改后需要编译生成.class文件,说的直白点,这个 ...
- 写好的Java代码在命令窗口运行——总结
步骤: 1.快捷键 win+r,在窗口中输入cmd,enter键进入DOS窗口. 2.假设写好的代码的目录为:D:\ACM 在DOS中依次写入:cd d: cd ACM 利用cd切换到代码文件所在的目 ...
- idea编写的java代码,在cmd运行乱码解决方案
1.解决方案 使用txt打开,另存为的时候选择编码为ANSI 即可.
- Notepad++运行JAVA代码
第一种方法: 工具栏->运行 点击后选择运行 1.在运行窗口中输入: cmd /k javac "$(FULL_CURRENT_PATH)" & echo 编译成功 ...
- Java基础之用记事本编辑java代码运行,并且打成jar包后运行
使用记事本写java代码 1.在d盘新建一个记事本,名字叫做zhanzhuang.java,会询问不可用,是否继续,点击是 2.在里面编辑就如下内容,注意文件的名字要和 class 后面的名字相对应 ...
- 用DOS命令来运行Java代码
用DOS命令来运行Java代码.. ----------------- Demo.java public class Demo { public static void main(String[] a ...
- 在Eclipse中运行JAVA代码远程操作HBase的示例
在Eclipse中运行JAVA代码远程操作HBase的示例 分类: 大数据 2014-03-04 13:47 3762人阅读 评论(2) 收藏 举报 下面是一个在Windows的Eclipse中通过J ...
- 智能客服 利用python运行java代码
因为需要在linux中用python来进行分析,顾需要利用python来运行java中语音转文字和文字转语音代码 在python中运行java代码需要利用jpype
- java中成员变量、代码块、构造函数运行顺序
1.java虚拟机执行程序,首先须要装载类,安装现装载父类,初始化父类的静态代码块和静态成员变量 再load子类. 初始化子类静态代码块和成员变量 2.load完成父类与子类后,从main函数入口运行 ...
随机推荐
- python中__str__与__repr__的区别
__str__和repr __str__和__repr__都是python的内置方法,都用与将对象的属性转化成人类容易识别的信息,他们有什么区别呢 来看一段代码 from math import hy ...
- RabbitMQ 和 Kafka
============================RabbitMQ 术语============================RabbitMQ 有很多术语和Kafka不一样, 理解这些术语十分 ...
- Mysql 根据一个表数据更新另外一个表
方法一: update 更新表 set 字段 = (select 参考数据 from 参考表 where 参考表.id = 更新表.id); update table_2 m set m.colum ...
- How to Create UML in Markdown
Import yuml class format  Create your own class Person ...
- 2018-2019-2 20175235 实验二《Java面向对象程序设计》实验报告
实验内容: 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 一.单元测试 1伪代码 百 ...
- Linux安装网易云音乐
⒈下载最新版网易云音乐安装包 http://d1.music.126.net/dmusic/netease-cloud-music_1.2.0_amd64_ubuntu_20190424_1.deb ...
- MySQL:参数wait_timeout和interactive_timeout以及空闲超时的实现【转】
一.参数意思 这里简单解释一下两个参数,含义如下: interactive_timeout:The number of seconds the server waits for activity on ...
- Virtual Machine
之前说到可以使用Assembly language来实现程序编写,把程序通过一个Assembler就可以得到计算机可以操作的二进制文件. 但是Assembly language依旧不适于编程,但怎么将 ...
- nginx,作为前端的你会多少?
--现在阅读的你,如果是个FE,相信你不是个纯切图仔.反之,如果是,该进阶了,老铁! 前端的我们,已经不仅仅是做页面,写样式了,我们还需要会做相关的服务器部署.废话不多说,下面就从前端的角度来讲以下n ...
- neutron--ml2 plugin
ml2 plugin 对 plugin 的功能进行抽象和封装,有 ml2 plugin ,各种 network 无需开发自己的 plugin,只需开发 ml2 plugin 相对应的 driver , ...