Чего я пытаюсь достичь
Я пытаюсь создать свой клиент REST API для Android с помощью генератора OpenAPI из сценария build.gradle. Таким образом, мне не пришлось бы запускать командную строку генератора каждый раз, когда меняются спецификации. В идеале это должно быть сгенерировано, когда я создаю / собираю свое приложение, и исходники должны попадать в папку java (сгенерированный), где сгенерированные источники затем доступны из кода (это то, что происходит с файл BuildConfig.java, например).
Что я пробовал до сих пор
Следуя этой ссылке со своего официального GitHub, вот файл build.gradle, который у меня получился:
apply plugin: 'com.android.application'
apply plugin: 'org.openapi.generator'
...
openApiValidate {
inputSpec = "$rootDir/app/src/main/openapi/my-api.yaml"
recommend = true
}
openApiGenerate {
generatorName = "java"
inputSpec = "$rootDir/app/src/main/openapi/my-api.yaml"
outputDir = "$buildDir/generated/openapi"
groupId = "$project.group"
id = "$project.name-openapi"
version = "$project.version"
apiPackage = "com.example.mypackage.api"
invokerPackage = "com.example.mypackage.invoker"
modelPackage = "com.example.mypackage.model"
configOptions = [
java8 : "true",
dateLibrary : "java8",
library : "retrofit2"
]
}
...
Во-первых, мне никогда не удавалось получить API, сгенерированный с помощью задачи сборки / сборки, даже когда я пытался добавить:
compileJava.dependsOn tasks.openApiGenerate
or
assemble.dependsOn tasks.openApiGenerate
Единственный способ, которым я мог сгенерировать источники, - это вручную запустить задачу openApiGenerate:
Затем, когда я создаю свои источники таким образом, они попадают в папку сборки, но недоступны из моего кода и не отображаются в папке java (сгенерированный):
Затем мне нужно вручную скопировать / вставить сгенерированные исходные файлы в источники моего проекта, чтобы использовать API.
Несмотря на то, что я могу обойти эти проблемы, добавив ручные процедуры, было бы намного легче поддерживать, если бы весь процесс был просто автоматическим. Мне удалось добиться аналогичного результата с другим инструментом, Protobuf. Действительно, моя задача gradle запускается каждый раз, когда я создаю приложение, а источники попадают в папку java (generated), поэтому мне не нужно выполнять дополнительную работу. Однако задача намного проще, поэтому я предполагаю, что основная работа, которую я не могу воспроизвести с помощью OpenAPI Generator, выполняется самим плагином Protobuf.