Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Gradle Output Jar has no Main-Class

Tags:

java

gradle

jar

I have the following simple build.gradle file:

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

mainClassName = 'com.kurtis.HelloGradle'

And the following single java file located at src/main/java/com/kurtis/HelloGradle.java:

package com.kurtis;

public class HelloGradle {

    public static void main(String[] args) {

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

}

However, if I run gradle build I get a jar in the build/lib directory that has no main class set. It's manifest file has no Main-Class entry. Why is this?

like image 829
Kurtis Nusbaum Avatar asked Mar 28 '17 23:03

Kurtis Nusbaum


Video Answer


1 Answers

It's due to the way application plugin works. mainClassName is a property used by application plugin, when it creates an executable jar, it doesn't need to have a Main-Class in the manifest, since it doesn't use it.

If you need to have a Main-Class in your jar, then you have to provide it vie jar configuration of the java plugin as follows:

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

Otherwise, just use an executable, which is generated by application plugin, whether via run task or via distributions it can create for you, with scripts to run your application and all it's dependencies.

like image 52
Stanislav Avatar answered Sep 28 '22 02:09

Stanislav