【问题标题】:Build webapp and its independent plugins with maven使用 maven 构建 webapp 及其独立插件
【发布时间】:2011-11-18 07:27:33
【问题描述】:

我有一个 webapp,我将其称为 core,它可以添加插件(不是 maven 插件),但它应该可以作为独立的 webapp 运行和构建。我们有一个核心依赖的插件库,并且所有开发到核心的插件也依赖于它。

像这样:

core    -> core-plugin-lib
plugins -> core-plugin-lib

我的目录结构很简单:

root/
    core/
        pom.xml
    core-plugin-lib/
        pom.xml
    pluginA/
        pom.xml
    pluginB/
        pom.xml

我的第一个问题是:我可以构建核心或任何插件并构建依赖库吗?我阅读了modules,但正如您所见,该库有两个父级。我真正想要的是构建核心并构建库,或者如果我构建了任何插件,我还想独立构建库。还要注意,核心不依赖于任何插件。

第二个问题是:如何构建核心也构建插件,虽然核心不依赖于它们,并且插件不应该是核心的模块。他们可以,这不是必需的,但我宁愿不这样做,因为我想尽可能保持独立。

截至目前,当我构建插件时,它会将自身复制到核心内的 /plugin 目录,并且我在核心 pom 中有一个分发配置文件,用于将现有插件从该目录复制到 webapp 的战争中.因此,当我构建没有配置文件的核心时,它不会复制其插件,但是当我运行分发配置文件时,是的。这可行,但很乏味,因为我必须构建库、构建插件和构建核心。

我想知道是否有任何 pom 结构可以解决我的第一个问题的双重依赖,以及是否有任何方法可以处理第二个问题并通过核心构建插件,即使它们不依赖。并且,如果可能的话,如果我可以在配置文件中而不是单独的 pom.xml 中处理第二个问题。此配置文件使用 maven-assembly-plugin 创建一个 tar.gz,其中包含所有内容。如果可能的话,我也想保持这一点。

【问题讨论】:

    标签: maven-2 maven dependencies multi-module


    【解决方案1】:

    我阅读了有关模块的信息,但如您所见,该库有 2 个父级。

    我认为你的意思是 lib 有 2 个依赖它的项目。父级在 Maven 中意味着特定的东西:由另一个继承的 POM。在这种情况下,我认为模块就是您要寻找的。​​p>

    至于你是否可以用核心和插件构建库,那么是的,这是可能的。这是个好主意吗?我会说,不。插件库定义插件和核心之间的契约。通常,您想确切地知道您所依赖的版本,而不一定总是最新的。我建议您保持 lib 的版本独立于其他项目,并根据需要构建它。然后让您的核心和插件依赖于您所针对的本地(或远程)存储库中的版本。

    如果您决定将它们一起构建,那么只需定义一个单独的多模块 POM,可能与其他 POM 相邻,将两个项目都包含为模块。

    关于第二个问题,您当然可以定义一个单独的 POM,将核心和插件构建在一起。使用相同的多模块技术。

    【讨论】:

    • 感谢 Mac,但我不知道我是否全部理解。无论如何,我喜欢你对版本的建议。但是第二个,我将如何定义一个既可以用于本地部署和测试,又可以用于分发的 pom?我应该为此使用配置文件还是应该为每个场景使用两个单独的 POM?我看到父 pom 必须有一个 pom 包装,所以我应该为这个父 pom 创建一个单独的配置文件,关于 maven-assembly-plugin 进行分发?
    • 是的,配置文件是根据环境或目的更改构建的机制。通常,您将拥有在 process-resources 阶段过滤的具有 ${replacement.values} 的资源。不确定我是否理解您的最后一个问题,但我认为您基本上是正确的。父 POM 可以是多模块 POM,尽管这也可能不是一个好主意(对我们的项目来说效果不佳)。如果是我,我会严格保留父 POM 用于常见依赖项、构建配置等,并将多模块 POM 放在其他 POM 旁边。这些也可以有配置文件。
    • 感谢 Mac,我按照您的建议创建了一个包含核心和插件作为模块的多模块 pom,并为本地部署和分发打包的每个场景使用属性激活来解决它。不幸的是,我无法通过内部 pom 属性激活配置文件,只能通过命令行属性,但我们不能拥有一切;)
    猜你喜欢
    • 1970-01-01
    • 2013-12-12
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多