【问题标题】:Gradle Output Jar has no Main-ClassGradle 输出 Jar 没有主类
【发布时间】:2017-08-22 06:07:47
【问题描述】:

我有以下简单的 build.gradle 文件:

apply plugin: 'application'
apply plugin: 'java'

mainClassName = 'com.kurtis.HelloGradle'

以及位于src/main/java/com/kurtis/HelloGradle.java的以下单个java文件:

package com.kurtis;

public class HelloGradle {

    public static void main(String[] args) {

        System.out.println("Hello gradle");
    }

}

但是,如果我运行gradle build,我会在build/lib 目录中得到一个没有主类集的jar。它的清单文件没有 Main-Class 条目。这是为什么呢?

【问题讨论】:

标签: java gradle jar


【解决方案1】:

这是由于应用程序插件的工作方式。 mainClassNameapplication 插件使用的属性,当它创建可执行jar 时,它不需要在manifest 中有Main-Class,因为它不使用它。

如果你需要在你的 jar 中有一个Main-Class,那么你必须通过java 插件的jar 配置来提供它,如下所示:

jar {
  manifest {
    attributes(
      'Main-Class': 'com.kurtis.HelloGradle'
    )
  }
}

否则,只需使用由应用程序插件生成的可执行文件,无论是通过run 任务还是通过它可以为您创建的发行版,以及运行您的应用程序及其所有依赖项的脚本。

【讨论】:

  • 这是一个很好的解释。为我清理了很多东西。谢谢!
  • 谢谢!不,我想知道我需要应用程序插件来做什么。我将只使用 java 插件和这个。用 java -jar x.jar 启动就足够了
  • 很高兴指出,现在,如果您使用application 插件并正确设置mainClassName,则无需在jar 的清单中指定Main-Class属性。
猜你喜欢
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多