【问题标题】:Mock Maven Release模拟 Maven 发布
【发布时间】:2015-09-22 11:49:14
【问题描述】:

我们的所有项目都有一个基本的 Maven 父 POM,它通过集成测试进行了测试。然而,定制的很大一部分是针对 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>

我尝试通过“release:prepare”对其进行测试,并为父 POM 获得了 Can't release project due to non released dependencies,它甚至无法通过 -DallowTimestampedSnapshots=true 删除。

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

有什么方法可以模拟 Maven 版本吗?也许告诉他标记到本地路径并让他在那里提交更改?而且他也不应该部署到我们的 Nexus,但我已经到了不再挑剔的地步了。

【问题讨论】:

  • 你提到的“集成测试”是基于 Maven Invoker 的吗?
  • @user944849 是的。

标签: maven


【解决方案1】:

我也需要这样做,并且像您一样,我对实际执行 SVN 提交或部署到远程存储库不感兴趣 - 在我看来,验证是其他集成测试的一部分。我认为maven-release-plugin 的开发人员也会有类似的需求,而且确实如此。他们写了mock SCM and wagon providers

您可以看到在 ID 为 run-itsrelease plugin POM 配置文件中使用的模拟。请注意,配置使用setupIncludes 以确保在运行任何实际测试之前在本地存储库中构建和安装模拟。

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

我使用log verification technique 来验证测试期间是否运行了适当的执行。

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

【讨论】:

    【解决方案2】:

    使用配置文件模块化您的流程。拥有一个触发您的“准备”操作的配置文件和一个触发您的“执行”操作的配置文件,并在运行发布插件之前或之前测试这些。通过激活配置文件配置发布插件以执行这些操作。

    【讨论】:

    • 我不想测试&lt;scm/&gt;,我想测试准备和完成目标。
    • 从 scm 标签中读取他们的关键信息。 prepare 所做的只是运行一个普通的构建,然后运行 ​​scm 进程。所有发布都是 scm 操作(结帐),然后是 mvn -Prelease。没有 scm,没有什么可测试的。
    • 你读过这个问题吗?我改变了这些目标并添加了一堆其他插件,关键是看看它们是否可以相互工作并以正确的顺序调用以及类似的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多