2017-05-27 126 views
5

我正在創建簡單的Java類,我想通過使用gradle來創建開箱即用的啓動器。如何將命令行參數傳遞給gradle中的主類?

所以我希望能夠通過gradle這個運行Java程序:

gradlew clean run These are my command line arguments其中These are my command line arguments直接傳遞到我的public static void main(String... args)方法。

我正在使用apply plugin: "application"它給我run任務。但是,當我運行這個「是」我有:

* What went wrong: Task 'These' not found in root project 'question1'. Some candidates are: 'test'.

回答

4

搖籃解釋每一個參數不是開始一個連字符(-)作爲任務名稱來定義該任務將在構建過程中執行。由於名稱These的任務不存在,因此構建失敗。

您正在使用Gradle應用程序插件,如前所述,該插件提供了run任務。 docs表示run任務的類型爲JavaExec。因此,申請你的論點,他們通過args添加到run任務:

run { 
    args 'These are my command line arguments' 
} 

要修改的參數爲每個建立在不改變build.gradle文件,只需使用項目屬性:

run { 
    args findProperty('runArgs') 
} 

和呼叫gradle clean run -PrunArgs='These are my command line arguments'

+0

這種方法可行,但問題在於args *總是*必須存在。如果你做了其他任何事情(例如'gradle tasks'),那麼操作失敗時會出現'NullPointerException',並且錯誤指向'build.gradle'中的上述'args'行。你知道一種避免這種情況的方法嗎? –

+0

並回答我自己的問題:'if(project.hasProperty('runArgs'){args findProperty('runArgs')}'將執行此操作。 –

相關問題