2017-06-27 3 views
1

Ich habe eine vertx Service-Schnittstelle in Kotlin geschrieben, für die ich versuche, Service-Proxies zu generieren. Abgesehen von der Generierung des Verzeichnisses generated in src/main tut es nichts.Vert.x Service Proxies von Kotlin mit vertx-codegen

src/main/java/amb85/portfolio/package-info.java:

@ModuleGen(name = "portfolio", groupPackage = "amb85.portfolio") 
package amb85.portfolio; 

import io.vertx.codegen.annotations.ModuleGen; 

Ich habe dann die folgende Service-Schnittstelle src/main/kotlin/amb85/portfolio/PortfolioService.kt:

Und die entsprechende Konfiguration von 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" 
    ] 
} 

ich dann ./gradlew portfolio:generateProxies laufen, aber nichts bey ond das Verzeichnis generated.

Ist es möglich, vertx-codegen zu verwenden, um Service-Proxies basierend auf einer in Kotlin geschriebenen Schnittstelle zu generieren? Wenn ja, welche Konfigurationsschritte fehlen mir? Wenn nicht, gibt es eine andere Möglichkeit, die Proxies zu generieren? Noch besser, gibt es eine Möglichkeit, dies komplett in Kotlin zu tun, die Java-Generation zu meiden oder sie als Zwischenschritt zu verwenden?

+0

versuchen, 'package-info.java' in den Ordner mit Kotlin-Quellen anstelle von Java zu verschieben – ledniov

+0

Ich habe es versucht, aber immer noch keine generierten Quellen. – amb85

Antwort

0

Sie sollten wahrscheinlich einen Quellensatz für generated definieren. Ich habe einen separaten Gradle Skript gradle/vertx-codegen.gradle, die ich schließen, wo nötig, und das funktioniert gut (es ist nur für Java, so dass Sie es ein bisschen anpassen sollte):

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 
} 

hoffe, das hilft!

0

Der einfachste Weg zur Verwendung von Vertex-Service-Proxies mit ist die Verwendung kapt und vertex-codegen processor klassifizierte Abhängigkeit.

In Ihrem build.gradle Sie folgende sollte hinzufügen:

apply plugin: 'kotlin-kapt' 

dependencies { 

    kapt "io.vertx:vertx-codegen:$vertx_version:processor" 
    compileOnly "io.vertx:vertx-codegen:$vertx_version" 

    // other deps go here 
} 

Nichts anderes bisher benötigt.