NoSuchMethodError
1、异常
源码运行正常,但是打包成jar后运行提示没有该方法
查看了一下,process的pid方法是jdk9之后添加的方法,jdk8是没有的,但是我看源码的运行环境就是jdk8,运行环境也是jdk8
源码环境
运行环境
很奇怪,同样是jdk8,为什么源码环境可以调用pid方法,但是运行环境不可以
2、发现问题所在
难道Javase1.8不是jdk1.8?
我决定在代码中打印出Java的版本信息
String javaVersion = System.getProperty("java.version");
System.out.println("javaVersion = " + javaVersion);
源码环境运行打印的结果
运行环境打印出来的结果
很明显版本号是不一样的
虽然不知道为什么不一样,但是我现在至少知道如何去解决这个问题了
3、方案一
其实这里并不一定非要用pid来唯一区别是哪个进程,因为pid仅仅只是一个key值,只要是唯一的,传到前端去,前端需要停止进程的时候再把这个唯一的key带回来,就能在map中获取这个进程对象,就能停止进程,唯一值的获取方式非常多,最简单的就是获取uuid即可
4、方案二
既然是因为运行时环境和源码环境不一致,那么就把源码环境拷贝到运行环境中即可
在开发工具中可以轻而易举的看到源码所应用的jdk路径
直接把这个路径拷贝到运行环境中去
然后在运行jar的前面加上两句,应用自己的jdk环境
set JAVA_HOME=D:\cetcht\project01\jre set Path=%JAVA_HOME%\bin;%Path%;
java -jar -Dfile.encoding=utf-8 netty-platform.jar --lcx.locations.path=D:/cetcht/project01/media --lcx.datasource.ip=localhost
5、小记
其实在这个过程中,还遇到了一个问题,就是使用拷贝过来的jdk时依然还是报了一个错
一开始写的是下面两句
set JAVA_HOME=D:\cetcht\project01\jre
set Path=%Path%;%JAVA_HOME%\bin;
区别仅仅是 path 和 Java_home 的顺序不一致,这个是 Java_home 放在了后面,但就这一个顺序问题,导致了如下问题
这个提示的是编译环境和运行环境不一致
为什么不一致,明明都是用这个jre
原因是path中已经配置了其他的jdk路径,按照优先原则,会先找到path中已经有的jdk,所以这里要先使用临时配的Java_home ,就得把这个路径配置到最前面
那么有人又得有疑惑了,不能直接写成下面这样吗,这样就只有一个jdk,绝对不会找错地方
set JAVA_HOME=D:\cetcht\project01\jre
set Path=%JAVA_HOME%\bin;
这样写path就被完全覆盖掉了,但是某些情况下倒也是可以正常运行的,
只是如果代码中还应用到了别的命令,比如应用到了海康等的sdk,这些库文件的路径也是配置在了path中,这样写就找不到命令了
6、单个文件的调试代码
查看编译版本 javac -version 查看运行版本 java -version 编译 set JAVA_HOME=E:\sts\sts-4.9.0.RELEASE\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.1.v20201027-0507\jre set Path=%JAVA_HOME%\bin;%Path%; javac -encoding "utf-8" ExecCmd.java pause 运行 set JAVA_HOME=E:\sts\sts-4.9.0.RELEASE\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.1.v20201027-0507\jre set Path=%JAVA_HOME%\bin;%Path%; java ExecCmd pause
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律