如何设置 TeamCity 构建作业以执行没有 pom 的 Maven 作业

How do I set up a TeamCity build job to execute a maven job with no pom

我们有一个内部开发的 MOJO,它可以生成内容并且不需要您有一个现有的项目或 POM。想一想 Maven 原型插件,您可以在其中 运行 mvn [mojo]:[goal] 并让 Maven 在没有 POM 的情况下执行该目标。

此 MOJO 连接到特定环境中的特定数据库实例,并为数据库的内容生成一些元数据,因此我们的测试人员可以检查元数据并找到具有他们所需的某些属性的类生产数据给出测试。

当您执行元数据 mojo 时,maven 从可用的存储库(在我们的例子中是一个 Artifactory 存储库)解析 MOJO,然后它开始工作 returns。它不会创建任何工件或其他输出。

我们使用 TeamCity 作为我们的 CI 服务器,但它也有元数据生成作业,因此开发人员只需单击一下就可以针对特定数据库启动元数据生成作业。

问题是 TeamCity 中的 Maven 运行ner 需要 POM。如果 TC 还没有从 VCS 签出一个项目,或者它签出的项目没有 POM,maven 运行ner 将不会做任何事情。在这种情况下,没有什么可检查的(MOJO是从Artifactory解析的)所以没有POM。

我可以将 TC 作业设置为使用命令行 运行ner 并让它执行,比如说 mvn com.example:metadata-generate -DenvironmentName=UAT1,但是这样就无法指定 Maven 应该使用的 Maven 设置文件.

所以我的问题是,我该怎么做?是否可以让 maven 运行ner 在不需要 POM 的情况下执行任意 maven 命令?或者,使用命令行 运行ner,是否可以让 TC 作业将特定的 Maven 设置文件复制到构建代理,以便在 Maven 命令中将其引用为 mvn com.example:metadata-generate -DenvironmentName=UAT1 -s {path-to-settings-file}?

您可以自定义用作 teamcity 中的 maven 构建步骤的参数的 pom 文件的名称,并将其用作 second "build step" .让我们将参数称为 pom.file.name

第一步,解析你所有的内部依赖,将你要执行的pom文件的名字设置到变量pom.file.name

如果您想了解更多有关如何在 teamcity 中更改变量值的信息,可以阅读 here

事实证明,TC 可以很好地处理无 pom 的 maven 构建。我的问题是 MOJO 没有声明为需要一个项目。

比较我的 MOJO 和 MavenArchetypePlugin source,我需要用 class 级别的 javadoc 标签声明我的 MOJO @requiresProject false

一旦我准备好了,TC 运行 我的无 pom 工作就非常顺利。我所要做的就是清除 TC 构建配置中的 Path to POM file: 字段并将其留空。