Android Studio上的Kotlin(非Android)项目的ClassNotFoundException错误
我试图用Android Studio 2.3.3创建一个正常的Kotlin项目(非Android,只是桌面/命令行项目)。
我按照这里列出的步骤执行,但是在这里我分享了不同的build.gradle
内容。
实际上,我用IntelliJ Community Edition(2017.2)生成一个新项目后,从build.gradle
文件中复制的build.gradle
内容。
然后,我创建一个配置,以便能够在桌面上运行它,正确设置如主类,工作目录和模块的类路径。 你可以在下面的图片中看到。
以下是我的项目文件结构
然后我同步该项目,它成功。 但是当我尝试运行该项目时出现错误。 我得到了以下错误。
"/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java" -Didea.launcher.port=7534 "-Didea.launcher.bin.path=/Applications/Android Studio.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/charsets.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/ext/localedata.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/ext/sunec.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/jce.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/jsse.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/management-agent.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/resources.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/rt.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/lib/dt.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/lib/jconsole.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/lib/sa-jdi.jar:/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/lib/tools.jar:/Users/haxpor/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar:/Users/haxpor/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jre7/1.1.4-2/272a21c30432c943d618008fbbd34762eb0d6c8a/kotlin-stdlib-jre7-1.1.4-2.jar:/Users/haxpor/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.1.4-2/fec983b2608a8a91a1b87dba18d247d692cf6b51/kotlin-stdlib-1.1.4-2.jar:/Users/haxpor/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jre8/1.1.4-2/168cc3f45c307edda6c867dd0635a7d451257551/kotlin-stdlib-jre8-1.1.4-2.jar:/Applications/Android Studio.app/Contents/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain io.wasin.testjavaapp.Main Exception in thread "main" java.lang.ClassNotFoundException: io.wasin.testjavaapp.Main at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:123) Process finished with exit code 1
我看到了上面提供的classpath参数/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
没有与我的项目相关的目录。 我不知道如何通过gradle添加classpath目录,尽管我已经在配置中进行了设置。
我该如何解决这个问题?
更新 :
以下是我的Main.kt
代码。 这只是为了测试目的。 所以只是打印出来。
package io.wasin.testjavaapp object Main { @JvmStatic fun main(arg: Array<String>) { println("Hello world") } }
此外,我更新了Kotlin版本的build.gradle
,以匹配Android Studio上的Kotlin插件版本。 现在是ext.kotlin_version = '1.1.4-2'
。 虽然仍然没有解决问题。
更新2
我在src
目录的同一级检查了build
目录。 在那里没有生成/构建的.class
或intermediates
文件,只有kotlin-build/caches/version.txt
,就是这样。 没有其他文件。 所以问题可能是由于源文件根本不编译?
更新3
我试图创建一个新的模块,看看它是否是根本原因。 还创建assets
文件夹只是作为工作目录,重新安排源文件夹如下。
我们现在有2个模块。
-
testJavaApp
– 根一个 -
desktop
– 由Main.kt
组成,用作桌面可执行文件
testJavaApp
对于testJavaApp
有以下代码
group 'io.wasin' version '1.0-SNAPSHOT' // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = '1.1.4-2' repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
还有desktop
模块具有以下代码build.gradle
apply plugin: 'kotlin' sourceSets.main.java.srcDirs = [ "src/" ] project.ext.mainClassName = "io.wasin.testjavaapp.Main" project.ext.assetsDir = new File("../assets"); dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } repositories { mavenCentral() } task run(dependsOn: classes, type: JavaExec) { main = project.mainClassName classpath = sourceSets.main.runtimeClasspath standardInput = System.in workingDir = project.assetsDir ignoreExitValue = true }
不幸的是,它仍然没有工作,这是同样的错误,显示出来。
更新4
@aristotll在评论中提供了一些信息,他用Android Studio进行了测试,但遇到了同样的问题,但IntelliJ 没有 。 他说这可能是Android Studio的bug。 所以我想,我会再尝试几次,然后决定是否足够坚实,以报告错误。 感谢您抽出时间来测试。
- 用新的kotlin 1.1构建错误,kapt不能解析数据绑定参数
- 错误:执行任务':app:javaPreCompileDebug'失败。 > java.io.IOException:无法删除annotationProcessors.json
- 在Android studio-Kotlin eroor中创建一个新项目
- 尝试使用Observable时获取Fata信号11
- Butterknife突然停止工作
- Kotlin:NoClassDefFoundError – Android Studio显示不应该在那里的类
- 创建XML文件时出现卡顿exception
- gradle插件3.0后,kotlin单元测试失败
- 如何在Android Studio 3.0.0中使用数据绑定和Kotlin