如何告诉Maven编译自动生成的maven模块?

时间:2015-06-08 11:37:19

标签: maven code-generation maven-module

在我正在开发的项目中,我们在名为api /的文件夹中自动生成interfaces API,其中包含多个子文件夹,其中每个子文件夹都有一个能够编译模块内容的pom文件。

project-root
  - api
    - module-api-1
      - pom.xml
    - module-api-2
      - pom.xml
    - module-api-3
      - pom.xml
    - module-api-4
      - pom.xml
  - build
    - pom.xml

基本上,pom.xml触发代码生成器,然后生成所有api / *模块。当我在文件夹build /中运行maven clean install时,api文件夹为空,因为它将由生成代码Maven阶段的代码生成器填充。

有没有办法告诉build / pom.xml在同一个版本中处理api中的模块(名称已知)?

如果我指定一个不存在的<module>,maven验证会抱怨。

由于

2 个答案:

答案 0 :(得分:1)

我认为解决方案取决于API列表的灵活性

  • 如果API模块列表是动态的,则根本不可能声明对特定模块的依赖 - 没有人事先知道它们。我会考虑生成源文件夹并将它们添加到单个模块中。因此,您将拥有单个一体化模块,该模块将包含所有生成和编译的代码。其他项目可以将其用作依赖
  • 如果修复了API模块列表,则不应生成声明GAV的POM文件。然后其他项目可以使用它们中的任何一个作为依赖项,尽管它们的代码仅在构建期间生成

答案 1 :(得分:0)

如果是我的项目,我会在pom(modules / module-api-1 module-api-2 ...)中声明对模块静态的引用,并且还将模块-Projects置于生成状态,以便它理论上可以在不生成apis的情况下编译。所以我要说的是 - 只需将这些模块视为完整的模块项目。

然后我认为这对你很重要,如果你在一个或多个api中导致变化的代码有变化,我会运行Generator。如果您需要在仓库中反映这个已更改的api,您仍然可以安装更改的模块。

我知道这可能不是你想做的事情,但我很确定你会采取更少的问题&#34;保守的方式&#34;。