【问题标题】:IntelliJ won't import modules from gradle composite buildsIntelliJ 不会从 gradle 复合构建中导入模块
【发布时间】:2020-06-09 23:54:50
【问题描述】:

更新:不仅是 IntelliJ 有问题,而且原因似乎是因为我的设置无法在 Gradle 中构建。仍然不确定为什么。

我正在尝试设置 intellij 以识别复合 gradle 构建。我有依赖于项目 B 的项目 A,如下所示:

/p/projecta
/p/projectb

我尝试了很多东西,但 IntelliJ 在我尝试从 project-a 访问的 project-b 中找不到任何声明。例如,在下面的 ProjectA.java 中,IntelliJ 将 Project B 的导入标记为 Cannot resolve symbol ProjectB

// projecta/src/main/java/projecta/ProjectA.java
import projectb.ProjectB; // 'Cannot resolve symbol ProjectB'
// projectb/src/main/java/projectb/ProjectB.java
public class ProjectB {
}
// projecta/settings.gradle
rootProject.name = 'projecta'
includeBuild '../projectb'
// projectb/settings.gradle
rootProject.name = 'projectb'

尽管进行了上述配置,但它不起作用。 IntelliJ 继续将项目 B 中的所有符号标记为不可解析。

我尝试过的其他事情

  1. 从 settings.gradle 中删除 includeBuild,然后右键单击项目 A 的 gradle 窗口,转到“复合构建配置”并从那里添加项目 B。同样的问题。
  2. 将此代码添加到项目 A 中的 build.gradle 中
tasks.register('run') {
    dependsOn gradle.includedBuild('projectb').task(':run')
}
  1. 将项目 B 放入磁盘上的项目 A 中:/p/projecta/projectb 然后将 projecta/settings.gradle 中的 includeBuild 更改为 includeBuild 'projectb'
  2. #2 的许多变体试图让 IntelliJ 识别 gradle 依赖项。

【问题讨论】:

  • 你可以通过 Gradle 从命令行构建吗?如果一个项目使用另一个项目作为依赖项 - 您必须在 build.gradle 文件中对其进行配置:docs.gradle.org/current/userguide/…
  • 不,它不会从命令行构建,与 intellij 给出的错误相同
  • /p/projecta/src/main/java/projecta/ProjectA.java:2: 错误:包projectb不存在import project.ProjectB;

标签: gradle intellij-idea


【解决方案1】:

我最近遇到了这个问题并想通了,所以我想在这里做出回应,以便其他人可以从我在参数丛林和反复试验中的觅食中受益。

我设置了与问题中描述的完全相同的项目。使用 Gradle 5.0,Intellij 能够正确导入和链接我的源代码,并且我能够在命令行上正确构建。当我将 Gradle 版本提升到 5.6 或更高版本时,Intellij 不再能够正确链接源。重新导入我的项目实际上会起作用,但代表包含构建的依赖项将突出显示为红色,并且控制台会说它无法解决它。 5.6 之后的每个 Gradle 版本都会发生这种情况。

似乎根本原因是 Intellij 将 Java 11 用于 Gradle,而我将 sourceCompatibility 设置为 10。看起来这会破坏最新版本的 Gradle(可以理解)。

我还可以通过将以下内容添加到我的项目的 build.gradle 来解决此问题

java {
    disableAutoTargetJvm()
}

但是,我刚刚将 Intellij 中 Gradle 的 JDK 更新为 Java 10,一切正常......

【讨论】:

    【解决方案2】:

    我的问题就像 @Troy 一样,必须通过将其添加到 build.gradle.kts 来使所有项目在同一个 JDK 下工作:

    java {
        toolchain {
            languageVersion.set(JavaLanguageVersion.of(8))
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多