最近遇到一个非常无语的问题,之前我开发使用的是IDEA,一切正常。
但是感觉IDEA升级新版本后非常卡,想切换到VSCode开发。
完全相同的项目代码,使用IDEA本地调试一切正常,但是使用VSCode所有后台Controller注册的action全部报404。
经过千辛万苦的排查,发现是2个工具的启动参数不同。
IDEA的启动参数如下:
java -classpath "XXX1.jar;XXX2.jar(所有依赖的jar包);XXXProject\target\classes(项目的编译输出路径);" com.XXX.App(启动类)
VSCode的启动参数如下:
java '-cp' 'C:\Users\Administrator\AppData\Local\Temp\cp_30iz2rx7b2khicoag9024vx6u.jar(VSCode自动生成的,里面包含了所有依赖的jar包和项目的编译输出路径)'
大致原理我也清楚,因为JFinal项目所有Controller自动注册action是基于包的扫描,而包的路径和classpath相关,由于VSCode启动时classpath参数与IDEA不同,导致无法扫描到Controller,所以所有action没有注册。
现在我的解决方案是,在启动入口类的main方法中加入如下代码:
String cp = System.getProperty("java.class.path");
//我尝试了各种VSCode关于classpath的配置,全部失败。启动会发现下面的输出和配置前没有任何变化。
System.out.println(cp);
cp+=";"+PathKit.getRootClassPath();
System.setProperty("java.class.path", cp);
但是我感觉这种方法太不优雅了,为什么我就因为使用VSCode开发就要在项目中多这么一段代码。。
敢问各位大佬有没有什么更优雅方法