所以回答我自己的问题: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 目录,以便它们可以共享一个公共设置。