Gradle 输出的 Jar 包没有 Main-Class。

13 浏览
0 Comments

Gradle 输出的 Jar 包没有 Main-Class。

我有以下简单的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条目。为什么会发生这种情况?

admin 更改状态以发布 2023年5月23日
0
0 Comments

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

如果您需要在您的jar文件中拥有一个Main-Class,则需要通过java插件的jar配置提供它,如下所示:

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

否则,只需使用由应用程序插件生成的可执行文件,无论是通过run任务还是通过其分发的脚本运行您的应用程序和所有相关依赖项。

0