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:Usersmusarona.IntelliJIdea2017.1systemcompile-serverkotand_2f6a3daagradleconfiguration.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没全局FQ,有些文件下载速度慢的问题。好吧,开全局FQ,换了几个地址。还是一样的报错。
难道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自主研发的语言,搞出这样的问题,真让人想不到。必须记下来,时间又被谋杀了。