我有如下设置:
我有两个模块: 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
且没有任何问题:
但是,当我尝试构建项目时,此错误阻止IntelliJ完成构建:
我在SO中遇到了类似的问题:
但是,所有提议的解决方案都无法帮助我解决这个问题。我创建了here as zip和in GitHub可用的MVCE。
我正在工作的现实世界项目是neo4j,它遵循以下结构。而且,使用mvn install/package
进行的编译没有任何问题,在IntelliJ中工作时会出现问题。
答案 0 :(得分:1)
通常,首先通过使用mvn clean package
在IntelliJ外部构建新项目来“打开”新项目,然后仅通过“打开”父模块将其导入即可。这对我有用:
甚至在重建后:
如果您不想通过删除所有IDEA文件夹和文件并使用上述方法来重新导入项目,则可以尝试通过Maven工具栏(清理并打包在父模块上)来构建项目,然后使用“重新导入所有Maven项目”按钮:
至少有时这对我有用,但老实说并非总是如此。
答案 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
下。