2016-03-08 62 views
2

我想定義一個運行gradle任務jar但具有固定值爲baseName的gradle中的任務(稱爲gen)。之後我也想讓原始任務jar可用。如何使用不同參數運行Gradle任務

我的問題是,我無法傳輸清單的設置。

我累了,例如

def mainFile = 'com.so.proj.App' 
def filename = 'something' 

jar { 
    baseName filename 
    manifest { 
     attributes 'Main-Class': mainFile 
    } 
} 

task gen (type: Jar) { 
    description "Generates JAR without version number." 
    doFirst { 
     //archiveName = jar.baseName + "." + extension 
     archiveName = filename + ".jar" 
     manifest { 
      attributes 'Main-Class': mainFile 
     } 
    } 
} 

我想我通過使用archiveName和清單其他值重新定義Jar任務。

當運行./gradlew jar時,會生成一個可執行的JAR文件。

當運行./gradlew gen時,會生成一個jar文件。不幸的是當試圖運行使用java -jar build/libs/something.jar我得到錯誤信息的程序:

Java的罐子建立/庫/ something.jar

Error: Could not find or load main class com.so.proj.App 

我在做什麼錯?我只是想用不同的參數運行jar任務(沒有配置jar任務本身,但運行別名)。我寫的代碼在做什麼(我在執行任務時沒有遇到錯誤,但是它在做什麼?)

+0

您可能需要只是Jar'加上'以你的任務根定義 – RaGe

回答

2

我認爲你的gen任務中不需要doFirst。您需要添加一個with jar包括所有常規罐子的內容,這將導致:

task gen (type: Jar) { 
    description "Generates JAR without version number." 
    archiveName = filename + ".jar" 
    manifest {attributes 'Main-Class': mainFile} 
    with jar 
} 
+0

你有沒有爲'with'的參考。我搜索了所有(?)文檔頁面的任務,但找不到任何東西。這在哪裏記錄? – Edward

+0

我相信'with'是'groovy'''''''''使用jar封口。但是我還沒有找到一個很好的參考來解釋這個令人滿意的結果。 – RaGe

+1

在這給了'with()'不是一個Groovy方法,而是來自'Jar'類:http://stackoverflow.com/a/35948697 –

相關問題