我一直在尝试运行一个jar,但我不断收到错误消息:
Error: Could not find or load main class com.myclass
Caused by: java.lang.ClassNotFoundException: com.myclass
这非常令人困惑,因为我提取了jar并将类放在正确的位置。这是我使用gradle编译jar的方式:jar {
manifest {
attributes 'Main-Class': 'com.myclass'
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
我相信这是java的问题,因为jar文件似乎是正确的。有谁知道我该如何解决?
最佳答案
您的问题不包含任何直接表明您做错了什么的细节。
但我可以告诉您基本原则:
解压缩该jar文件(这是一个zip文件,因此任何解压缩都可以。或者,在新创建的目录中的jar xvf myjar.jar
也可以完成此工作)。
其中,至少有2个文件,位于的确切位置:
com/foo/MyClass.class
META-INF/MANIFEST.MF
然后,使用记事本打开 list 文件,或从终端对其进行
cat
编码。再次,它应该包含这一行和:Main-Class: com.foo.MyClass
如果所有这些都是正确的,但是您在此问题中报告的错误正在发生,则我们已经得出了真正异乎寻常的东西,例如损坏的VM或损坏的类文件。您更有可能误读了某些内容,请仔细检查名称。
注意:如果您忘记在类中添加正确签名的“main”方法,则错误会有所不同,因此不是。
为了它的值(value),这部分内容:
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
看起来很不规范。您是否要尝试使gradle构建文件进行某些特定的操作,而这些操作尚未内置到默认设置中?在这种情况下,您可能做错了;您可能想专门问另一个SO问题,并将这一部分(特别是关于 list 中内容以及类文件实际上在jar文件中的位置的发现)作为该问题的脚注。
关于java - 即使存在主类,Java也无法找到主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63872278/