Java 为什么不在类路径中加载类?

Java 为什么不在类路径中加载类?,java,jar,classpath,classloader,Java,Jar,Classpath,Classloader,我的应用程序是由某个进程启动的(control-m)。它是从我可以修改的bash脚本开始的(该脚本由另一个进程调用) 应用程序正在使用错误版本的spring运行。问题是-我知道正在加载哪个jar,但它不在类路径上!bash脚本中提供了类路径。我还通过执行以下命令对其进行了验证: ClassLoader cl = ClassLoader.getSystemClassLoader(); java.net.URL[] urls = ((URLClassLoader)cl).getURLs(); for

我的应用程序是由某个进程启动的(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,它的权限设置方式是普通用户无法访问它,但control-m可以。当从我的帐户运行时,它忽略了这个罐子,一切正常


但是当control-m运行时,它正在加载那个jar,它在清单中还有“Class Path”条目,这改变了类的加载过程。

环境中可能有诸如CLASSPATH环境变量之类的东西吗?还要确保使用相同的JVM。