我更喜欢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
它有效,但看起来有点奇怪:
我想找到一种更加时髦的方式,至少是蚂蚁方式来做到这一点。
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插件,希望它有所帮助。
答案 0 :(得分:0)
看起来它只会针对外部可执行编译器。也许你可以覆盖整个compileJava任务?
task compileJava(overwrite: true) << {
ant. ... (run your ant JDT compiler)
}
我有点不确定是否会产生任何副作用。