使用maven构建webapp及其独立插件

时间:2011-09-15 23:28:37

标签: maven-2 maven dependencies multi-module

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

像这样:

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

我的目录结构很简单:

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

我的第一个问题是:我可以构建核心或任何插件并构建依赖库吗?我读到了模块,但正如您所看到的,lib有2个父项。我真正想要的是构建核心并构建lib或者如果我构建了任何插件,我还想独立构建lib。还要注意,核心并不依赖于任何插件。

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

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

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

1 个答案:

答案 0 :(得分:1)

  

我阅读了有关模块的内容,但正如您所看到的,lib有2个父项。

我认为你的意思是lib有两个依赖它的项目。父级意味着Maven中的特定内容:由另一个继承的POM。在这种情况下,我认为模块是你正在寻找的。

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

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

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