2017-03-28 54 views
4

我有以下簡單的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目錄中收到一個罐子。它的清單文件沒有Main-Class條目。爲什麼是這樣?

+0

[Gradle- no main manifest attribute]可能的重複(http://stackoverflow.com/questions/32567167/gradle-no-main-manifest-attribute) – sm4

+0

您是否閱讀過文檔:https:// docs。 gradle.org/current/userguide/application_plugin.html? – Opal

+0

@Opal是的,我一直在閱讀這些。 –

回答

7

這是由於應用程序插件的工作方式。 mainClassNameapplication插件使用的屬性,當它創建可執行jar時,它不需要在清單中有Main-Class,因爲它不使用它。

如果你需要有一個Main-Class在你的罐子,那麼你必須提供其爭奪的java插件jar配置如下:

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

否則,只需使用一個可執行文件,這是由應用程序生成插件,無論是通過run任務還是通過它可以爲您創建的發行版,都可以使用腳本來運行應用程序及其所有依賴項。

+1

這是一個很好的解釋。爲我清理了很多東西。謝謝! –