在生成的源代码目录中编译生成的Maven项目

4
我正在使用Swagger Codegen Maven插件生成一个完整的Maven项目(带有自己的pom.xml)。它将项目输出到generated-sources/swagger/目录。然而,该目录中的Java源代码是针对我的生成器项目pom.xml中的依赖项编译的,而不是生成的pom.xml文件中的依赖项。
这种配置是否可行?我已经阅读了关于Maven Antlr4和Build Helper插件的内容,但它们似乎对此目的没有用处。

生成的项目是如何构建的?我没有使用过Swagger,但我猜想如果您尝试在Maven生成代码的同一次调用中构建生成的项目,那么使用的依赖项来自生成器的pom文件并不奇怪。然而,如果实际的构建是在Maven的另一个调用中完成的,那么这似乎非常奇怪。 - Joakim Z
1
实际上,maven-compiler-plugin默认会编译generated-sources目录下的源代码。也许在这种情况下值得尝试maven invoker插件。 - px5x2
一个解决方案,虽然不是特别好的一个,就是重命名任何一个项目中使用的依赖项,使得它们在项目之间是唯一的。这样就不会有混淆了。顺便问一下,这些依赖项是项目内部使用的吗?否则我真的看不出来问题在哪里。 - Joakim Z
1个回答

2
使用 openapi-generator-maven-plugin 生成源代码,然后使用 maven-invoker-plugin 构建和测试生成的源代码。
 <plugin>
   <groupId>org.openapitools</groupId>
   <artifactId>openapi-generator-maven-plugin</artifactId>
   <version>${openapi-generator-maven-plugin.version}</version>
   <executions>
     <execution>
       <goals>
         <goal>generate</goal>
       </goals>
       <configuration>
         <inputSpec>swagger.yaml</inputSpec>
         <generatorName>java</generatorName>
         <skipValidateSpec>true</skipValidateSpec>
         <output>${project.build.directory}/generated-sources/openapi</output>
       </configuration>
     </execution>
   </executions>
 </plugin>

 <plugin>
   <artifactId>maven-invoker-plugin</artifactId>
   <version>${maven-invoker-plugin.version}</version>
   <configuration>
     <pom>${project.build.directory}/generated-sources/openapi/pom.xml</pom>
   </configuration>
   <executions>
     <execution>
       <phase>process-sources</phase>
       <goals>
         <goal>run</goal>
       </goals>
     </execution>
   </executions>
 </plugin>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接