【发布时间】:2015-06-10 08:46:47
【问题描述】:
我们有一个内部开发的 MOJO,它可以生成内容,并且不需要您拥有现有的项目或 POM。想想 maven 原型插件,您可以在其中运行 mvn [mojo]:[goal] 并让 maven 在没有 POM 的情况下执行该目标。
此 MOJO 连接到特定环境中的特定数据库实例,并为数据库的内容生成一些元数据,因此我们的测试人员可以检查元数据并找到具有给定测试所需的某些属性的类似生产的数据.
当您执行元数据 mojo 时,maven 从可用的 repo(在我们的例子中是 Artifactory repo)中解析 MOJO,然后它会执行它的工作并返回。它不会创建任何工件或其他输出。
我们使用 TeamCity 作为 CI 服务器,但它也有元数据生成作业,因此只需单击一下,开发人员就可以针对特定数据库启动元数据生成作业。
问题在于 TeamCity 中的 Maven 运行程序需要 POM。如果 TC 还没有从 VCS 签出项目,或者它签出的项目没有 POM,maven runner 不会做任何事情。在这种情况下,没有什么要检查的(MOJO 是从 Artifactory 解析的),所以没有 POM。
我可以将 TC 作业设置为使用命令行运行程序并让它执行,例如,mvn com.example:metadata-generate -DenvironmentName=UAT1,但是无法指定 maven 应该使用的 maven 设置文件。
所以我的问题是,我该怎么做?是否可以让 maven runner 执行任意 maven 命令而不需要 POM?或者,使用命令行运行器,是否可以让 TC 作业将特定的 maven 设置文件复制到构建代理,以便可以在 maven 命令中将其引用为mvn com.example:metadata-generate -DenvironmentName=UAT1 -s {path-to-settings-file}?
【问题讨论】: