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

时间:2015-06-09 03:56:08

标签: maven teamcity

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

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

当您执行元数据mojo时,maven会从可用的repo(在我们的例子中是Artifactory repo)中解析MOJO,然后它会完成其工作并返回。它不会创建任何工件或其他输出。

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

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

我可以设置TC作业以使用命令行运行程序并让它执行,例如mvn com.example:metadata-generate -DenvironmentName=UAT1,但是不可能指定maven应该使用的maven设置文件。

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

2 个答案:

答案 0 :(得分:1)

所以事实证明TC处理无pom的maven构建就好了。我的问题是MOJO没有被宣布为需要一个项目。

将我的MOJO与MavenArchetypePlugin source进行比较,我需要使用类级别javadoc标记@requiresProject false声明我的MOJO。

一旦我掌握了这一点,TC就完美地完成了我无需工作的工作。我所要做的就是清除TC构建配置中的Path to POM file:字段并将其留空。

答案 1 :(得分:0)

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

在第一步中,解决您拥有的所有内部依赖关系,并将要执行的pom文件的名称设置为变量pom.file.name

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