Maven / Eclipse - 快速迭代验收测试打包为WAR文件的项目

时间:2013-07-30 10:41:02

标签: eclipse maven embedded-jetty acceptance-testing embedded-tomcat-7

Eclipse使得处理多模块maven项目变得简单,因为在相关模块将看到对其进行更改之前,您不必重新构建和重新安装模块。因此,您只需更改代码,eclipse就会在后台神奇地更新依赖关系。

我也希望在验收测试中实现此行为。

我有

storage-service
  storage-service-war
  storage-service-acceptance-tests

如果我使用嵌入式jetty或tomcat在存储服务战项目中进行测试,那么显然在测试中可以立即查看代码更改,但是当从存储进行测试时,我看不到任何方法可以实现相同的快速迭代测试 - 服务验收测试。

我看待它的每一种方式似乎都需要构建存储服务战争,然后使用从中生成的人工制品,但是当你只想改变一行时,这似乎有些过分。

有没有人有这么好的方法呢?

干杯

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:D我提出的解决方案不适用于CI,它可能只在进行本地构建时才有效,因为它利用了项目的相对路径。在底部,我概述了一个更强大但更复杂的方法,应该满足eclipse和CI。

我正在考虑为战争项目的war插件配置将attachClasses设置为true。

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <attachClasses>true</attachClasses>
            </configuration>
        </plugin>
    </plugins>

然后,您可以在依赖项目中引用jar,如下所示

    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>storage-service-war</artifactId>
        <version>${project.version}</version>
        <classifier>classes</classifier>
    </dependency>

然后我想我可以使用嵌入式jetty或tomcat从验证测试模块中运行我的测试,并使用相对路径将它们指向war项目中定义的web.xml。

这可以通过命令行与maven一起使用,但在eclipse中失败:(

这个问题是,附加类生成的jar没有被eclipse m2e集成所接收 - 请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id=365419,遗憾的是它不会修复。

所以我现在的解决方案是在eclipse中手动添加storage-service-war项目到我的验收测试项目构建路径。它不是很好,但它的工作原理

上述解决方案有点苛刻,但概述的替代方案更为复杂。

通过将项目拆分为以下内容,我认为可以有正确的eclipse集成和适用于CI的项目

storage-service
  storage-service-core
  storage-service-war
  storage-service-acceptance-tests
  storage-service-config

核心项目包含webapp的逻辑和源,并且是jar类型,config包含web.xml和任何其他配置文件,也是jar类型。然后,验收测试和战争项目都是战争类型,仅用于将核心项目打包成战争并将配置提取到webapp / WEB-INF目录,以便它们可以共享一个共同的设置。