Я написал интерфейс сервиса vertx в Kotlin, для которого я пытаюсь создать служебные прокси. Однако, кроме создания generated
каталога в src/main
, он ничего не делает.
src/main/java/amb85/portfolio/package-info.java
:
@ModuleGen(name = "portfolio", groupPackage = "amb85.portfolio") package amb85.portfolio; import io.vertx.codegen.annotations.ModuleGen;
Затем у меня есть следующий служебный интерфейс: src/main/kotlin/amb85/portfolio/PortfolioService.kt
:
@VertxGen @ProxyGen interface PortfolioService { companion object { val ADDRESS = "service.portfolio" val EVENT_ADDRESS = "portfolio" } fun getPortfolio(resultHandler: (AsyncResult<Portfolio>) -> Unit) fun buy(amount: Int, quote: JsonObject, resultHandler: (AsyncResult<Portfolio>) -> Unit) fun sell(amount: Int, quote:JsonObject, resultHandler: (AsyncResult<Portfolio>) -> Unit) fun evaluate(resultHandler: (AsyncResult<Double>) -> Unit) }
И соответствующая конфигурация из build.gradle
:
task generateProxies(type: JavaCompile, group: "build", description: "Generates the Vert.x proxies") { // codegen source = sourceSets.main.java source += sourceSets.main.kotlin classpath = configurations.compile + configurations.compileOnly destinationDir = project.file("${projectDir}/src/main/generated") options.compilerArgs = [ "-proc:only", "-processor", "io.vertx.codegen.CodeGenProcessor", "-Acodegen.output=${project.projectDir}/src/main" ] }
Затем я запускаю ./gradlew portfolio:generateProxies
, но ничего кроме generated
каталога.
Можно ли использовать vertx-codegen
для создания служебных прокси на основе интерфейса, написанного в Котлине? Если да, то какие шаги конфигурации мне не хватает? Если нет, есть ли другой способ создания прокси? Еще лучше, есть ли способ сделать это целиком в Котлине, избегая генерации java или используя его в качестве промежуточного шага?
Вероятно, вы должны определить набор источников для generated
. У меня есть отдельный gradle/vertx-codegen.gradle
скрипт gradle/vertx-codegen.gradle
который я включаю там, где это необходимо, и это прекрасно работает (его только для Java, поэтому вам нужно немного его адаптировать):
sourceSets { generated{ java.srcDir "${projectDir}/src/generated/java" } } task generateProxies(type: JavaCompile) { group = "build" description = "Generate Vert.x service proxies" source = sourceSets.main.java classpath = configurations.compile options.compilerArgs = [ "-proc:only", "-processor", "io.vertx.codegen.CodeGenProcessor", "-AoutputDirectory=${projectDir}/src/main" ] destinationDir = file("${projectDir}/src/generated/java") } compileJava{ dependsOn generateProxies source += sourceSets.generated.java } clean { delete += sourceSets.generated.java.srcDirs }
Надеюсь это поможет!
Самый простой способ использовать прокси-серверы kotlin
с kotlin
– использовать классифицированную зависимость processor
kapt и vertx-codegen.
В вашем build.gradle
вы должны добавить следующее:
apply plugin: 'kotlin-kapt' dependencies { kapt "io.vertx:vertx-codegen:$vertx_version:processor" compileOnly "io.vertx:vertx-codegen:$vertx_version" // other deps go here }
Пока что еще ничего не нужно.