我有一个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。如果可能的话,我也想保留。
感谢Mac,但我不知道我是否理解这一切。无论如何,我喜欢你对这些版本的建议。第二个,但是,我将如何定义一个可以为本地部署和测试构建的pom,以及另一个用于分发的pom?我应该使用配置文件吗?还是应该为每个场景使用两个单独的POM?我看到父pom必须有pom包装,所以我应该为这个父pom创建一个关于maven-assembly-plugin分布的单独配置文件? –
是的,配置文件是根据环境或目的更改构建的机制。通常情况下,您将拥有$ {replacement.values}的资源,这些资源在'process-resources'阶段被过滤。不知道我理解你的最后一个问题,但我认为你大部分是正确的。父母POM可以是多模块POM,虽然这可能不是一个好主意(对我们的项目来说效果不佳)。如果是我,我会为了共同的依赖关系,构建配置等而严格保留父POM,并将多模POM放在其他位置。这些也可以有配置文件。 – Mac
感谢Mac,我解决了这个问题,创建了一个多模块pom,核心和插件为模块,就像您所建议的一样,并使用属性激活来实现本地部署和分发包装的每种场景。不幸的是,我不能通过内部pom属性激活配置文件,只能通过命令行属性来激活配置文件,但我们不能拥有所有内容;) –