来自Kotlin的vert.x服务代理与vertx-codegen

我在Kotlin写了一个vertx服务接口,为此我试图生成服务代理。 但是,除了在src/main generated目录之外,它什么也不做。

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生成基于Kotlin编写的接口的服务代理? 如果是这样,我缺少什么配置步骤? 如果没有,是否有其他方式来生成代理? 更好的是,是否有一种方法可以完全在Kotlin中完成,避免了Java代或将其用作中间步骤?

你可能应该定义一个generated的源集。 我有一个单独的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 } 

希望这可以帮助!