![](/img/trans.png)
[英]How do you run a Gradle task after IntelliJ imports a project from Gradle?
[英]IntelliJ won't recognize some imports from gradle project
我正在 IntelliJ 中处理 Gradle 项目,但 IntelliJ 无法识别某些包。 当我转到 Project Structure -> Modules -> <my module>
-> Dependencies 时,包含这些包的 jar 文件就在那里。 (我已经用jar tfv <file>
检查了 jar 文件,以确保有问题的类在文件中。)
有问题的类是红色的,当将鼠标悬停在它们上面时,我收到诸如“无法解析符号‘somepackagename’”或“无法解析符号‘SomeClassName’”之类的错误。
但是,gradle 项目从命令行编译得很好。
我已经尝试了我能找到的所有现有建议,但到目前为止没有任何帮助。 首先,我已经尝试过:
我该怎么做才能让 IntelliJ 识别这些 jar 文件中的包?
我有同样的问题。 我的 IntelliJ 无法识别 build.gradle 中的某些依赖项。 我的猜测是它是一个缓存的东西。 所以我做了以下事情:
删除 gradle 缓存目录。
rm -rf ~/.gradle/caches
重新启动 IntelliJ 并刷新 gradle 依赖项。
这对我有用,似乎是一个简单的解决方案。
升级后,我刚刚在 Intellij Idea 2019.2.3 上遇到了同样的问题。 似乎文件 - >“使缓存无效并重新启动”操作解决了这个问题。
我之前尝试过的其他操作(重新导入 gradle 项目,删除 .idea/* 和.ipr/ .iml,重新启动 intellij)没有解决问题。
确保您确实在正确的位置包含了依赖项
对于 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。
简而言之,如果您有两个名称非常相似的源集,那么您就会混淆。
在尝试了有关此问题的所有不同建议后,似乎可行的是将无法识别的 jar 从我的本地 Gradle 缓存复制到我的项目中的文件夹中。 我还不得不告诉 Gradle 去那里看看。
总之,如果我像这样更改我的根项目 build.gradle:
allprojects {
repositories {
flatDir {
dirs 'lib'
}
}
... existing repos ...
}
和子项目的 build.gradle 像这样:
dependencies {
... existing dependencies ...
compile fileTree(dir: 'lib', include: '*.jar')
}
然后运行以下命令:
jars=($(find /Users/me/.gradle/caches/modules-2/files-2.1/unrecognizedorg/ -name '*.jar'))
for jar in "${jars[@]}" ; do
cp "$jar" ~/myproject/lib/
done
然后在 IntelliJ 中刷新 Gradle,文件被识别。
当然,然后我遇到了一个问题,即我不想在我的项目中提交一个带有 jar 的 lib 文件夹,但是有一些方法可以解决这个问题。 如果任何依赖项发生变化,保持这些文件夹是最新的也是一个问题。
我通过创建指向 Gradle 缓存目录的符号链接解决了这个问题:
ln -s /Users/me/.gradle/caches/modules-2/files-2.1/ lib
这样我就不必复制文件,任何更改都会自动获取。
在暂时删除所有变通方法以便我可以评估如何在不提交变通方法(构建脚本更改以及符号链接)的情况下使 IntelliJ 工作后,我发现它仍然有效(!)。 也就是说,它现在可以在 IntelliJ 中工作,没有从不工作的状态(由我)改变。
我得出的结论是,IntelliJ 的缓存可能已损坏,只有通过符号链接让它识别罐子才能修复。 虽然我没有尝试过,但删除 ~/.gradle/caches 和重新加载项目可能会产生相同的效果。
无论哪种方式,执行上述步骤然后撤消它们似乎都可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.