如何在Maven中提示用户输入?

7

我正在编写一个Maven插件,我想提示用户输入并决定是否中止插件的执行。

我想实现类似于以下代码:

$> mvn myplugin:run

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

我曾尝试使用maven-antrun-plugin,如此处所述,但在这种情况下,当我构建插件时,Maven会获取用户输入。相反,我想在用户从声明了我的插件的某个其他应用程序中运行我的插件时检索输入(有点困惑?)。


那你该如何解决像TravisCI这样需要使用你的插件的自动构建工具呢? - nanofarad
我有同样的需求。正在尝试将Prompter注入我的Mojo中,但还没有成功。 - DarVar
最终我放弃了用户输入。相反,我会打印消息告知用户如果发生了不寻常的情况。 - felipecao
3个回答

5

使用Prompter组件,并将其注入到您的插件中(假设您正在使用Maven插件注释,如果没有,请使用等效的javadoc标签):

@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>

提示器组件由发布插件用于提示用户输入标签和版本,原型插件也使用该组件。


源代码已移动:Prompter - Kenny Ingle

0
作为一种选择,为了不破坏像 wool.in.silver 所写的 Maven 方式,您可以使用 shell 脚本来提示值,然后将收集到的值作为参数调用 Maven。

0
不要这样做。如果您需要向Mojo提供数据,请通过配置完成。
基于您的POM和提供给Maven命令行的目标和选项,您的Maven构建的行为应完全可预测。如果允许用户在构建过程中输入其他信息,则您的POM将不再完全描述您的项目。
此外,这会阻止任何自动化构建服务器完成其工作。

5
我正在开发的这个插件并不是要由自动化工具运行。它的目的是对给定的项目执行某些配置。我想做的只是警告用户这些修改将会发生,并询问他是否确认,就像 JavaScript 的 confirm() 消息一样。但我理解您的意思。一个 Maven 插件应该附加到 Maven 阶段,因此当项目被自动构建时,它总是会被执行,这不像 Grails 脚本,用户可以通过命令行调用它,但不会通过构建工具调用。 - felipecao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接