java - 即使存在主类,Java也无法找到主类

标签 java gradle jar

我一直在尝试运行一个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/

    相关文章:

    java - 如何创建仅包含项目依赖项而不包含项目类的 Jar 文件?

    java - 杜克大学 - org.apache.lucene.analysis.standard.StandardAnalyzer

    java - Java 中的数组具有类似 Javascript 数组的性质

    java - 在java中合并凸包

    gradle - Gradle 中具有不断变化的依赖集的多个构建任务

    android - gradle构建无法解决依赖关系

    java - JVM 只会获取 .jar 文件吗?

    java - 运行带有多个参数的 Jar 文件

    java - 无法在java中的selenium webdriver中选择下拉列表

    java - 循环检查字符串数组中的项目