我有一个多模块项目,不幸的是,来自一个模块的测试取决于另一个模块中的测试,如下所示:
Module A
public class TestA {...}
public class SomeClassA {...}
Module B
public class TestB extends TestA {
private SomeClassA instanceOfA;
.....
}
模块的B pom.xml中存在依赖关系:
<dependency>
<groupId>id</groupId>
<artifactId>module_A</artifactId>
<type>jar</type>
<scope>provided</scope>
</dependency>
如果我打开项目设置(ctrl + alt + shift + s),模块B依赖项选项卡中有模块A(如果重要的话,它有范围编译)。 所以看起来我有有效的依赖关系,但是当我尝试运行我的测试时会发生多个错误,据我所知主要是以下内容:
TestB类型的层次结构不一致。
其他2个错误与构造函数有关,很可能它们是层次结构混乱的结果。
如果我在模块B中导出模块A并使用指向模块B的类路径运行我的测试并选中«添加导出的...»和«添加所需的...»。
,那么相同的测试完全可以从eclipse运行。是否可以在IDEA中将所有库中的一个模块导入另一个模块?
答案 0 :(得分:0)
与maven和IntelliJ相比,这里的问题是eclipse,对你的项目构建过于宽容。 Eclipse会为自己解决问题,为了帮助你,它甚至可以解决你在POM中没有告诉它的事情。 IntelliJ尝试按原样使用POM,并且不会再猜测它。你可以自己解决哪种方法最终会更有帮助。就个人而言,我想要便携式构建,所以我更喜欢IntelliJ方法。
在这种情况下,您应该将模块A中的测试作为单独的测试jar导出,并让模块B依赖于测试依赖项。我不会在这里详细说明如何实现这一点,因为它在this question中有详细记录。
您的最后一个问题是一个单独的问题,应该更详细地放在一个单独的问题中。您可能正在寻找POM导入,或如何使用Shade插件。
最后,我在开发过程中最初避免使用test
以外的范围。使用provided
可能会遇到很多麻烦,因为它不仅意味着您的容器提供了库,而且还意味着您不接受传递依赖性 - 这两种情况都会导致意外的副作用。 / p>