在Scala构建的类文件上运行java源代码注释处理

时间:2016-07-10 11:04:17

标签: java scala gradle annotations

我要做的是对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,但Scala喜欢最近的Java8编译器

1 个答案:

答案 0 :(得分:0)

所以这就是我经过多次思考后最终做的事情

var input = $('#input');

$('button[id^=type-]').on('click', function() {
  var type = $(this).attr('id').replace('type-', '');

  if (type === 'file') {
    var newElement = document.createElement('input');
    newElement.type = type;
    newElement.id = input.attr('id');

    input.replaceWith(newElement);
    input = $('#input');
  } else {
    input.attr('type', type);
  }

  $('#debug-info').html(
    'Trying to change the input type to <strong>' + type + '</strong>.<br>' +
    'Actual input type is <strong>' + input.attr('type') + '<strong>.'
  );

  if (type == input.attr('type')) {
    $('#debug-info').css('color', 'green');
  } else {
    $('#debug-info').css('color', 'red');
  }
});

它可能不是很平常,我原本希望使用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()} 类型的任务。

主要问题是必须在没有.class扩展名的情况下传递类

我更新了github中的repo