【问题标题】:Could not find or load main class <classname>无法找到或加载主类 <classname>
【发布时间】:2016-12-03 07:35:21
【问题描述】:

我创建了一个 Spring boot gradle 应用程序。我在 build.gradle 中将主类名指定为

apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'eclipse'

sourceCompatibility = 1.8
def appName = 'app'
buildDir = 'gradle-build'
mainClassName = 'package.Application'
dependencies{
   ----
}
configurations {
    compile.exclude group: 'ch.qos.logback'
}

jar {
    baseName = appName
    manifest {
        attributes 'Implementation-Title': 'app',
                'Implementation-Version': version,
                'Main-Class': mainClassName
    }
}

startScripts {
    applicationName = appName
}

distributions {
    main {
        baseName = appName
    }
}

当我从 Eclipse 运行我的主类时,它运行正常。但是当我执行将在 gradle-build 中生成的 jar 文件时,它会抛出错误“无法找到或加载主类”。

我正在执行命令

    java -jar app.jar

我也尝试过其他命令

    java -cp -jar app.jar
    java -cp app.jar

在所有情况下,我都会遇到相同的错误。

而我的清单文件是这样的

 Manifest-Version: 1.0
Implementation-Title: app
Implementation-Version: 1.0.0
Main-Class: package.Application

请帮我解决这个问题。

【问题讨论】:

  • 您是否尝试过告知文件的整个路径?示例:java -jar "C:/myworkspace/myproject/myjar.jar"
  • 是的。我做到了。没有运气。我正在使用 mac,所以我从“/users/till/jarfile”指定了绝对路径
  • 你在 jar 中的 META-INF/MANIFEST.MF 中有一个 Main-Class 条目吗?
  • 是的。有入口。 Manifest-Version: 1.0 Implementation-Title: app Implementation-Version: 1.0.0 Main-Class: package.Application 这是我的 Manifest 文件
  • 当您使用java -cp 时,您会通知主类而不是jar。 java -cp MyMainClass.class

标签: java gradle


【解决方案1】:

我遇到了非常相似的问题。

原来问题是我的 jar 文件中的 Meta-INF 有一些 RSA、SF 和 dsa 文件。

如下更改您的 jar 声明

jar {
    baseName = appName
    manifest {
        attributes 'Implementation-Title': 'app',
                'Implementation-Version': version,
                'Main-Class': mainClassName
    }
    exclude ('META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA')

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2019-01-05
    • 2015-02-06
    • 2018-10-10
    • 2014-09-15
    相关资源
    最近更新 更多