如何在非maven项目中在运行时查看java类路径上的类?

时间:2017-09-06 19:41:05

标签: java eclipse junit classpath classloader

我在eclipse中有两个具有相同声明依赖项的项目。一组单元测试工作,另一组不工作。我收到错误No tests matching [*methodname*]。一些谷歌搜索表明库存问题,但我无法确定哪些可以引入。项目几乎相同,测试框架(junit,powermock,mockito)应该是相同的。在首选项中查看java构建路径 - > java构建路径显示相同的引用。我怀疑eclipse菜单没有反映在运行时加载的实际类。有没有办法在运行时回显类路径,以便我可以扫描它重复?

更新:根本问题是我在类路径上有junit和powermock的冲突版本。我能够通过从eclipse构建路径配置面板中删除,重新添加和重新排序jar来解决这个问题。这非常繁琐,下面接受的解决方案会大大缩短解决时间。

这个问题被标记为重复,但链接的文章特定于maven,并没有解决在运行时看到类路径的根本问题。已接受的解决方案对于maven和非maven项目是可行的。

1 个答案:

答案 0 :(得分:1)

有几种方法可以在运行时调查实际的类路径:

  • 使用-verbose:class运行您的JVM。这将产生如下输出:

    [Loaded java.lang.Object from /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/rt.jar]
    [Loaded java.io.Serializable from /Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/jre/lib/rt.jar]
    
  • 在JVM中运行以下代码:

    ClassLoader classloader = ClassLoader.getSystemClassLoader();
    
    URL[] urls = ((URLClassLoader) classloader).getURLs();
    
    for (URL url : urls) {
        System.out.println(url.getFile());
    }