Java android Studio上Kotlin(非android)项目的ClassNotFoundException错误

Java android Studio上Kotlin(非android)项目的ClassNotFoundException错误,java,android-studio,gradle,kotlin,Java,Android Studio,Gradle,Kotlin,我试图用AndroidStudio 2.3.3创建一个普通的Kotlin项目(非android,只是桌面/命令行项目) 我按照规定的步骤进行操作,但使用了不同的build.gradle内容,我共享了这些内容 实际上,build.gradle的内容是我用IntelliJ社区版(2017.2)生成新项目后从build.gradle文件复制的 然后我创建一个配置,以便能够在桌面上运行它,并进行适当的设置,如主类、工作目录和使用模块的类路径。您可以在下图中看到 下面是我的项目文件结构 然后我同步项目

我试图用AndroidStudio 2.3.3创建一个普通的Kotlin项目(非android,只是桌面/命令行项目)

我按照规定的步骤进行操作,但使用了不同的
build.gradle
内容,我共享了这些内容

实际上,
build.gradle
的内容是我用IntelliJ社区版(2017.2)生成新项目后从
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
我看到了上面
/Applications/Android Studio中提供的classpath参数。app/Contents/jre/jdk/Contents/Home/bin/java
与我的项目没有相关的目录。我不知道如何通过gradle添加类路径目录,尽管我已经在配置中设置了它

我怎样才能解决这个问题

更新

下面是我的
Main.kt
代码。这只是为了测试的目的。所以只是打印一些东西

package io.wasin.testjavaapp

object Main {
    @JvmStatic fun main(arg: Array<String>) {
        println("Hello world")
    }
}
另外,
desktop
模块有以下代码用于
build.gradle

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
}
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


@Aristtl在一篇评论中提供了信息,他在Android Studio中进行了测试,遇到了同样的问题,但在IntelliJ中没有。他说可能是安卓工作室的bug。所以我想,我会再尝试几次,然后决定它是否足够可靠,可以报告为bug。感谢您抽出时间进行测试。

我也遇到了这个问题并解决了它

在build.gradle中添加
runtimeClasspath文件(“build/classes/kotlin/main”)

dependencies {
    // This dependency is found on compile classpath of this component and consumers.
    compile 'com.google.guava:guava:23.0'

    // Use JUnit test framework
    testCompile 'junit:junit:4.12'
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    compile group: 'dom4j', name: 'dom4j', version: '1.6.1'
    runtimeClasspath files("build/classes/kotlin/main")
}

因为Android Studio在
build/classes/kotlin/main
中找不到类。添加
runtimeClasspath
就可以了

不确定这是否是它,但您将错误的目录标记为Java源代码。注意屏幕截图中的蓝色“src”目录。两级以下的java目录应该是您的java源代码。这可以在项目设置中进行编辑,或者右键单击src目录并将其取消标记为源,然后对java目录重复。谢谢。我像你说的那样试过了,还是一样。我尝试将保存
Main.kt
文件的目录标记为源根目录,然后再次运行,但仍然没有修复。还尝试创建
src/main/java
目录,然后将其标记为源根目录,但仍然没有修复。两者都会产生相同的错误。可能这不是配置的问题,而是AndroidStudio的问题。我在AndroidStudio中重现了您的错误,但当将同一项目导入Intellij idea时,应用程序会正常运行。@Aristtl感谢您的测试!谢谢。如果找不到方法,我可能会尝试报告一个bug(不确定是否应该报告)。我也有同样的问题。问题是,kotlin源代码构建到build/classes/kotlin目录中。但是当您单击run时,它会在build/classes/java目录中找到该类。