Vert.x Service Proxies от Kotlin с vertx-codegen

Я написал интерфейс сервиса 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 } 

Пока что еще ничего не нужно.