我需要编译一个使用com.sun.image.codec.jpeg
包及其好友的代码。我知道,我知道,这是我们公司的遗留代码,我们需要按原样编译它。我的问题是 - Eclipse 编译这些文件没有问题,它只是工作。IDEA做同样的事情 - 编译和工作。问题是 Gradle - 它给了我这样的错误
error: package com.sun.image.codec.jpeg does not exist
我知道 - 将-XDignore.symbol.file
添加到编译器。
我做了
compileJava.options.compilerArgs.add '-XDignore.symbol.file'
在我的build.grade中,我变成了详细模式,我看到参数被正确传递
20:28:16.148 [DEBUG] [org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler] Compiler arguments: -d C:workspaceblabla -g -XDignore.symbol.file -classpath C:workspaceblabla_lots_of_jars.jar C:workspacetons_of_java_files.java
20:28:16.153 [INFO] [org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler] Compiling with JDK Java compiler API.
但编译失败。在另一个问题上,我发现我应该在 gradle 文件中添加一行
compileJava.options.useAnt = true
你猜对了,这使得一切都在编译。调试日志有点不同,但显示参数也正确传递
21:50:34.101 [DEBUG] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:javac] Compilation arguments:
'-d'
'C:workspaceblabla'
'-classpath'
'tons_of_jars'
'-target'
'1.7'
'-g'
'-XDignore.symbol.file'
'-source'
'1.7'
但是useAnt
将被删除,这似乎是一个肮脏的黑客。
我在Win8上使用最新的Gradle(1.8(和jdk1.7.0_25 - 但我怀疑这很重要
如何让 Gradle 正确编译我的源代码并尊重我的编译参数?
我所知,JDK 编译器 API(这是JavaCompile
任务使用的(静默地忽略了 -XDignore.symbol.file
标志(我也在其他一些选项中看到了这一点(。目前,我知道的唯一解决方案是回退到基于 Ant 的编译器,即使它已被弃用。
编辑:另一种选择是强制JavaCompile
任务使用javac
命令行编译器:
compileJava {
options.fork = true
options.forkOptions.executable = "javac" // assumes that javac is on PATH
options.compilerArgs << "-XDignore.symbol.file"
}