情况如下:
我有两个模块,模块KID取决于模块PARENT。我在PARENT中有一个测试类,可以在KID中使用它来测试类的实现。
为此,我添加了以下依赖项:
<dependency>
<groupId>myGroup</groupId>
<artifactId>PARENT</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
使用maven,测试运行良好。
使用Intellij(右键单击java测试文件夹+运行KID的"All tests"),我会得到一个NoClassDefFoundError。问题是,来自两个模块的测试都在运行,但它只使用了孩子的依赖项。
在项目PARENT中,我有一个在KID:中不需要的依赖项
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.8</version>
<scope>provided</scope>
</dependency>
将作用域设置为provided而不是test将解决我的问题,但它允许主代码使用测试代码。
我可能错过了什么?这是个bug?
我在那里得到了答案:http://youtrack.jetbrains.com/issue/IDEA-112978
这是因为运行配置是由模板创建的。该模板具有默认设置,可以跨模块依赖项选择类。
对132.46中的我来说,以下内容有所帮助:1.打开"运行配置"对话框的"默认值"部分。2.找到各自的模板。我试过JUnit。3."测试种类"组合框,选择All in package。4.设置"在单个模块中"。5.申请保存模板。
之后删除创建的配置并重复"运行所有测试"。它只为我从当前模块中挑选类
IDEA中可能的改进是专门为基于Maven的项目修改这些默认值。相当具体的变化。。。