首页 > 解决方案 > 我们如何将 IntelliJ IDEA 中的 maven 和 gradle 项目与源代码浏览支持集成?

问题描述

我们有 2 个使用 Gradle 和 maven 构建的 java 多模块(复合)项目(位于 2 个存储库中)。Gradle 项目依赖于 maven 项目,我们需要从 maven 项目中获取反映在 Gradle 项目中的更改。Gradle 项目是指通过本地 maven repo 使用 repositories > mavenLocal > 内容过滤的 maven 项目。(尽管 Gradle 不鼓励引用 mavenLocal,但我们在这里没有更好的选择)

repositories {
  mavenLocal {
     content {
        includeGroupByRegex "REGEX"
     }
  }
  maven {
     url "REPO_URL"
  }        
}

当我们通过命令执行 Gradle 构建时,maven 项目的更改会反映在 gradle 项目中。

我们也可以在 IntelliJ IDEA 中打开 maven 和 Gradle 项目。但是在浏览源代码时(假设 Gradle 项目实现了 Gradle 项目的接口,当我们点击 Gradle 项目的已实现类声明中的接口时)它指向本地 maven repo 中源 jar 中的类。有没有一种方法可以将 IDEA 配置为指向已经导入 IDE 的 maven 项目上的确切源。

请注意以下事项:

标签: javamavengradleintellij-idea

解决方案


如果我们假设,

  • 源 .jars 也已部署到 maven 本地存储库(来自 maven 项目)和
  • 在此上下文中,项目设置 > 模块如下所示

Maven 模块

  • 模块:maven-project-parent
  • 模块:maven-sub-module-api
  • 模块:maven-sub-module-impl

摇篮模块

  • 模块:gradle-project-parent
  • 模块:gradle-sub-module-api
  • 模块:gradle-sub-module-impl

正如intellij这个答案和评论中提到的这个答案所述,模块和库依赖关系的顺序在集成中很重要。我们需要手动将所需的 maven 子模块添加到相应的 gradle-sub-module 中,并在从本地存储库解析相同的库依赖项之前手动将其上移。

模块:gradle-project-parent > 模块:gradle-sub-module-impl > main > 依赖项

  1. 模块:maven-sub-module-api
  2. 库:maven-sub-module-api(来自本地仓库的依赖)

然后,您将能够按预期从 gradle 项目链接导航到 maven 项目源。


推荐阅读