IntelliJ 无法识别来自 gradle 项目的某些导入

Posted

技术标签:

【中文标题】IntelliJ 无法识别来自 gradle 项目的某些导入【英文标题】:IntelliJ won't recognize some imports from gradle project 【发布时间】:2019-04-17 21:45:18 【问题描述】:

我正在 IntelliJ 中处理 Gradle 项目,但 IntelliJ 无法识别某些包。当我转到项目结构 -> 模块 -> <my module> -> 依赖项时,包含这些包的 jar 文件就在那里。 (我已经使用jar tfv <file> 检查了 jar 文件,以确保有问题的类在文件中。)

有问题的类是红色的,当我将鼠标悬停在它们上面时,我会收到诸如“无法解析符号 'somepackagename'”或“无法解析符号 'SomeClassName'”之类的错误。

但是,gradle 项目从命令行编译得很好。

我已经尝试了所有我能找到的现有建议,但到目前为止没有任何帮助。首先,我已经尝试过:

删除 .idea 文件夹并重新导入 从根 build.gradle 文件重新导入项目 点击“刷新所有 gradle 项目”按钮 升级 IntelliJ 点击“使缓存失效并重新启动”

如何让 IntelliJ 识别这些 jar 文件中的包?

【问题讨论】:

请在youtrack.jetbrains.com/issues/IDEA报告并附上要复制的示例项目。 @CrazyCoder 如果我能得到一个示例项目,我会这样做,但我希望这可能是一个足够常见的问题,有人(比如你自己)可能能够在这里为其他人回答查看。我看到您的最佳答案是关于一个非常相似的问题:***.com/questions/5905896/…您是否建议采取任何其他步骤来排除这是一个错误? 由于您已经尝试了所有常见的解决方案,但它们都不起作用,您的问题可能有所不同,并且不是可以仅从描述中立即回答的常见问题。 @CrazyCoder 够公平的。由于我是一名 gradle 和 IntelliJ 新手,我想也许我只是遗漏了一些明显的东西,但即使是这样,你说得对,它可能特定于我的情况。我会尝试在现场报告。 @CrazyCoder 我在下面想出了一个解决方法,我真的很惊讶。详情如下。我现在告诉 Gradle 将 Gradle 缓存目录中的所有文件视为编译依赖项,然后它会选择以前不会的 jar,即使它会自动在同一个 Gradle 缓存中查找其他 jar。您对以下解决方法为何可行以及可能有哪些更清洁的解决方案有任何想法? 【参考方案1】:

您可能启用了***,这可能会导致Gradle 停止导入依赖项。

这发生在我的 *** 连接打开并且我无法导入依赖项的地方。

如果您遇到除了此处描述的解决方案之外的问题,也请检查此项。

另外,检查代理设置。代理可能会导致我们很好的导入问题。尝试禁用代理并检查。

【讨论】:

【参考方案2】:

我在多项目 Gradle 构建中也遇到过这个问题,它仍然可以用最新的(在撰写本文时)IntellijIDEA 2020.3.2 重现。这看起来像是某种内部缓存问题,因为即使 IDEA 抱怨它无法识别可以成功执行构建的类。

最初我通过使缓存无效并重新启动 IDEA 来修复它,正如这里所建议的那样,但后来发现如果我在 Gradle 工具窗口中重新加载项目,它就会消失:

对我来说,它每次都有效。

【讨论】:

也解决了我的问题。【参考方案3】:

确保您确实将依赖项包含在正确的位置

对于一个 kotlin 示例,在我的 build.gradle.kts 中,我有多个如下所示的源集:

sourceSets
val jvmTest by getting 
            dependencies 
                implementation(kotlin("test-junit"))
            
        
        val jsMain by getting 
            dependencies 
                implementation("khttp:khttp:1.0.0")
            
        

jsMain 将无法访问 junit,jvmTest 将无法访问 khttp。

简而言之,如果您有两个名称非常相似的源集,那么您就是在要求混淆。

【讨论】:

【参考方案4】:

我遇到了同样的问题。我的 IntelliJ 无法识别 build.gradle 中的某些依赖项。我的猜测是它是一个缓存的东西。所以我做了以下事情:

    删除 gradle 缓存目录。

    rm -rf ~/.gradle/caches
    

    重启 IntelliJ 并刷新 gradle 依赖项。

这对我有用,似乎是一个简单的解决方案。

【讨论】:

不错!我去了File -> Invalidate Caches/Restart 成功了。【参考方案5】:

我刚刚在升级后遇到了与 Intellij Idea 2019.2.3 相同的问题。似乎文件 - >“使缓存无效并重新启动”操作解决了问题。

我之前尝试的其他操作(重新导入 gradle 项目、删除 .idea/* 和 .ipr/.iml、重新启动 intellij)没有解决问题。

【讨论】:

如果 IntelliJ 自动完成功能遇到困难,这对我有用。 glhf【参考方案6】:

就我而言,

    现有依赖库删除 gradle 刷新!

参考链接:https://youtu.be/0rLZK6hIpm0

【讨论】:

以上是关于IntelliJ 无法识别来自 gradle 项目的某些导入的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 AutoValue 和 IntelliJ 解析符号

如何为代码生成配置 Gradle,以便 IntelliJ 识别生成的 java 源?

IntelliJ 无法识别 Kotlin JPA 插件

IntelliJ 中的 Gradle Spring Boot 应用程序无法识别 WEB-INF 文件夹中的 Web 资源

无法在 intellij idea 中使用 gradle 构建 javafx 项目

IntelliJ IDEA 中带有 Gradle 的 Java 项目:无法解析符号“google”但项目编译