Я предпочитаю компилятор 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(',')}"
]
}
Это работает, но выглядит немного странно:
- исполняемый файл компилятора - "java"
- Я должен перенаправить все параметры компиляции в разветвленный исполняемый файл, как параметры командной строки
Я хотел бы найти более заводной способ, по крайней мере, способ сделать это.
Обновлено 31 марта,
Покопавшись в кодах gradle, я обнаружил, что options.compiler
— это единственный способ использовать альтернативный компилятор с ant (в gradle), поскольку AntJavaCompiler
создаст новый экземпляр AntBuilder перед компиляцией, поэтому свойство ant build.compiler
здесь не будет действовать. .
Итак, я применю приведенное выше решение «исполняемый файл Java», прежде чем будет найден лучший способ.
И я опубликовал это решение в виде плагина Gradle на GitHub, надеюсь, оно поможет.