![](/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.