2016-07-10 11 views
1

Was ich zu tun suche, ist Java-Annotationsverarbeitung auf Scala-gebauten Klassendateien auszuführen.Ausführen von Java-Quellenanmerkungsverarbeitung auf Scala-basierten Klassendateien

Ich kann das javac durch den Aufruf manuell nach

Aufbau
javac -cp ".../.m2/repository/net/java/sezpoz/sezpoz/1.11/sezpoz-1.11.jar:." \ 
    -proc:only -processor net.java.sezpoz.impl.Indexer6 \ 
    -verbose mypackage.ScalaUseMyAnnotations$Inner 

aber ich will es als Teil eines gradle Build tun. Letztendlich möchte ich, dass Jenkins Plugins in Scala erstellt werden und die Plugins für die Quellennummerierung mit sezpoz verarbeitet werden müssen. Daher Gradle verwenden.

Das ist, was ich bisher, aber es nicht

group 'mytest' 
version '1.0-SNAPSHOT' 

apply plugin: 'java' 
apply plugin: 'scala' 

sourceSets.main.scala.srcDir "src/main/java" 
sourceSets.main.java.srcDirs = [] 

sourceCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

jar { 
    from { 
     (configurations.runtime).collect { 
      it.isDirectory() ? it : zipTree(it) 
     } 
    } 
    manifest { 
     attributes 'Main-Class': 'mypackage.Main' 
    } 
} 

ext { 
    versions = [ 
      scala  : '2.11.8', 
      scalatest : '2.2.6' 
    ] 
} 

task annotate (type: JavaCompile) { 
    source = sourceSets.main.output.classesDir 
    include 'mypackage.ScalaUseMyAnnotations$Inner' 
    classpath = sourceSets.main.compileClasspath 
    destinationDir = sourceSets.main.output.classesDir 
    outputs.upToDateWhen { false } 

    println("[annotate] ${sourceSets.main.output.classesDir}") 
} 

annotate.options.compilerArgs = ['-proc:only', '-processor', 'net.java.sezpoz.impl.Indexer62', '-verbose'] 

task run(type: JavaExec, dependsOn: compileScala) { 
    main = 'mypackage.Main' 
    classpath sourceSets.main.runtimeClasspath 
    classpath configurations.runtime 
} 

compileScala.doLast { 
    tasks.annotate 
} 

dependencies { 
    compile group: 'net.java.sezpoz', name: 'sezpoz', version: '1.11' 
    runtime group: 'org.scala-lang', name: 'scala-library', version: "$versions.scala" 
    compile group: 'org.scala-lang', name: 'scala-library', version: "$versions.scala" 
} 

Die Probleme sind, dass es sie nicht arbeiten zu annotieren scheint die Klassendateien zu finden, funktioniert es auf jeden Fall manuell und es immer denkt Die Aufgabe ist aktuell.

Dies ist der repo aber Scala mag einen letzten Java8 Compiler

Antwort

0

Also das ist, was ich am Ende tat, nachdem dachte viel

task annotate(dependsOn:compileScala, type: Exec) { 
    args '-proc:only' 
    args '-d' 
    args compileJava.destinationDir 
    args '-classpath' 
    args compileJava.classpath.getAsPath() + java.io.File.pathSeparatorChar + compileJava.destinationDir 

    if (logging.level >= LogLevel.INFO) { 
     args '-verbose' 
    } 

    doFirst{ 
     fileTree(compileScala.destinationDir).each { File file -> 
      if(file.path.contains('-')) { 
       return 
      } 
      args file.path.minus(compileScala.destinationDir).minus('.class').substring(1).replaceAll(File.separator,'.') 
     } 
    } 

    executable "javac" 
} 

compileScala.doLast {annotate.execute()} 

Sein vermutlich nicht sehr gradle und ich hatte gehofft, eine zu verwenden, JavaCompile Art Aufgabe.

Das Hauptproblem ist, dass die Klassen ohne die Erweiterung .class zu übergeben haben

ich die repo in Github aktualisiert