我正在使用OpenAPI生成器maven插件和kotlin-spring生成器根据规范为我的API生成接口。
作为一个例子,我使用了这篇博文的规范和下面的插件配置:
<plugin>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>5.1.0</version>
<executions>
<execution>*
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputSpec>
${project.basedir}/src/main/resources/petstore.yml
</inputSpec>
<generatorName>kotlin-spring</generatorName>
<modelNameSuffix>Dto</modelNameSuffix>
<configOptions>
<basePackage>com.example</basePackage>
<apiPackage>com.example.api</apiPackage>
<modelPackage>com.example.model</modelPackage>
<configPackage>com.example.config</configPackage>
<delegatePattern>true</delegatePattern>
<interfaceOnly>true</interfaceOnly>
<supportingFilesToGenerate>
ApiUtil.kt
</supportingFilesToGenerate>
</configOptions>
</configuration>
</execution>
</executions>
</plugin>
当我运行mvn clean generate-sources
时,文件在target/generated-sources/openapi/...
中正确生成。
然后在我的src
文件夹中创建一个代理的实现,在那里我可以覆盖生成的接口的方法:
package com.example.api
class PetsApiDelegateImpl : PetsApiDelegate {
}
到目前为止,一切都很好,IntelliJ也很高兴。但是,当我运行mvn clean compile
时,target
文件夹被删除并按预期重新生成,但我仍然收到一个错误:
[ERROR] Failed to execute goal org.jetbrains.kotlin:kotlin-maven-plugin:1.5.31:compile (compile) on project choreographer: Compilation failure
[ERROR] /path/to/example/src/main/kotlin/com/example/api/PetsApiDelegateImpl.kt:[3,29] Unresolved reference: PetsApiDelegate
换句话说,这些文件是作为mvn clean compile
的一部分生成的,但是由于没有找到接口,编译仍然失败。
我怎样才能成功地编译这个项目?
我们可以通过将编译目标的执行添加到配置生成目录为源目录的kotlin-maven-plugin
中来解决编译失败。
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.build.directory}/generated-sources/kotlin/src/main/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>