Я предпочитаю компилятор 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 исполняемый файл», прежде чем будет найден лучший способ.
И я опубликовал это решение как подключаемый модуль для GitHub надеюсь, это поможет.