maven-2 - Maven : Combine web projects

标签 maven-2 include webproject

我设置了以下 Maven 项目:

  • PM-核心
  • PM-Web(依赖于 PM-Core)

  • 现在,这个项目用于多个客户端,但每个客户端都有一些小的差异:主要是配置文件的差异,但有些客户端还需要额外的 java 文件(可能没有为其他客户端安装)。

    我一直在考虑如何使用 maven 支持这一点的几种替代方案,但我仍在寻找完美的解决方案。

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

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

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

    最佳答案

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

    对于项目结构,你可以有这样的东西:

    .
    |-- PM-核心
    |-- PM-WebCommon (war 类型,取决于核心)
    |-- PM-Client1 (war 类型,依赖 webcommon)
    `-- PM-Client2 (war 类型,取决于 webcommon)

    并在 PM-Client1 和 PM-Client2 中使用覆盖将它们与 PM-WebCommon 和包 war “合并”到每个客户端。

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

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

    关于maven-2 - Maven : Combine web projects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2063930/

    相关文章:

    java - 为什么jdk 1.5无法加载使用maven创建的jar? (版本号错误)

    php - 关于 PHP include 语句的问题

    node.js - 在 ejs 模板引擎中包含非 ejs 文件

    c++ - 给定一个源文件,有没有办法让 gcc 只返回直接包含的头文件列表?

    apache - myPage.com 而不是 mypage.com/WebContent

    java - 如何在eclipse中现有的java项目中添加web项目模块

    java - 使用 Maven 的示例代码存档

    eclipse - Maven 下载的扩展名为 .lastUpdated

    maven-2 - 如何从 Maven 的 pom.xml 中删除重复内容?