Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 参数化Maven多模块构建_Java_Maven_Inheritance_Multi Module - Fatal编程技术网

Java 参数化Maven多模块构建

Java 参数化Maven多模块构建,java,maven,inheritance,multi-module,Java,Maven,Inheritance,Multi Module,我正在寻找一种可能性,以一种我可以替换/指定一些文件(例如UML文件)的方式对多模块构建进行参数化,这些文件在构建过程中使用,以产生不同的输出。 构建过程保持不变,但我希望能够根据输入UML模型生成不同的输出 我有一个多模块项目,它基于UML模型构建了几个JAR。pom结构如下所示: + generation - mod1 - mod2 - mod3 根pom(生成)基于存储在目录/UML中的UML模型生成java源代码(.java)。之后,模块(mod1…3)编译此源代码的不同子

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

我有一个多模块项目,它基于UML模型构建了几个JAR。pom结构如下所示:

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

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

# 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模型,然后激活相关的模型。但那样我就会失去可追溯性


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

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

也就是说,POM中的
属性
有很多可能,然后可以通过命令行传递这些属性:
-Dproperty=value
。看起来您可以将属性传递给生成源代码的任何进程

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


我并不是说这不起作用,但它可能会有问题,在更传统的Maven实现中不能完全发挥作用。

我不完全确定我是否了解您的用例,但您可能希望了解:

  • POM继承:在父模块中定义尽可能多的内容(不同的模块组可以具有相同的父模块)
  • Maven profiles:您可以根据各种潜在约定(甚至项目名称)激活
  • Maven原型:最后,根据您的说法,我认为这可能是可重用项目模板的唯一解决方案

我就在你身边。可追溯性是非常重要的一点。因此,不同的UML模型也打包在JAR中,并由maven进行版本控制。在生成项目中,模块作为依赖项添加,并在生成源阶段解包。最好我只需要指定一个不同的模型依赖项。