理念。在另一个模块中导入模块

时间:2014-07-13 18:45:18

标签: unit-testing maven dependency-management

我有一个多模块项目,不幸的是,来自一个模块的测试取决于另一个模块中的测试,如下所示:

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中将所有库中的一个模块导入另一个模块?

1 个答案:

答案 0 :(得分:0)

与maven和IntelliJ相比,这里的问题是eclipse,对你的项目构建过于宽容。 Eclipse会为自己解决问题,为了帮助你,它甚至可以解决你在POM中没有告诉它的事情。 IntelliJ尝试按原样使用POM,并且不会再猜测它。你可以自己解决哪种方法最终会更有帮助。就个人而言,我想要便携式构建,所以我更喜欢IntelliJ方法。

在这种情况下,您应该将模块A中的测试作为单独的测试jar导出,并让模块B依赖于测试依赖项。我不会在这里详细说明如何实现这一点,因为它在this question中有详细记录。

您的最后一个问题是一个单独的问题,应该更详细地放在一个单独的问题中。您可能正在寻找POM导入,或如何使用Shade插件。

最后,我在开发过程中最初避免使用test以外的范围。使用provided可能会遇到很多麻烦,因为它不仅意味着您的容器提供了库,而且还意味着您不接受传递依赖性 - 这两种情况都会导致意外的副作用。 / p>