【问题标题】:IntelliJ with gradle gives inconsistency in compilationIntelliJ with gradle 导致编译不一致
【发布时间】:2019-08-06 21:51:54
【问题描述】:

我正在使用带有 gradle 的 IntelliJ IDEA Ultimate 编写 Minecraft 插件。我已将依赖项 org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT 添加为 compileOnly。在开发过程中,我注意到 gradle 编译我的代码的方式与 IntelliJ 不同。例如,IntelliJ 在Boat 上无法接受addPassenger,但 gradle 编译了它。反之,如果我改成setPassenger,IntelliJ并没有将其标记为错误,而是gradle编译失败。我试图使缓存无效,重新导入,清理,甚至删除%userprofile%\.gradle 目录,但没有任何帮助。作为 POC,我将 compileOnly 更改为 compile 并且效果很好,IntelliJ 和 gradle 编译结果是一致的。是什么原因?

【问题讨论】:

  • 您是否启用了i.imgur.com/AmWjMZR.png 选项?如果 Gradle 和 IDE 中的依赖关系不同,请在youtrack.jetbrains.com/issues/IDEA 提交错误并附上示例项目以重现它。
  • @CrazyCoder 我在你的截图中启用了这样的选项。我在哪里可以检查 IDE 依赖项?当我执行 gradle dependencies 时出现 Gradle 的
  • 确保代码库 IDEA 和 Gradle 代码库实际上是相同的。例如,在 Eclipse 中,有一个 gradle 文件夹,Eclipse 需要更新 buildship,否则 Gradle 任务将使用过时的代码库,即使调用 gradlew 将编译更新的代码库。我不记得 Gradle 集成在 IDEA 中是如何工作的,但请确保 100% 确定您实际上在同一个代码库中。

标签: java gradle intellij-idea compilation consistency


【解决方案1】:

好的,我找到了解决方案(忘记了这个问题)。

我一直在使用多个依赖项,其中一个使用我在build.gradle 中隐式加载的旧版本加载另一个。但是,它们并不是完全相同的依赖项,而是并行的依赖项。因此 gradle 无法选择一个依赖项的更高版本。解决方案是排除这个显式加载的依赖项,一切正常。

之前:

dependencies {
    compileOnly 'com.sk89q.worldedit:worldedit-bukkit:7.0.1'
    compileOnly group: 'org.spigotmc', name:'spigot-api', version: '1.15.1-R0.1-SNAPSHOT'
}

之后:

dependencies {
    compileOnly('com.sk89q.worldedit:worldedit-bukkit:7.0.1') {
        exclude `org.bukkit:bukkit:1.15.1-R0.1-SNAPSHOT`
    }
    compileOnly group: 'org.spigotmc', name:'spigot-api', version: '1.15.1-R0.1-SNAPSHOT'
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2016-02-17
    • 2021-12-23
    • 2016-05-05
    相关资源
    最近更新 更多