【问题标题】:Can you refactor Maven pom.xml files into reusable XML fragments?你能将 Maven pom.xml 文件重构为可重用的 XML 片段吗?
【发布时间】:2011-05-09 11:07:48
【问题描述】:

在 Maven 中,是否可以将经常重复的片段重构为可重用的“库”(插件)?我意识到我可以编写自己的插件,但通常我想要重用的功能已经在 pom.xml 中表示为片段,我的自然倾向是重用机制应该保留这些片段 作为 XML。

案例我一直在使用一个过程 (partly described here) 从 Jersey/JAX-RS 源代码生成 WADL 文件,然后从该 WADL 和源代码生成开发人员文档-code自己的Javadoc。该页面上的过程描述了两个插件的执行,我正在使用第三个插件 (org.codehaus.mojo:exec-xsltproc) 和我自己的 XSL 文件将 WADL 转换为 HTML。

我在几个 Maven 项目中使用过这个过程。样板文件位于100 lines of XML。项目之间的变化仅仅是相关源代码的包名称(链接样板中的com.example.myapp.rest)。因此,不可能将其移动到父 pom 或任何其他不允许参数化的机制中。

我想要的是将这 100 行(和一个 XST 文件)聚合、模板输出或以其他方式重构到一个公共位置。我意识到可重用的 Maven 执行是通过 Maven 插件交付的。理想情况下,我不必编写任何 Java(或 Groovy)来重新表达我已经用 XML 表达的内容。

是否可以将 Maven pom.xml 文件重构为 XML?

【问题讨论】:

    标签: xml maven-2 refactoring maven-plugin


    【解决方案1】:

    您说得对,这并不像应有的那么容易。 “mixins”——准确地描述了这种能力——已经在 Maven 路线图中出现了一段时间。

    假设所有这些项目共享一个共同的祖先,您可以使用父 POM 来共享它们。您可以只配置不同的元素,它将与其余元素合并,或者您可以为其分配一个在使用位置定义的属性值。我知道这通常不适合这个用例,因为父级描述的是结构而不是项目的类型。

    另一种选择是为此类项目创建原型。这允许您定义一次并生成到新项目中,但它不是直接重用的东西。

    目前最好的解决方案可能是自定义插件 - 我相信这是 Don Brown 编写 mojo-executor 插件的灵感,该插件现在位于:https://github.com/TimMoore/mojo-executor。但是,是的,你需要 Java/Groovy :)

    【讨论】:

      【解决方案2】:

      与您在 Maven 之旅中遇到的大多数问题一样,答案是 Ant。

      创建一个完全符合您要求的 Ant 构建脚本,然后通过 maven-antrun-plugin 调用它。

      由于 maven 可用的所有属性在目标配置中也可用,因此您可以通过 maven 属性配置构建脚本。

      Maven:0, 蚂蚁:1。

      QED。

      【讨论】:

      • 您的方法不允许使用现有的 Maven 插件(如上例所示),是吗?
      • 你能把这 3 个 maven 插件改成等效的 Ant 任务吗?
      【解决方案3】:

      您可能可以创建一个仅 pom 的项目,在其中添加这 100 行,然后通过 标记将它们继承到您的项目中..

      【讨论】:

      • 这是一种可行的小方法(我在问题中暗示过)。缺点是您只能这样做一次 - 例如,您不能将多个父母组合在一起。
      • 您可以创建一个链接层次结构 .. 这会有点混乱,但应该可以工作。 parent1->parent2->parent3->你的模块
      【解决方案4】:

      Maven Tiles Plugin。对我来说效果很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-09
        • 2015-01-31
        • 2015-11-12
        • 2011-01-21
        • 1970-01-01
        • 2013-10-14
        • 1970-01-01
        • 2017-03-21
        相关资源
        最近更新 更多