我的应用程序是由某个进程(control-m)启动的。它从一个我可以修改的 bash 脚本开始(该脚本由另一个进程调用)。
该应用程序正在使用错误版本的 spring 运行。问题是 - 我知道正在加载哪个 jar,但它不在类路径上!类路径在 bash 脚本中提供。我还通过执行验证了它:
ClassLoader cl = ClassLoader.getSystemClassLoader();
java.net.URL[] urls = ((URLClassLoader)cl).getURLs();
for(java.net.URL url: urls){
System.out.println(url.getFile());
}
但是仍然有一些罐子被装满了,这是不应该的。我在命令行中有 -verbose:class 。我怎样才能找出为什么我需要的类是从无效的 jar 中加载的?为什么这些 jars 甚至被加载?如何调试类加载过程?
当我从我的用户帐户运行脚本(而不是其他进程)时,一切都很好。