У меня есть проект Java Gradle, который использует API, указанный OpenAPI. Я использовал плагин org.openapi.generator
, который генерирует исходники, а также полный модуль Gradle.
Я ожидаю, что есть способ определить шаги создания, компиляции, jar, чтобы другие модули зависели от сгенерированного модуля.
I.e.
# api/build.gradle:
plugins {
id 'java'
id "org.openapi.generator" version "5.0.0"
}
repositories {
mavenCentral()
}
dependencies {
testImplementation group: 'junit', name: 'junit', version: '4.12'
}
compileJava.dependsOn "openApiGenerate"
openApiGenerate {
generatorName = "java"
inputSpec = "$projectDir/src/main/openapi/spec.yaml".toString()
outputDir = "$buildDir/generated"
apiPackage = "com.example.api"
invokerPackage = "com.example.api.invoker"
modelPackage = "com.example.api.model"
configOptions = [
dateLibrary: "java8",
library : "native"
]
groupId = "com.example"
id = "api"
}
gradlew api:openApiGenerate
генерирует (лишние файлы исключены):
api/build/generated/
├── build.gradle
├── pom.xml
├── settings.gradle
└── src
├── main/java/...
└── test/java/...
Есть ли способ делегировать, включить или зависеть от этого сгенерированного модуля из других модулей в проекте? Сгенерированный модуль имеет надежную group:artifact:version
координату.
Т.е. Я хотел бы иметь возможность указать com.example:api:1.0
в другом месте проекта.
Я прочитал https://docs.gradle.org/current/userguide/composite_builds.html, поскольку это было похоже на то, что я ожидал, но я новичок в Gradle, и это было немного слишком глубоко.
Я пробовал переопределить основной и тестовый исходные наборы в api/build.gradle
, но мне не нравится копировать и вставлять зависимости из api/build/generated/build.gradle
.
Я нашел https://docs.gradle.org/current/userguide/declaring_dependencies.html#sec:dependency-types, который включает в себя дразнящий пример, но падает, поскольку это зависимость только от источника.
dependencies {
implementation files("$buildDir/classes") {
builtBy 'compile'
}
}
Я просмотрел этот пример, но как мне зависеть от проекта (api/build/generated/
), который еще не существует?
dependencies {
implementation project(':shared')
}