3

我正在寻找一种可能性来参数化多模块构建,以便我可以替换/指定在构建期间使用的一些文件(例如 UML 文件)以产生不同的输出。构建过程保持不变,但我希望能够根据输入的 UML 模型产生不同的输出。

我有一个基于 UML 模型构建多个 jar 的多模块项目。pom 结构如下所示:

+ generation
  - mod1
  - mod2
  - mod3

根 pom(生成)基于存储在目录 /uml 中的 UML 模型生成 java 源代码 (.java)。之后模块 (mod1...3) 编译此源代码的不同子集并将输出打包为 jar。

我想重用这个构建过程并将其应用于不同的 UML 模型。如何在其他maven项目中重用multimodule项目中定义的整个生成、编译和打包过程?

# Generate jars based upon the foo UML model
+ generation-foo
  /uml/foo.uml

# Generate jars based upon the bar UML model
+ generation-bar
  /uml/bar.uml

更新
我可以在生成项目中使用配置文件来定义不同的输入 uml 模型,然后激活相关的。但那样我会失去可追溯性。

也许一个全新的方法会是一个更好的主意......有什么建议吗?

4

2 回答 2

0

我不完全确定我了解您的用例,但您可能想看看:

  • POM继承:在父模块中尽可能多地定义(不同的模块组可以有相同的父模块)
  • Maven 配置文件:您可以根据各种可能的约定(甚至是项目名称)进行激活。
  • Maven Archetypes:最后我认为根据你的说法,这可能是可重用项目模板的唯一解决方案
于 2013-09-06T15:49:38.447 回答
0

从概念上讲,我会说,Maven 是围绕 POM 文件设计的,POM 文件是正在构建的项目的模型。与其说是对输入应用函数并在此基础上产生输出的过程描述,不如说是过程描述。

话虽这么说,POM 中有很多可能properties,然后可以在命令行上传递:-Dproperty=value. 看起来您可以将该属性传递给生成源代码的任何进程。

不过,我可能会表示一些谨慎。我在您描述的整体设计中看到了一些可能的危险信号。如果模块(无论它们的继承关系如何)传递文件/文件夹,则最好通过installation。所以,如果你这样做,你最终会在你的本地存储库中得到一个你不知道它是什么的父项目的版本。使用了哪些参数?那么该工件的用户将如何处理呢?

我并不是说这行不通,但它可能会变得很麻烦,并且在更传统的 Maven 实现中不能完全发挥作用。

于 2013-09-06T11:40:34.400 回答