测试包中的类在IntelliJ编译时不可用

时间:2018-07-26 06:55:25

标签: java maven testing intellij-idea

我有如下设置:

IntelliJ setup

我有两个模块: modulea moduleb ,在这种情况下, moduleb 依赖于 modulea 定义为:

<dependency>
    <groupId>org.example</groupId>
    <artifactId>module-a</artifactId>
    <version>1.0-SNAPSHOT</version>
    <type>test-jar</type>
</dependency>  

这使我在开发时可以在ClassInTestA中使用ClassInSourceB且没有任何问题:

Using class in test folder in the source folder of another project

但是,当我尝试构建项目时,此错误阻止IntelliJ完成构建:

Compilation error

我在SO中遇到了类似的问题:

但是,所有提议的解决方案都无法帮助我解决这个问题。我创建了here as zipin GitHub可用的MVCE。

我正在工作的现实世界项目是neo4j,它遵循以下结构。而且,使用mvn install/package进行的编译没有任何问题,在IntelliJ中工作时会出现问题。

3 个答案:

答案 0 :(得分:1)

通常,首先通过使用mvn clean package在IntelliJ外部构建新项目来“打开”新项目,然后仅通过“打开”父模块将其导入即可。这对我有用:

enter image description here

甚至在重建后:

enter image description here

如果您不想通过删除所有IDEA文件夹和文件并使用上述方法来重新导入项目,则可以尝试通过Maven工具栏(清理并打包在父模块上)来构建项目,然后使用“重新导入所有Maven项目”按钮:

enter image description here

至少有时这对我有用,但老实说并非总是如此。

答案 1 :(得分:1)

测试类未包含在最终工件中。要共享测试类,您必须使用maven-jar-plugin中的jar modulea

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <executions>
            <execution>
                <goals>
                    <goal>test-jar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

并在moduleb的{​​{1}}中添加依赖项:

pom.xml

答案 2 :(得分:0)

在编译阶段不包含测试源

请参见Apache Maven Compiler Plugin

  

compiler:compile绑定到编译阶段,用于编译   主要的源文件。

我认为主要来源不应该依赖测试来源。测试源仅用于测试主要源。您可以将ClassInTestA放在module-a/src/main/java下。