如何使用Maven调用程序以编程方式设置工件ID和其他信息

时间:2019-02-25 19:34:15

标签: java maven pom.xml maven-plugin maven-invoker-plugin

我正在尝试通过运行Java应用程序以编程方式创建Maven项目。在应用程序中,我将pom文件设置为:

request.setPomFile(new File(thePomFile));
request.setGoals( Collections.singletonList( "archetype:generate" ) );

这是一个带有原型信息的pom文件,由于我拥有自己的项目结构,因此我想使用它。

两个问题:

  1. 我收到一条错误消息:“未定义原型。使用maven-archetype-quickstart(org.apache.maven.archetypes:maven-archetype-quickstart:1.0)”;为什么我提供原型pom文件也为什么?
  2. 我也得到了 “ [警告]缺少属性groupId。添加-DgroupId = someValue [警告]缺少属性artifactId。添加-DartifactId = someValue [警告]缺少属性包。添加-Dpackage = someValue”;如何向请求提供这些信息。api似乎没有它。

我尝试查找api文档和其他stackoverflow问题,但找不到与此类似的内容。谢谢!

1 个答案:

答案 0 :(得分:1)

我首先回答了问题,就能提供第2点的信息。

在请求本身中,您需要执行以下操作:

request.setGoals(Collections.singletonList("archetype:generate -DgroupId=.....");

然后,如果您查看api文档,则有一个我之前没有注意到的命令行构建器:https://maven.apache.org/shared/maven-invoker/apidocs/index.html

MavenCommandLineBuilder mavenCmd = new MavenCommandLineBuilder();

设置必要的配置,例如基本目录,maven可执行文件的路径等到此mavenCmd。

然后,您可以向其发送先前创建的请求,例如:

Commandline result = mavenCmd.build(request); 

要回答我的第一点,我最终删除了set pom本身,因为我是远程获取它的,并在发送给mavenCmd的命令中提到了原型。也许有更好的方法,但这对我有用,我对此很满意。