参数化Maven多模块构建

时间:2013-09-06 10:36:45

标签: java maven inheritance multi-module

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

我有一个多模块项目,可以根据UML模型构建几个jar。 pom结构如下:

+ generation
  - mod1
  - mod2
  - mod3

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

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

# 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模型,然后激活相关的模型。但是我会以这种方式失去可追溯性。

也许一种全新的方法会更好...任何建议?

2 个答案:

答案 0 :(得分:0)

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

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

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

我不是说这不起作用,但它可能会变得毛茸茸,而且在更传统的Maven实现中不能完全发挥。

答案 1 :(得分:0)

我不完全确定我理解您的用例,但您可能需要查看:

  • POM继承:在父模块中尽可能多地定义(不同的模块组可以拥有相同的父模块)
  • Maven个人资料:您可以根据所有类型的潜在约定激活,甚至是项目名称。
  • Maven Archetypes :最后我想基于你的说法这可能是可重用项目模板的唯一解决方案