PathKit.getRootClassPath()的问题

项目中使用了UndertowServer,但是没有使用你给的打包格式和shell脚本。

发现一个很奇怪的问题:

PathKit.getRootClassPath() 在MyEclipse工程中,得到是 *****/classes目录

但是放到服务器上运行,打印出来的却是: *****/config 目录。

我项目中没有config目录呀?这个是怎么回事呢?

评论区

JFinal

2020-08-19 13:55

jfinal undertow 这个项目中,针对部署环境,会额外约定一个 config 目录为 classpath,注意看源码:
https://gitee.com/jfinal/jfinal-undertow/blob/master/src/main/java/com/jfinal/server/undertow/hotswap/ClassLoaderKit.java

其中的 addConfigClassPath(....) 方法就是干这事的,但注意源码中是检测过 config 目录是否存在才添加的

你能打印出来 config,应该是检测到了 config 目录

还要注意你的 undertow.resourcePath 配置,这个配置下面的第一个有效目也将影响 PathKit 中的值

夕阳老贼

2020-08-19 15:06

@JFinal 我项目中确实没有config目录。
我将 配置文件和classes文件放在了 bin 目录下,bin的同级目录下放的lib。
在bin目录下执行脚本启动Main方法。脚本内容: java -cp .:../lib/* com.XXXMain
然后在代码中使用 PathKit.getRootClassPath() 输出 classpath路径,
打印classpath路径是 ****/config目录 而不是 ****/bin目录
正确的classpath应该是 ****/bin 才对呀!

夕阳老贼

2020-08-19 15:07

@JFinal 我没有配置resourcePath

JFinal

2020-08-19 15:26

@夕阳老贼 脚本中的 cp 变量配置有问题,改一改

PathKit.getRootClassPath() 与 cp 变量配置有关

夕阳老贼

2020-08-19 15:55

@JFinal 我改成 java -cp ../bin/:../lib/* com.eystar.interfaces.main.InterfaceMain 但是还是错误的,具体要改成什么呢?

热门反馈

扫码入社