让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函数入口运行 ...
随机推荐
- Servlet处理Json请求数据包
request.setCharacterEncoding('UTF-8'); response.setContentType('text/html;charset=UTF-8'); String ac ...
- 用CSS实现加载的动画效果
用纯CSS实现加载的一些动态效果,可以把加载效果中的元素分成很多个小部分,每个部分都有动画,每个部分的动画再设置相应的延迟效果,这样,看起来就是连贯的加载动画效果.代码如下: 1.效果1 <di ...
- 内核模块加载错误 “Invalid module format” 解决办法
参考链接: http://blog.chinaunix.net/uid-20448327-id-172345.html
- “放到桌面”的Servlet实现
复习下Servlet下载文件, 当response把ContentType设置成application/xxxx的时候呢,浏览器会默认启动下载,而不是试图打开. 通过给httpHeader里面加入内容 ...
- 搜索表字段包含某字符串的SQL和监控Oracle数据库的SQL。
1.第一个SQL 背景:需要找到SQL Server数据库中,包含某个字符串的表,输出表和包含该字符串的列. )='=' --这里填要搜索的字符串 DECLARE @sql NVARCHAR(MAX) ...
- Shell中字符串的切割、拼接、比较、替换
[截取] 一.Linux shell 截取字符变量的前8位,有方法如下: expr substr “$a” 1 8 : 二.按指定的字符串截取 第一种方法: ${varible##*string} # ...
- Spring Boot 2 + MariaDB + HikariCP基础实例
在已有SpringBoot工程中基于MariaDB驱动使用HikariCP 连接池 环境:SpringBoot2.0.2 .MariaDB驱动版本2.2.3.HikariCP2.7.8 1.在Spri ...
- 【MySQL】MySQL内连接,左连接,右连接查询
概念 INNER JOIN(内连接):获取两个表中字段匹配关系的记录.也就是只会返回共有的内容. LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录. RIGHT JOIN(右 ...
- jupyter4.4.0自定义目录
百度是有技巧的,现在百度的基本上都是2年前的帖子,对于最新的版本都不适用 对于jupyter自定义目录都是修改配置文件,这个对于jupyter4.4.0不适用: 1.在桌面创建jupyter-note ...
- 逆向 make 打包错误解决方案 make: *** [internal-package] Error 2
修改deb.mk文件第6行的压缩方式为gzip vim $THEOS/makefiles/package/deb.mk _THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= ...