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

问题描述 投票:0回答:1

我正在尝试通过运行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问题,但找不到任何接近这个的东西。谢谢!

java maven pom.xml maven-plugin maven-invoker-plugin
1个回答
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); 

为了回答我的第一点,我最终删除了设置pom本身,因为我是远程获取它并在我发送给mavenCmd的命令中提到了原型。可能有更好的方法,但这对我有用,我很擅长。

© www.soinside.com 2019 - 2024. All rights reserved.