我有3个不同的groupIds / ArtifactIDs的maven项目。项目A依赖于项目B和C.我正在使用maven-failsafe-plugin以便在构建期间从A运行B和C的集成测试:
(在项目A中):
<dependency>
<groupId>com.group.b</groupId>
<artifactId>artifactB</artifactId>
</dependency>
<dependency>
<groupId>com.group.c</groupId>
<artifactId>artifactC</artifactId>
</dependency>
但出于某种原因,当我在Project C中运行这一行时 -
URL path = ThisClass.class.getResource("/someResource");
它给了我项目B的jar位置,就像classloader在projectB
中一样 B和C都有一个名为/someResource
的资源目录,这就是它失败的原因。当我执行相同的调用但是只存在于C中的资源时,那么类加载器是正确的:
(用C项目编写的代码)
URL path1 = SomeClass.class.getResource("/directory1");
System.out.println(pathA.getPath()); // .m2/../ProjectB.jar!/directory1
URL path2 = SomeClass.class.getResource("/directory2");
System.out.println(pathB.getPath()); // .m2/../ProjectC.jar!/directory2
由于directory1存在于B和C中,所以A给了我B的类加载器(第一个依赖),当它的目录只存在于C中时,然后我得到了正确的类加载器< / p>
如果我将依赖注释到B,那么一切都很好。
我还将<useSystemClassLoader>false</useSystemClassLoader>
添加到maven-failsafe并且没有帮助
我也试过了<useManifestOnlyJar>false</useManifestOnlyJar>
并没有改变任何东西
如果有人建议如何在外部运行测试罐(jenkins,maven,无所谓)而不让他们的类加载器混淆