繁体   English   中英

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

[英]ClassNotFoundException error for Kotlin (non-android) project on Android Studio

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

我按照这里列出的步骤进行了操作但使用了不同的build.gradle内容,我在这里分享内容。

其实这些内容build.gradle我从复制build.gradle文件生成的IntelliJ与社区版(2017.2)一个新的项目之后。

然后我创建一个配置,以便能够在桌面上运行它,并进行适当的设置,如Main Class,Working directory和Use classpath of module。 您可以在下面的图片中看到。

在此输入图像描述

以下是我的项目文件结构

在此输入图像描述

然后我同步项目,它成功了。 但是当我尝试运行项目时错误就开始了。 我收到以下错误。

    "/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目录。 在那里没有生成/构建的.classintermediates文件,只有kotlin-build/caches/version.txt ,就是这样。 没有其他文件。 所以问题可能是由于源文件根本没有编译?

更新3

我尝试创建一个新模块,看看它是否是根本原因。 还创建了assets文件夹,只是作为工作目录,重新安排源文件夹,如下所示。

在此输入图像描述

我们现在有2个模块。

  1. testJavaApp - root one
  2. desktop - 由Main.kt组成,用作桌面可执行文件

testJavaApp具有以下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
}

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。 所以我想,我会尝试几次,然后决定它是否足够坚实,可以报告为错误。 感谢您抽出时间进行测试。

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

runtimeClasspath files("build/classes/kotlin/main")添加runtimeClasspath files("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 ,它的工作原理!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM