在非 Maven 项目的运行时,如何在 java 类路径上看到 类?
How can I see the classes on the java classpath at runtime in a non-maven project?
我有两个项目在 Eclipse 中声明的依赖项相同。一组单元测试有效,而另一组无效。我收到一个错误 No tests matching [*methodname*]
。一些谷歌搜索建议图书馆问题,但我无法确定这些可能被引入的位置。项目几乎相同,测试框架(junit、powermock、mockito)应该相同。在首选项中查看 java 构建路径 -> java 构建路径显示相同的引用。我怀疑 eclipse 菜单没有反映在运行时加载的实际 类。有没有办法在运行时回显类路径以便我可以扫描它以查找重复项?
更新:根本问题是我在类路径上有冲突的 junit 和 powermock 版本。我能够通过从 eclipse 构建路径配置面板中删除、重新添加和重新排序 jar 来解决这个问题。这非常乏味,下面接受的解决方案会显着减少解决时间。
此问题被标记为重复问题,但链接的文章特定于 Maven,并未解决在运行时查看类路径的根本问题。公认的解决方案对于 Maven 和非 Maven 项目都是可行的。
有几种方法可以在运行时调查实际的类路径:
运行 你的 JVM -verbose:class
。这将产生如下输出:
[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());
}
我有两个项目在 Eclipse 中声明的依赖项相同。一组单元测试有效,而另一组无效。我收到一个错误 No tests matching [*methodname*]
。一些谷歌搜索建议图书馆问题,但我无法确定这些可能被引入的位置。项目几乎相同,测试框架(junit、powermock、mockito)应该相同。在首选项中查看 java 构建路径 -> java 构建路径显示相同的引用。我怀疑 eclipse 菜单没有反映在运行时加载的实际 类。有没有办法在运行时回显类路径以便我可以扫描它以查找重复项?
更新:根本问题是我在类路径上有冲突的 junit 和 powermock 版本。我能够通过从 eclipse 构建路径配置面板中删除、重新添加和重新排序 jar 来解决这个问题。这非常乏味,下面接受的解决方案会显着减少解决时间。
此问题被标记为重复问题,但链接的文章特定于 Maven,并未解决在运行时查看类路径的根本问题。公认的解决方案对于 Maven 和非 Maven 项目都是可行的。
有几种方法可以在运行时调查实际的类路径:
运行 你的 JVM
-verbose:class
。这将产生如下输出:[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()); }