这个蚂蚁开发工作流程的“maven方式”是什么?

时间:2012-11-09 04:00:51

标签: maven maven-3

如何配置maven以支持此类工作流程:

一次性安装调用maven进行一次开发人员计算机设置,例如

  1. 创建为此应用程序配置的自定义tomcat版本
  2. 在开发者计算机上创建本地postgres数据库
  3. 将样本数据加载到数据库中
  4. 运行junit测试以配置运行应用程序所需的其他资源
  5. 集成测试调用maven进行运行集成测试,该测试应执行以下操作

    1. 创建集成测试数据库
    2. 设置db
    3. 针对db
    4. 运行命令行集成测试
    5. 运行测试版本的tomcat及其中的应用程序
    6. 运行命令行junit测试,测试应用程序公开的restful服务
    7. 发布版本调用maven来执行系统的发布版本

      1. 执行集成测试的所有步骤
      2. 生成服务器上使用的资源和配置,而不是生产
      3. 将最终结果存入git仓库,提交并将更改推送到生产
      4. 测试构建调用maven来进行系统的测试构建

        1. 执行发布版本的所有步骤,但使用测试服务器配置
        2. 配置测试版本包

          我正在努力的主要事情是,maven只有一个构建生命周期,并且有一个明确定义的阶段序列,不确定我想要构建的工作流是否适合maven。

          可以为此类工作流程配置maven吗?如果是,maven的主要功能是什么,允许我想要使用maven的四种主要方式的不同配置?

          更新我对此工作流程的意思是,我希望能够执行类似

          的操作
          mvn setup 
          mvn integration 
          mvn prod-release
          mvn test-release 
          

          我知道上面的例子看起来像蚂蚁,我很长时间蚂蚁用户和maven的总瘤菜。

1 个答案:

答案 0 :(得分:2)

您可以设置Maven来完成所有这些......

您可能会使用(震惊恐怖)个人资料来实现其中一些......

但你不想这样做

你正在追随ANT风格的思考......如果你喜欢那种思维方式,那么就使用ANT或Gradle并且开心。

如果你想遵循Maven方式,那么你将以不同的方式解决问题。

来自Maven的方式,这是我的想法:

  1. 为什么需要一次性设置?我通常有一个run配置文件,可动态配置正确的应用程序服务器,并在部署的应用程序启动它,然后在我点击^C时删除所有内容。通常这涉及启动一两个数据库服务器...因此我开发的东西就像cassandra-maven-plugin。这样,当我在一个不同的项目(可能在10分钟的时间内)工作时,我不必担心后台数据库服务器占用我所有笔记本电脑的内存。

  2. 当你完成上述工作时,集成测试实际上是微不足道的...实际上我创建了Maven Failsafe Plugin,以便让插件执行与集成测试的相应阶段相关联。 Maven约定是有一个名为run-its的配置文件,用于运行集成测试。

  3. 发布版本与测试版本不同......呃!您应该构建环境不可知的工件。让他们从他们部署的环境中获取他们的配置。这使人们担心“测试”构建和“生产”构建之间发生了某些变化。如果你真的需要捆绑配置,那么我通常会使用一个单独的模块来获取不可知的工件并使用所需的配置重新绑定。这样就很容易证明你有一个可重复的转换,并且在QA和Ops之间没有任何变化。

  4. 我总是让发布版本包括集成测试。

  5. 通常我的项目都是

    $ mvn -Prun
    

    将从零开始启动应用程序。如果我有一个更复杂的设置过程并且需要一些缓存mvn clean(想想真的很干净)会删除{{1}的任何内容,那么点击^ C会再次将所有内容重新删回,mvn post-clean或者在极端情况下配置文件发挥作用

    要运行我通常执行的集成测试

    run

    要发布我通常会

    $ mvn -Prun-its verify
    

    这是(在我看来)处理上述步骤的理想方式。

    HTH。

    BTW我没有必须专门使用PostgreSQL(通常我的集成测试和$ mvn release:prepare release:perform -B 配置文件可以使用纯{s}}或derby这样的纯java数据库,因为工件是环境不可知很容易让集成测试/ dev flyweight app服务器注入正确的JDBC url)所以你可能遇到一些关于PostgreSQL的问题