java - 为什么类不在类路径中时会被加载?

标签 java jar classpath classloader

我的应用程序是由某个进程(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());
}

但是仍然有一些不应该装的 jar 被装了。我在命令行中有 -verbose:class 。我如何找出为什么我需要的类是从无效的 jar 加载的?为什么要加载这些 jar ?如何调试类加载过程?

当我从我的用户帐户运行脚本(而不是其他进程)时,一切都很好。

最佳答案

我已经找到原因了。类路径上有一个 jar,其权限设置为普通用户无权访问它,但 control-m 可以。当从我的帐户运行时,它忽略这个 jar 并且一切正常。

但是当由 control-m 运行时,它正在加载该 jar,该 jar 在 list 中另外有“Class-Path”条目,并且正在改变类加载过程。

关于java - 为什么类不在类路径中时会被加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15122210/

相关文章:

java - Squirrel SQL 在哪里存储其自动更正条目?

java - 用 Java 广播 UDP 数据包的正确方法是什么?

java - Singleton.START 上的 Arquillian : Getting WFLYEE0117: Field field cannot be set,

java - javac 足以构建 OSGi 包吗?

java - 如何使用 IntelliJ 在特定于环境的运行时配置之间轻松切换?

java - 用于查找包中所有类的反射库

java - 如何使用 Java API 添加 SCRAM-SHA-512 kafka 配置?

java - 使用 gradle 生成一个链接 LibGDX 项目 Assets 的 JAR 文件

java - maven不将lib打包到jar中

java - 排除包含在 Shaded Jar 中的类