2016-07-10 22 views
1

我正在做的是在scala構建的類文件上執行java註釋處理。對Scala構建的類文件運行java源碼註釋處理

我可以手動調用javac的建設

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 

後這樣做,但我想這樣做的gradle這個構建的一部分。最終,我希望這可以在Scala中創建Jenkins插件,並且需要使用sezpoz處理源插件。因此使用Gradle。

這是我有這麼遠,但它不工作

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" 
} 

的問題是,似乎不找到類文件註釋它們,這當然手工作品,它總是認爲該任務是最新的。

這是repo但斯卡拉喜歡最近Java8編譯

回答

0

所以這是我在經過反覆考慮

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()} 

它可能不是很gradle這個最後還是沒買,我曾希望使用JavaCompile類型任務。

的主要問題是,類必須通過在無.class擴展

我更新在github上

回購