Gradle- no main manifest attribute

前端 未结 3 653
遥遥无期
遥遥无期 2020-11-30 00:03

I\'m kind of going crazy with this error I get when running a JAR file built off Gradle. The error reads \"no main manifest attribute, in RxJavaDemo.jar\" I tried manipulat

3条回答
  •  -上瘾入骨i
    2020-11-30 00:40

    To make the jar file executable (so that the java -jar command works), specify the Main-Class attribute in MANIFEST.MF.

    In Gradle, you can do it by configuring the jar task.

    • for Groovy DSL see these answers ([1], [2])
    • for Kotlin DSL you can use the following code snippet:
    tasks.withType {
        manifest {
            attributes["Main-Class"] = "com.caco3.Main"
        }
    }
    

    Why mainClassName does not work as expected?

    Or why mainClassName does not specify the attribute in the manifest?

    The mainClassName property comes from the application plugin. The plugin:

    makes it easy to start the application locally during development, and to package the application as a TAR and/or ZIP including operating system specific start scripts.

    So the application plugin does not aim at producing executable jars

    When a mainClassName property set, then:

    1. $ ./gradlew run will launch the main method in the class specified in the attribute
    2. the zip/tar archive built using distZip/distTar tasks will contain a script, which will launch the main method of the specified previously class.

    Here is the line of shell script setting the main class:

    $ grep Main2 gradletest
    eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLETEST_OPTS -classpath "\"$CLASSPATH\"" com.caco3.gradletest.Main2 "$APP_ARGS"
    

提交回复
热议问题