2011-09-15 26 views
0

我有一个web应用程序,我将其称为核心,它可以添加插件(不是maven插件),但它应该作为独立的webapp运行和构建。我们有一个核心所依赖的plugin-lib,并且所有为核心开发的插件也都依赖于它。使用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 

我的第一个问题是:我可以打造核心或任何插件,并建立相关的lib?我阅读了模块,但正如你所看到的,该库有2个父母。我真正想要的是构建核心并构建lib或者如果我构建了任何插件,我也想独立构建lib。而且还介意,核心不依赖于任何插件。

第二个问题是:如何构建内核并构建插件,尽管内核不依赖于它们,并且插件不应该是内核的一个模块。他们可以,这不是必需的,但我宁愿不要,因为我想尽可能保持独立。到目前为止,当我构建插件时,它将自身复制到内核中的一个/ plugin目录中,并且在核心pom中有一个分发配置文件,用于将现有插件从此目录复制到内部战争中Web应用程序。所以当我建立没有配置文件的核心时,它不会复制它的插件,但是当我运行配置文件时,是的。这可行,但它很乏味,因为我必须构建库,构建插件和构建核心。

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

回答

1

我读了关于模块,但正如你所看到的,该库有2个父母。

我想你的意思是,LIB具有依赖于它 2个项目。父代意味着在Maven中特定的某些东西:由另一个继承的POM。在这种情况下,我认为模块就是你正在寻找的东西。

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

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

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

+0

感谢Mac,但我不知道我是否理解这一切。无论如何,我喜欢你对这些版本的建议。第二个,但是,我将如何定义一个可以为本地部署和测试构建的pom,以及另一个用于分发的pom?我应该使用配置文件吗?还是应该为每个场景使用两个单独的POM?我看到父pom必须有pom包装,所以我应该为这个父pom创建一个关于maven-assembly-plugin分布的单独配置文件? –

+0

是的,配置文件是根据环境或目的更改构建的机制。通常情况下,您将拥有$ {replacement.values}的资源,这些资源在'process-resources'阶段被过滤。不知道我理解你的最后一个问题,但我认为你大部分是正确的。父母POM可以是多模块POM,虽然这可能不是一个好主意(对我们的项目来说效果不佳)。如果是我,我会为了共同的依赖关系,构建配置等而严格保留父POM,并将多模POM放在其他位置。这些也可以有配置文件。 – Mac

+0

感谢Mac,我解决了这个问题,创建了一个多模块pom,核心和插件为模块,就像您所建议的一样,并使用属性激活来实现本地部署和分发包装的每种场景。不幸的是,我不能通过内部pom属性激活配置文件,只能通过命令行属性来激活配置文件,但我们不能拥有所有内容;) –