Android Studio上的Kotlin(非Android)项目的ClassNotFoundException错误 [英] ClassNotFoundException error for Kotlin (non-android) project on Android Studio
问题描述
我试图用Android Studio 2.3.3创建一个正常的Kotlin项目(非android,只是桌面/命令行项目)。
我遵循以下步骤:这里列出了
和以下是我有的项目文件结构
然后我同步该项目,它会成功。但是当我尝试运行项目时出现错误。
/应用程序/ 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/jib/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 Stu dio.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 /注解/ 13.0 / 919f0dfe192fb4e063e7dacadee7f8bb9a267 2A9 /注释-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.jarcom.intellij.rt.execution.application.AppMain io.wasin.testjavaapp.Main
Exception in线程mainjava.lang.ClassNotFoundException:io.wasin.testjavaapp.Main $ b $在java.net.URLClassLoader.findClass(URLClassLoader.java:381)
在java.lang.ClassLoader.loadClass(ClassLoader .java:424)
at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass( ClassLoader.java:357)在java.lang.Class.forName0处为
(本地方法)$ b $在java.lang.Class.forName(Class.java:264)
at com.intellij。 rt.execution.application.AppMain.main(AppMain.java:123)
处理完成退出代码1
我看到了上面提供的classpath参数 / Applications / Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java$c$ c>没有与我的项目相关的目录。我不知道如何通过gradle添加classpath目录,尽管我已经在配置中设置它了。
我该如何解决这个问题?
更新:
以下是我的 Main.ct
代码。这只是为了测试目的。所以只是打印出来。
包io.wasin.testjavaapp
对象Main {
@JvmStatic fun main(arg:Array< String>){
println(Hello world)
}
}
此外,我还更新了Kotlin版本的 build.gradle
以匹配Android Studio上的Kotlin插件版本。现在是 ext.kotlin_version ='1.1.4-2'
。虽然仍然无法解决问题。
更新2
在 build 目录中,在
src
目录的同一级别。没有 .class
或中间体
在那里生成/构建的文件,只有 kotlin-build /caches/version.txt
就是这样。没有其他文件。所以这个问题可能是由于源文件根本不编译?
更新3
我试着创建一个新模块来查看它是否是根本原因。还创建了 assets
文件夹来充当工作目录,重新排列源文件夹,如下所示。
testJavaApp
- root one
桌面
- 由 Main.ct
并用作桌面可执行文件
testJavaApp
对于 build.gradle
group'io.wasin'
version'1.0-SNAPSHOT'
//顶级构建文件,您可以在其中添加常见的配置选项
所有子项目/模块。
buildscript {
ext.kotlin_version ='1.1.4-2'
存储库{
jcenter()
}
依赖关系{
classpath 'com.android.tools.build:gradle:2.3.3'
classpathorg.jetbrains.kotlin:kotlin-gradle-plugin:$ kotlin_version
//注意:不要在这里放置您的应用程序依赖项它们属于单个模块build.gradle文件中的
//
}
}
allprojects {
存储库{
jcenter()
任务清理(类型:删除){
删除rootProject.buildDir
}
还有 不幸的是,它仍然没有正常工作,并且出现同样的错误。 Update 4 @aristotll在评论中提供了信息,面临同样的问题,但使用IntelliJ 。他说这可能是Android Studio的bug。所以我想,我会再尝试几次,然后决定它是否足够稳定,可以报告为错误。感谢您抽出宝贵时间进行测试。 我也遇到了这个问题并解决了它。 在build.gradle中添加 } android-studio在build / calsses / kotlin / main中找不到类,添加runtimeClasspath。它可以工作! I attempted to create a normal Kotlin project (non-android, just desktop/command line project) with Android Studio 2.3.3. I followed the steps as laid out here but with different Actually that content of Then I create a configuration to be able to run it on desktop with proper set up like Main Class, Working directory, and Use classpath of module. You can see in the image below. and following is the project file structure I have Then I sync the project, it succeeds. But error kicks in when I try to Run the project. I got the following error. I saw the classpath parameter as supplied in above How can I solve this problem? Update: The following is my Also I updated Update 2 I checked inside Update 3 I tried creating a new module to see if it's the root cause or not. Also created We now have 2 modules. also Unfortunately, it still didn't work and it's the same error that shown up. Update 4 @aristotll provided info in a comment that he tested with Android Studio and faced the same problem, but not with IntelliJ. He said it might be Android Studio bug. So I guess, I would try a few more times then decide whether it's solid enough to report as a bug. Thanks for taking time to testing out. I also met this problem and solved it. add } because android-studio doesn't find class in build/calsses/kotlin/main, add runtimeClasspath .it works ! 这篇关于Android Studio上的Kotlin(非Android)项目的ClassNotFoundException错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!桌面
模块的代码如下: build.gradle
$ b $ pre $ 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'
compileorg.jetbrains.kotlin:kotlin-stdlib:$ kotlin_version
存储库{
mavenCentral()
}
任务运行(dependsOn:类,类型:JavaExec){
main = project.mainClassName
classpath = sourceSets.main.runtimeClasspath
standardInput = System.in
workingDir = project.assetsDir
ignoreExitValue = true
}
code>
runtimeClasspath文件(build / classes / kotlin / main)
依赖关系{
//此依赖关系可在此组件和消费者的编译类路径中找到。
编译'com.google.guava:guava:23.0'
//使用JUnit测试框架
testCompile'junit:junit:4.12'
compileorg。 jetbrains.kotlin:kotlin-stdlib-jdk8:$ kotlin_version
编译组:'dom4j',名称:'dom4j',版本:'1.6.1'
runtimeClasspath文件(build / classes / kotlin / main)
build.gradle
content whose content I shared here.build.gradle
I copied from build.gradle
file after generating a new project with IntelliJ Community Edition (2017.2). "/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.app/Contents/jre/jdk/Contents/Home/bin/java
has no related directory to my project. I don't know how to add classpath directory via gradle despite I set up it in configurations already.Main.kt
code. It's just for testing purpose. So just printing something out.package io.wasin.testjavaapp
object Main {
@JvmStatic fun main(arg: Array<String>) {
println("Hello world")
}
}
build.gradle
for Kotlin version to match the version of Kotlin plugin on Android Studio. It's now ext.kotlin_version = '1.1.4-2'
. Although still doesn't solve the problem.build
directory at the same level of src
directory. There are no .class
or intermediates
files generated/built over there, only kotlin-build/caches/version.txt
and that's it. No other files. So the problem might be due to the source files are not compiled at all?assets
folder just to act as Working Directory, rearranged source folder again to be as following.
testJavaApp
- root onedesktop
- consists of Main.kt
and used as desktop executabletestJavaApp
has the following code for 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
module has following code for 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
}
runtimeClasspath files("build/classes/kotlin/main")
in build.gradledependencies {
// 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")