2015-06-08 61 views
0

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

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验证会发生抱怨。

感谢

回答

0

如果这是我的计划,我将宣布在POM静态模块的引用(模块/模块API-1模块API-2 ...),也有基于模块项目处于生成状态,因此理论上可以编译而不生成apis。所以我说的是 - 把这些模块当成完整的模块项目。

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

我知道这并不是你想要做的事情,但我敢肯定,在采取“保守的方式”时,你会遇到更少的问题。

+0

我并不真正了解您的观点。也许在帖子中并不清楚,但我们总是从UML模型中生成所有apis。这意味着当我们从build文件夹中调用maven clean install时,代码生成器会在生成代码阶段被触发,并且只有在它之后,模块才会被使用。 – slux83

+1

嗯,也许我没有让自己清楚。我认为你正在走一条让你的生活变得不必要的道路。如果您试图动态生成和构建项目,那么您至少总是会遇到需要引用这些项目的所有项目的问题(如您的聚合项目或任何客户端项目)。 我的建议是创建项目(生成或不是不重要),像往常一样安装和使用它们。所以不要将项目创建部分与构建过程混合在一起,它会给你带来严重的麻烦,而且几乎没有任何回报。 –

1

我相信,分辨率取决于API的列表

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