来自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 }
希望这可以帮助!