the*_*s42 3 java eclipse junit classpath classloader
我在 Eclipse 中有两个具有相同声明依赖项的项目。一组单元测试有效,另一组无效。我收到一个错误No tests matching [*methodname*]。一些谷歌搜索表明库问题,但我无法确定可以在哪里引入这些问题。项目几乎相同,测试框架(junit、powermock、mockito)应该相同。在首选项中查看 java 构建路径 -> java 构建路径显示相同的引用。我怀疑 eclipse 菜单没有反映在运行时加载的实际类。有没有办法在运行时回显类路径,以便我可以扫描它以查找重复项?
更新:潜在的问题是我在类路径上有 junit 和 powermock 的版本冲突。我能够通过从 eclipse 构建路径配置面板中删除、重新添加和重新排序 jar 来解决这个问题。这是非常乏味的,下面接受的解决方案会显着减少解决时间。
这个问题被标记为重复,但链接的文章特定于 maven,并没有解决在运行时看到类路径的潜在问题。公认的解决方案适用于 maven 和非 maven 项目。
gly*_*ing 11
有几种方法可以在运行时调查实际的类路径:
使用-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]
Run Code Online (Sandbox Code Playgroud)在 JVM 中运行以下代码:
ClassLoader classloader = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader) classloader).getURLs();
for (URL url : urls) {
System.out.println(url.getFile());
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
2666 次 |
| 最近记录: |