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

How to set artifact id and other info programmatically using maven invoker

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

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

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

两个问题:

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

我尝试查找 api 文档和其他 Whosebug 问题,但找不到与此相近的任何内容。谢谢!

通过首先回答问题,我能够提供第 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 的命令中提到了原型。可能有更好的方法,但这对我有用,我很擅长。