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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With