0

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

我也想为验收测试实现这种行为。

我有

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

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

从我的每一个角度来看,似乎我都必须构建 storage-service-war,然后使用从中生成的人工制品,但是当你只想更改一行时,这似乎有点过分了。

有没有人有这样做的好方法?

干杯

码头

4

1 回答 1

0

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

我正在寻找将 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>

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

这可以通过命令行在 Maven 中正常工作,但在 Eclipse 中失败:(

问题在于 Eclipse m2e 集成没有拾取附加类生成的 jar,请参阅 - 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 类型,配置包含 web.xml 和任何其他配置文件,也是 jar 类型。然后验收测试和战争项目都是战争类型,仅用于将核心项目打包成战争并将配置提取到 webapp/WEB-INF 目录,以便它们可以共享一个公共设置。

于 2013-07-30T13:30:55.450 回答