IDEA功能極其強大,和微軟的宇宙第一IDE不相上下。用了很長時間,對它配置的完善性產生了近乎迷信的感情。似乎只要走正常渠道,用它來配置,沒有不成功的。
IDEA是開發android原生程序的利器,android studio即是基於IDEA開發的工具。AndroidStudio能干的,IDEA同樣能干的很好。kotlin是jetbrain開發的語言,堪稱android上的swift,而且完美兼容java,配合起來相當爽利。但偏偏在kotlin的配置上,栽了個大跟頭。
在android里引入kotlin很簡單。先建立一個android project,然后直接建立kotlin activity即可。IDEA會很貼心的提醒你引入kotlin,並且自動修改build.gradle。一切都很好。然后,問題就來了,編譯的時候報錯了。
Error:Gradle: A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_debugApkCopy'.
> Could not find org.jetbrains.kotlin:kotlin-stdlib-jre7:1.0.7.
Required by:
KotAnd:app:unspecified
好吧,google半天,似是而非的谷歌到了,說找不到1.0.7的這個jar包,可能是版本問題。升到最新版1.1.1就好了。
改完重新導入,又報錯了。
Error:Gradle: Execution failed for task ':app:compileDebugKotlin'.
> Compilation error. See log for more details
好吧,我傻眼了。讓我看log我就去看log吧。log里一堆的報錯。主要影響的貌似是這條信息。
java.io.FileNotFoundException: C:\Users\musarona\.IntelliJIdea2017.1\system\compile-server\kotand_2f6a3daa\gradle\configuration.xml (系統找不到指定的路徑。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at com.intellij.openapi.util.JDOMUtil.load(JDOMUtil.java:304)
at org.jetbrains.jps.gradle.model.impl.JpsGradleExtensionServiceImpl.getGradleProjectConfiguration(JpsGradleExtensionServiceImpl.java:125)
at org.jetbrains.jps.gradle.model.impl.JpsGradleExtensionServiceImpl.getGradleProjectConfiguration(JpsGradleExtensionServiceImpl.java:113)
at org.jetbrains.jps.gradle.model.impl.GradleResourcesTarget.computeRootDescriptors(GradleResourcesTarget.java:69)
at org.jetbrains.jps.builders.impl.BuildRootIndexImpl.addRoots(BuildRootIndexImpl.java:72)
at org.jetbrains.jps.builders.impl.BuildRootIndexImpl.<init>(BuildRootIndexImpl.java:62)
at org.jetbrains.jps.cmdline.BuildRunner.load(BuildRunner.java:84)
at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:267)
at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:125)
at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:236)
at org.jetbrains.jps.service.impl.SharedThreadPoolImpl.lambda$executeOnPooledThread$0(SharedThreadPoolImpl.java:42)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
什么意思嘛,gradle找不到配置文件的路勁。難道是gradle沒全局翻牆,有些文件下載速度慢的問題。好吧,開全局翻牆,換了幾個地址。還是一樣的報錯。
難道1.1.1有問題?好吧,換1.1.0等幾個版本一樣的不行。
難道是maven的repo太慢?換上aliyun的repo,還是一樣的。
查問題查到我想死,最后查到了一條信息,貌似IDEA在添加kotlin的時候,有些配置項沒有添加進去。這怎么可能?這怎么可以!結果還真就是這樣,問題就出在IDEA添加kotlin的時候的修改配置上。這種問題你讓我怎么去預防啊。
總共要修改的地方有兩處,一處是整個工程的build.gradle。
buildscript {
ext.kotlin_version = '1.1.1'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
//下面這一行是應該添加的配置
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
另一處是module里的build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
//下面是需要手工添加的plugin
apply plugin: 'kotlin-android-extensions'
作為一個這么強大的工具,kotlin又是jetbrain自主研發的語言,搞出這樣的問題,真讓人想不到。必須記下來,時間又被謀殺了。