如何在Gradle 1.0-m9中使用JDT编译器?

时间:2012-03-25 14:03:28

标签: gradle eclipse-jdt

我更喜欢Eclipse JDT编译器到javac,而使用gradle-1.0-m7及更早版本,它可以这样工作:

compileJava {
    options.compiler = "org.eclipse.jdt.core.JDTCompilerAdapter"
    options.encoding = 'utf-8'
    options.define(compilerArgs: ["-warn:+${warnings.join(',')}"])
    doFirst {
        ClassLoader antClassLoader = org.apache.tools.ant.Project.class.classLoader
        configurations.ecj.each { File f ->
            antClassLoader.addURL(f.toURI().toURL())
        }
    }
}

但是使用 gradle-1.0-milestone-9 ,我收到了以下警告(但仍有效):

{Grader}的下一个版本中{{1>}属性已被弃用,将被删除。要使用备用编译器,请将“CompileOptions.compiler”设置为“true”,将“CompileOptions.fork”设置为编译器可执行文件的路径。

它说CompileOptions.forkOptions.executable是使用替代编译器的新方法。但是,JDT编译器没有可执行文件,并且它被设计为与ant一起使用。 (我是对的吗?)

所以我想知道使用gradle 1.0-m9的JDT编译器的正确方法是什么?

感谢。


3月27日更新,

我找到了一种运行JDT编译器'可执行文件'的方法,实际上是通过运行java可执行文件

CompileOptions.forkOptions.executable

它有效,但看起来有点奇怪:

  1. 编译器可执行文件是'java'
  2. 我必须将所有编译选项重定向到分叉的可执行文件,作为命令行参数
  3. 我想找到一种更加时髦的方式,至少是蚂蚁方式来做到这一点。


    3月31日更新,

    在深入研究gradle代码之后,我发现compileJava.doFirst { def ecjJar = configurations.ecj.singleFile options.fork = true options.fork executable: 'java', jvmArgs: [ '-cp', ecjJar.path, 'org.eclipse.jdt.internal.compiler.batch.Main' ] options.define compilerArgs: [ '-encoding', 'utf-8', '-source', sourceCompatibility, '-target', targetCompatibility, "-warn:+${warnings.join(',')}" ] } 是使用ant(在gradle中)的替代编译器的唯一方法,因为options.compiler将在编译之前创建一个新的AntBuilder实例,因此ant属性AntJavaCompiler在此处不起作用。

    所以,在找到更好的方法之前,我将应用上面的“java可执行”解决方案。

    我已将此解决方案发布为GitHub上的gradle插件,希望它有所帮助。

1 个答案:

答案 0 :(得分:0)

看起来它只会针对外部可执行编译器。也许你可以覆盖整个compileJava任务?

task compileJava(overwrite: true) << {
    ant. ... (run your ant JDT compiler)
}

我有点不确定是否会产生任何副作用。