Gradle Output Jar没有Main-Class

Kur*_*aum 7 java jar gradle

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

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

mainClassName = 'com.kurtis.HelloGradle'
Run Code Online (Sandbox Code Playgroud)

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

package com.kurtis;

public class HelloGradle {

    public static void main(String[] args) {

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

}
Run Code Online (Sandbox Code Playgroud)

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

Sta*_*lav 14

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

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

jar {
  manifest {
    attributes(
      'Main-Class': 'com.kurtis.HelloGradle'
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

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