【问题标题】:Sun JPEGImageEncoder compilation in Gradle在 Gradle 中编译 Sun JPEGImageEncoder
【发布时间】:2013-10-01 20:02:47
【问题描述】:

我需要编译一个使用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:\workspace\blabla -g -XDignore.symbol.file -classpath C:\workspace\blabla_lots_of_jars.jar  C:\workspace\tons_of_java_files.java
20:28:16.153 [INFO] [org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler] Compiling with JDK Java compiler API.

但是编译失败。在the other question我发现我应该在gradle文件中添加一行

compileJava.options.useAnt = true

您猜到了,这使得一切都可以编译。调试日志有点不同,但显示参数也正确传递

21:50:34.101 [DEBUG] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:javac] Compilation arguments:
'-d'
'C:\workspace\blabla'
'-classpath'
'tons_of_jars'
'-target'
'1.7'
'-g'
'-XDignore.symbol.file'
'-source'
'1.7'

但是useAnt 将被删除,它看起来像是一个肮脏的黑客。

我在 Win8 上使用最新的 Gradle (1.8) 和 jdk1.7.0_25 - 但我怀疑它是否重要

如何让 Gradle 正确编译我的源代码并尊重我的编译参数?

【问题讨论】:

    标签: java ant gradle


    【解决方案1】:

    据我所知,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"
    }
    

    【讨论】:

    • 它有效,但不适用于 Windows :) 我在更合适的线程 there 中报告了这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2016-12-08
    • 1970-01-01
    • 2014-06-20
    相关资源
    最近更新 更多