我们有Java和Flex项目。我们目前有1个基本POM,其中包含我们想要用于这两个项目的配置。这样做的问题是:Flex项目继承配置,例如,javadoc
和pmd
插件,这是不可取的。
我想把它清理干净,有一个真正的底座POM,然后是一个java-base-pom
和一个flex-base-pom
。但是,在同时具有Flex部件和Java部件的多模块中如何工作呢?
我们自己的应用程序有插件,其中我们使用以下结构:
我的插件
My-Plugin-Client(Flex)
my-plugin-server(Java)
my-plugin
仅包含带有<modules/>
部分的pom.xml
。我会使用my-plugin
pom.xml作为这两个文件的父文件,但是我不能同时使用Java base-pom或flex base-pom作为父文件。解决这一问题的最佳方法是什么?
6条答案
按热度按时间5ktev3wc1#
尽管Maven项目只有一个父级,但它们可以导入任意数量的其他POM,如下所示:
与父代相比,这有两个重要的区别:
1.不会导入导入的POM中定义的插件
1.导入的POM中定义的依赖关系不会添加到当前POM中,只会将依赖关系导入到依赖关系管理部分
但是,如果您的父POM具有
<dependencies>
节,并且您想要将它们包括到您的依赖项中,则可以像常规依赖项一样将父项添加到<dependencies>
节:即使已经导入了相同的依赖项,也必须再次指定版本标记。为了减少重复,可以将其存储在属性中
enxuqcxy2#
一个项目只能有一个父级(与C++中的多重继承不同),但这个父级可以是更大的父级层次结构的一部分。正如其他人指出的那样,你可能会得到这样的东西:
也就是说,我注意到你写道,你的实际问题是:
例如,Flex项目继承了他们不想要的javadoc和pmd的配置。
您应该使用
pluginManagement
元素来避免这种情况:因此,在父pom中,在
pluginManagement
中配置您的插件(例如,javadoc和pmd),并在所需子项的plugins
元素中引用它们(仅在这里的my-plugin-server中)。这会解决你目前的问题。lo8azlld3#
唯一的方法是将base-pom作为Java-base-pom和flex-base-pom的父级。
我的 Spring 项目也有类似的结构:
du7egjpx4#
我也遇到了这个问题,我找到的最好的解决方案是使用继承和聚合,就像这个问题中建议的那样:does maven support multiple parents (multiple inheritance) ?
您可以拥有一个聚合器POM,该聚合器POM不是它聚合的项目的父级。
并在Maven文档中进行解释
继承和聚合通过单个高级POM(...)创建了一个很好的动态来控制构建相反,POM项目可能会聚合不是从它继承的项目。
从这里我继承了POMS(POM-master包含公社配置,每个孩子都有具体的配置):
因此,我的项目可以根据需要获取每个模块配置的详细信息:
希望它也能帮助其他人:)
bihw5rsg5#
想象一下
pom.xml
实际上是Java类:您只能有一个父类(或扩展一个类),但这个父类也可以有另一个父类,依此类推。正如我在这里所解释的,您必须区分Maven中的父项目和聚合原则,这意味着my-plugin将被视为聚合项目,而不一定是my-plugin-Client和my-plugin-Parent的父项目。
因此,总结一下:
my-plugin
将为您的所有项目定义基本POM。然后,创建两个新的pom项目:java-base-pom
和flex-base-pom
。它们都有my-plugin
作为父代。现在,my-plugin-client将使用java-base-pom
作为父对象,而my-plugin-server将使用flex-base-pom
作为父对象。这样,my-plugin-client将继承
my-plugin
pom.xml中定义的所有属性,也继承java-base-pom
项目中定义的所有属性。c8ib6hqw6#
您可以使用配置文件实现多重继承:
您可以在根pom中创建(多个)配置文件,并自动激活这些配置文件的任何变体,从而实现对maven配置的多重继承。