2015-09-22 36 views
1

我们有一个基本的Maven母POM,用于我们所有的项目,这些都是用集成测试进行测试的。然而定制的很大一部分是Maven的发布插件:Mock Maven发行版

<plugin> 
    <artifactId>maven-release-plugin</artifactId> 
    <configuration> 
     <tagBase>https://my-url</tagBase> 
     <preparationGoals>clean verify org.acme:my-plugin:my-goal</preparationGoals> 
     <completionGoals>org.acme:my-other-plugin:other-goal<completionGoals> 
     <resume>false</resume> 
    </configuration> 
</plugin> 

我试图通过“发布:准备”测试它与父POM,它甚至无法通过-DallowTimestampedSnapshots=true被删除了Can't release project due to non released dependencies

我可以通过“release:prepare -DdryRun = true”来测试,但这甚至不会测试准备目标。所以我唯一能想到的其他方式就是发布POM,然后尝试发布一个任意的项目。所以现在我的版本是1.0.14,已经恢复了大约50次,我不认为这是正确的方式了。

有什么方法可以模拟Maven发布吗?也许告诉他标记一个本地路径并让他在那里做出改变?而且他也不应该部署到我们的Nexus上,但我现在已经不再挑剔了。

+0

您提到基于Maven Invoker的“集成测试”吗? – user944849

+0

@ user944849是的。 –

回答

0

我也需要这样做,并且像我一样,我对SVN提交或部署到远程回购没有兴趣 - 在我看来,验证是其他集成测试的一部分。我认为maven-release-plugin开发者也会有类似的需求,事实上他们确实需要。他们写了mock SCM and wagon providers

您可以在release plugin POM个人资料中看到使用的嘲笑,编号为run-its。请注意,配置使用setupIncludes以确保在运行任何实际测试之前,mock是在本地回购库中构建和安装的。

项目本身需要使用模拟。查看integration tests之一,了解如何定义scm元素并在Wagon模拟中添加依赖关系。

我使用log verification technique来验证测试过程中是否执行了合适的执行。

注意:在我链接的安装目录中有3个模拟。我发现我只需要使用其中的两个,后缀为“-dummy”的那些。

0

使用配置文件模块化您的过程。拥有触发“准备”操作的配置文件,以及触发“执行”操作的配置文件,并测试而不是运行发布插件之前或之后。通过激活配置文件来配置release插件来完成这些工作。

+0

我不想测试'',我想测试准备和完成目标。 –

+1

它从scm标签中读取关键信息。所有的准备工作都是运行一个普通的构建,然后运行scm过程。所有版本都是scm操作(checkout),然后是mvn -Prelease。没有scm,没什么可测试的。 – bmargulies

+0

你读过这个问题了吗?我改变了这些目标并添加了一些其他插件,看看它们是否相互协作并按照正确的顺序进行调用是非常重要的。 –