Как я могу использовать JDT-компилятор с Gradle 1.0-m9? - PullRequest
3 голосов
/ 25 марта 2012

Я предпочитаю компилятор 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 , Я получил следующее предупреждение (, но все еще работает ):

Свойство CompileOptions.compiler устарело и будет удалено в следующей версии Gradle.Чтобы использовать альтернативный компилятор, задайте для 'CompileOptions.fork' значение 'true', а для 'CompileOptions.forkOptions.executable' - путь к исполняемому файлу компилятора.

Он говорит, что CompileOptions.forkOptions.executable - это новый способ использования альтернативного варианта.компилятор.Однако у JDT-компилятора нет исполняемого файла, и он предназначен для использования с ant.(я прав?)

Итак, я хотел бы знать, как правильно использовать JDT-компилятор с gradle 1.0-m9?

Спасибо.


Обновлено27 марта,

Я нашел способ запустить 'исполняемый файл' компилятора JDT, фактически запустив исполняемый файл Java

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(',')}"
    ]
}

. Это работает, но выглядит немного странно:

  1. исполняемый файл компилятора 'java'
  2. Я должен перенаправить все параметры компиляции на разветвленный исполняемый файл, как параметры командной строки

Я хотел бынайти более изящный способ, по крайней мере, муравейный способ сделать это.


Обновлено 31 марта

После поиска кодов gradle я обнаружил, что options.compiler - единственныйспособ использовать альтернативный компилятор с ant (в gradle), для AntJavaCompiler создаст новый экземпляр AntBuilder перед компиляцией, поэтому свойство ant build.compiler здесь не будет действовать.

Итак, я приму вышеупомянутое решение «java исполняемый файл», прежде чем будет найден лучший способ.

И я опубликовал это решение как подключаемый модуль для GitHub надеюсь, это поможет.

1 Ответ

0 голосов
/ 26 марта 2012

Похоже, что он будет ориентирован только на внешние исполняемые компиляторы. Может быть, вы могли бы просто переопределить всю задачу compileJava?

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

Я немного сомневаюсь, будут ли какие-либо побочные эффекты от этого.

...