想象一下,我有两个带有Kotlin代码的基于Maven的项目,prjAprjB

prjA中的测试类SomeTest引用了prjB中定义的classfunction

class SomeTest {
    @Test
    fun prjACanReferencePrjBStuff() {
        val valRes = ValidationResult()
        val correctValRes = createCorrectValidationResult()
    }
}


当我


prjB中运行mvn clean install
更新IntelliJ Idea中prjA的依赖项并
prjA中运行mvn clean install


我收到错误-Maven找不到prjB中定义的类:

java - 为什么IntelliJ Idea无法从另一个Kotlin模块中找到Maven依赖关系?-LMLPHP

为什么?我该如何解决?

笔记:


Kotlin类默认为publicly visible。在mvn installprjB期间没有任何错误。
Maven存储库包含prjB工件,并且IntelliJ Idea引用了正确的Maven存储库。
当我尝试从命令行构建prjA时,构建成功。
使IntelliJ Idea缓存无效并重建项目无济于事。


更新1:我需要一个解决方案,它使我不仅可以在测试中使用prjB

更新2:如果我用Java的prjB重写Kotlin类,一切工作都很好。

最佳答案

如果需要prjB中的常规类,请将主要依赖项添加到prjA中。
如果需要prjB中的测试类,请将测试依赖项添加到prjA中。

要将主要依赖项添加到另一个模块:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>com.your.group</groupId>
      <artifactId>prjB</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>
  ...
</project>


要将测试依赖项添加到另一个模块:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>com.your.group</groupId>
      <artifactId>prjB</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>test-jar</type>
      <scope>test</scope>
    </dependency>
  </dependencies>
  ...
</project>


Here是有关测试依赖项的示例。

10-08 10:50