【问题标题】:How can we integrate maven and gradle projects in IntelliJ IDEA with source browsing support?我们如何将 IntelliJ IDEA 中的 maven 和 gradle 项目与源代码浏览支持集成?
【发布时间】:2020-10-21 08:50:59
【问题描述】:

我们有 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 项目上的确切源代码。

请注意以下几点:

  • Gradle 项目指的是 maven 项目的确切 SNAPSHOT
  • 使用 IntelliJ IDEA 2019.1.3(社区版)

【问题讨论】:

  • 在构建 JAR(现在在您的 maven 存储库中)时,您是否构建了源 JAR?当您看到反编译的 JAR 时,您是否还看到“附加源”选项?见:intellij-support.jetbrains.com/hc/en-us/community/posts/…
  • 当你说你可以在 IntelliJ 中打开 maven 和 Gradle 项目时,你的意思是作为单独的项目,还是作为同一个项目中的模块?因为如果您将它们作为模块包含在同一个项目中,IntelliJ 应该允许您从一个导航到另一个
  • @DariusX。感谢您指出,它来自源 jar,而不是反编译。源 .jar 也已部署到 Maven 本地存储库。我检查了编辑器中加载的类的路径,它具有以下语法。 <maven_local_repo_path>\<group_id_path>\<artifact_id>\<version>\<artifact_id>-<version>-sources.jar!\<package_id_path>\ClassName.java编辑器中显示的类是不可编辑的(比如我们浏览类时,多个maven项目之间的方法)
  • @afterburner 这两个 Maven 和 Gradle 项目也是复合/多模块项目。我尝试将它们添加为单独的项目(工具窗口>添加项目)以及来自现有源的模块(文件>新建>来自现有源的模块)。我什至尝试创建一个空项目并将两个项目添加为模块。但在所有场景中,浏览依赖 Maven 模块的类/方法会直接从本地 maven repo 中的 sources.jar 指向源,而不是从打开的 maven 项目中直接指向源。
  • 我假设您使用 Gradle 在 Intellij 中构建,而不是 Maven?那应该自动完成。这有帮助吗? stackoverflow.com/questions/23523573/…

标签: java maven gradle intellij-idea


【解决方案1】:

如果我们假设,

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

Maven 模块

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

Gradle 模块

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

this answer from intellijthis answer referred in the comments 中所述,模块和库依赖项的顺序 在集成中很重要。我们需要手动将所需的 maven 子模块添加到相应的 gradle-sub-module 中,并在从本地存储库解析相同的库依赖之前手动将其上移。

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

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

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

【讨论】:

    猜你喜欢
    • 2021-06-25
    • 2011-03-21
    • 2016-12-07
    • 2013-10-28
    • 1970-01-01
    • 2015-09-09
    • 2020-07-05
    • 2013-02-27
    • 2015-12-02
    相关资源
    最近更新 更多