2013-10-16 15 views
4

我正在編寫一個Maven插件,我想提示輸入一個簡單的用戶輸入並決定是否停止插件的執行。如何在Maven中提示用戶輸入?

我想要做這樣的事情:

$> mvn myplugin:run 

[MAVEN] would you like to continue? [default value: y] _ 

我使用maven-antrun-插件描述here嘗試,但在這種情況下,Maven的獲取用戶輸入的時候我建立我的插件。相反,當用戶從聲明我的插件的其他應用中運行我的插件時,我想要檢索輸入(令人困惑?)

+0

而且你會如何解決自動建設者像TravisCI行家方式那需要使用你的插件? – hexafraction

+0

我有同樣的要求。試圖向我的Mojo注入Prompter,但沒有快樂 – DarVar

+0

我最終放棄了用戶輸入。相反,如果發生異常,我會打印通知用戶的消息。 – felipecao

回答

0

不要這樣做。如果您需要將數據提供給mojo,請通過配置完成。

Maven構建的行爲應該完全基於您的POM和提供給Maven命令行的目標&選項來預測。如果您允許用戶在構建期間輸入其他信息,那麼您的POM不再完全描述您的項目。

此外,它會阻止任何自動構建服務器執行其工作。

+4

我正在開發的這個插件實際上不應該由自動化工具運行。其目的是在給定的項目上執行一些配置。我想要做的就是向用戶發出警告,告訴用戶這些修改將會發生,並要求他的確認,就像是一個JavaScript confirm()消息或類似的東西。但我想我明白你的觀點。 Maven插件應該被附加到Maven階段,因此,當項目自動構建時,它總是會被執行,它不像Grails腳本,它由用戶在命令行上調用,而不是通過構建工具調用。 – felipecao

2

使用Prompter成分,有它在你的插件注射(假設你使用Maven plugin annotations,如果不使用equivalent javadoc tags):

@Component 
private Prompter prompter; 

,並使用它:

String name = prompter.prompt("Please enter your name"); 

拉這個依賴在你的插件的POM中:

<dependency> 
    <groupId>org.codehaus.plexus</groupId> 
    <artifactId>plexus-interactivity-api</artifactId> 
    <version>1.0-alpha-6</version> 
</dependency> 

釋放插件使用提示器組件來提示用戶輸入標籤和版本以及原型插件。

+0

移動源代碼:[Prompter](https://github.com/sonatype/plexus-interactivity/blob/master/plexus-interactivity-api/src/main/java/org/codehaus/plexus/components/interactivity/Prompter的.java) –

0

的變異,不破爲wool.in.silver寫道,你可以使用shell腳本,將提示值,然後調用行家與聚集值作爲參數