如何将 spring XD 与其他框架相结合?

How to combine spring XD with another framework?

我正在尝试使用另一个专有的 Java 框架编写一个 spring xd 模块。 springxd和这个专有的框架都要求我继承他们的父POM,这显然是不可能的。

我的解决方法是找出 Spring XD 父 pom 的作用,并将其或多或少地放入我的层次结构中的另一个 pom。我如何获得这个 XD 父 pom?或者有更好的方法吗?

你是对的,在 Maven POM 中不支持 "multiple inheritance"。您也无法控制 Spring XD 或其他专有框架的代码,因此您无法更改一个 pom.xml 以继承另一个。

一个可能的解决方法是将您的项目构建为 multi-module 项目,其中一个模块继承自 Spring XD 的 POM,另一个模块继承自其他框架的 POM。然后您可能会有第三个模块,它依赖于前两个模块,它将整个项目联系在一起成为一个单一的可交付成果。

MyProject
|-- MySpringXDIntegration
|   `-- pom.xml inherits from Spring XD
|-- MyProprietaryFrameworkIntegration
|   `-- pom.xml inherits from proprietary framework
`-- MyApplication
    `-- pom.xml inherits from neither Spring XD nor proprietary framework
        depends on MySpringXDIntegration
        depends on MyProprietaryFrameworkIntegration

如果由于某些其他原因这种项目结构不充分,则另一种解决方法是 "inlining" 两个父 POM 之一的相关部分。 Spring XD 父级 pom.xml 可见 here。对于专有框架,如果已经给你源代码,你可以去那里看看。如果没有,那么您可以简单地使用 jar xf 解压该框架的 jar,然后查找捆绑在其中的 pom.xml。我建议确定 2 个 pom.xml 文件中哪个更大。从较大的继承,然后将较小的 copy-pasting 部分的相关位内联到您自己的 pom.xml.

要准确了解父 POM 的作用,一种方法是创建一个从其继承的虚拟项目,然后 运行 mvn help:effective-pom。如果父 POM 已经拥有自己的深度继承链,这将特别有用。