Maven / Swagger:生成一个模块(包括POM) - 然后在同一个构建中使用它作为dep?

时间:2015-12-10 23:19:51

标签: java maven swagger

我正在使用swagger-codegen-maven-plugin生成一组存根(java用于客户端,jaxrs用于服务器)。我这样做是通过调用插件来生成两个Maven项目。

然而,生成为每个生成的子项目创建 POM,显然我不能在顶级POM中将它们作为依赖项引用它们,如果它们还不存在的话!

这是怎么回事? Maven是否提供了一种拾取动态生成的子模块的机制?

2 个答案:

答案 0 :(得分:1)

如果您知道子模块的路径和名称,则可能已经预先定义了父pom。

步骤1:创建maven父pom以执行多个子模块。您目前基于招摇的maven构建应该是这个父pom下的子模块。

步骤2:确保父pom中定义的模块的执行顺序是首先执行基于swagger的模块。

第3步:首先运行基于swagger的maven模块。这将生成其他maven项目。根据生成的模块的名称和子项目的路径,您现在可以在父pom中引用它们。

步骤4:从父pom模块运行聚合构建。确保在首次运行聚合构建时已存在子POM的版本。否则maven可能会抱怨缺少模块。我假设maven在启动相应模块之前将子pom文件加载到内存中。所以这应该工作。

Here是多模块构建的一个示例。

答案 1 :(得分:0)

你要去外面的maven可以做什么。 Maven想要在加载父pom时解析所有模块,这是在实际调用codegen插件之前。我建议如下:

  • 创建项目和子模块
  • 在maven插件的的每个子模块中配置pom.xml
  • 让每个子模块直接调用maven插件而不是父模块,并将其配置为写入src/gen/java文件夹以获取输出文件。

jaxrs生成器将保留pom.xml(如果存在),这将允许您更新它,更改依赖关系等。如果Java客户端不遵循该规则,则在codegen项目中提交票证,因为它应该遵循相同的模式。