【问题标题】:How to tell Maven to compile auto-generated maven modules?如何告诉 Maven 编译自动生成的 Maven 模块?
【发布时间】:2015-08-22 20:39:43
【问题描述】:

在我正在进行的一个项目中,我们在一个名为 api/ 的文件夹中自动生成接口 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 文件夹是空的,因为它将在 generate-code Maven 阶段由代码生成器填充。

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

如果我指定一个不存在的<module>,maven verify 会报错。

谢谢

【问题讨论】:

    标签: maven code-generation maven-module


    【解决方案1】:

    我相信解决方案取决于 API 列表的灵活性

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

    【讨论】:

      【解决方案2】:

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

      然后我认为这对您很重要,如果您的代码发生更改导致一个或多个 API 发生更改,我将运行生成器。如果您需要在 repo 中反映这个更改的 api,您仍然可以安装更改的模块。

      我知道这可能不是您想要做的,但我很确定您采用“保守的方式”会遇到更少的问题。

      【讨论】:

      • 我不太明白你的意思。也许在帖子中并不清楚,但我们总是从 UML 模型生成所有 api。这意味着当我们从 build 文件夹调用 maven clean install 时,代码生成器在 generate-code 阶段被触发,只有在它之后,模块才可以使用。
      • 嗯,也许我没有说清楚。我认为你正在走一条让你的生活变得不必要的艰难道路。如果您尝试动态生成和构建项目,那么您至少总是会遇到所有需要引用这些项目的问题。(例如您的聚合项目或任何客户项目)。我的建议是创建项目(生成与否无关紧要),像往常一样安装和使用它们。所以不要将项目创建部分与构建过程混为一谈,这会给你带来严重的麻烦,而且回报很少。
      猜你喜欢
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2012-11-16
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多