Maven:结合网络项目

Sti*_*ens 5 maven-2 webproject include

我有以下Maven项目设置:

  • PM-核心
  • PM-Web(依赖于PM-Core)
现在,这个项目用于几个客户端,但是对于每个客户端,存在一些小的差异:大多数配置文件的差异,但是一些客户端还需要额外的java文件(可能不会为其他客户端安装).

我一直在考虑如何用maven来支持这个,但我仍在寻找完美的解决方案.

我能想到的最好的解决方案是为每个客户端创建一个单独的maven项目(例如PM-CLIENT1,...),它只包含客户端特定的配置文件和其他java文件或jsp,.... 下一步是将PM-Web项目和客户端项目视为一个Web项目,这意味着:将它们组合(打包)为1个war文件,其中来自客户端项目的文件优先于PM-Web项目中的文件.

更具体:mvn package在PM-Client1上运行将从PM-Web获取所有内容,从PM-Client1添加/替换文件,然后将其打包成单个战争.

所以问题是:如何用maven实现这一目标?

Pas*_*ent 4

是的,这可以使用Overlays来完成。网页上的示例正是您所说的。

对于项目结构,您可以有这样的内容:

。
|-- PM-核心
|-- PM-WebCommon(战争类型,取决于核心)
|-- PM-Client1(战争类型,取决于 webcommon)
`-- PM-Client2(战争类型,取决于 webcommon)

并在 PM-Client1 和 PM-Client2 中使用覆盖将它们与 PM-WebCommon 进行“合并”,并为每个客户端打包 wars。

更新我不会涵盖所有细节,但我认为在使用覆盖时需要声明具有类型范围的战争依赖runtime,这就是覆盖的工作方式(实际上,整个覆盖的事情是一种黑客)。现在,要解决 Eclipse 问题,一种解决方案是创建一个包含 PM-WebCommon 项目的类的 JAR。为此,请使用 attachClasses可选参数并将其设置为true。这将告诉 Maven 创建一个PM-WebCommon-<version>-classes.jar,然后您可以将其声明为 PM-Client1 中的依赖项(具有provided范围)。有关详细信息,请查看MWAR-73和MWAR-131。war 插件的常见问题解答中也讨论了这一点。请注意,这不是推荐的做法,正确的方法是将类移动到单独的模块(这是我想提到的另一个解决方案)。

更新(201001018):我已经尝试过该attachClasses参数,它适用于插件的 2.1-beta-1 版本。