0

sun.net.www.protocol.http.ntlm.NTLMAuthenticationCallback在Java文件中使用。

代码从 Idea 构建并运行良好,但在使用 gradle compileJava 时失败。

我收到此错误:

D:\source\msnavclient\MsNavClient.java:5: error: package sun.net.www.protocol.http.ntlm does not exist
import sun.net.www.protocol.http.ntlm.NTLMAuthenticationCallback;
                                     ^
D:\source\msnavclient\MsNavClient.java:20: error: cannot find symbol
        NTLMAuthenticationCallback.setNTLMAuthenticationCallback(new NTLMAuthenticationCallback()
                                                                     ^
  symbol:   class NTLMAuthenticationCallback
  location: class MsNavClient
D:\source\msnavclient\MsNavClient.java:20: error: cannot find symbol
        NTLMAuthenticationCallback.setNTLMAuthenticationCallback(new NTLMAuthenticationCallback()
        ^
  symbol:   variable NTLMAuthenticationCallback
  location: class MsNavClient
3 errors

我发现NTLMAuthenticationCallbackclass is in jre/lib/rt.jar,并尝试直接在文件中添加依赖项build.gradle,但问题仍然存在。

这是build.gradle文件:

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    // compile files('C:\\Program Files\\Java\\jdk1.8.0_131\\jre\\lib\\rt.jar')

    testCompile group: 'junit', name: 'junit', version: '4.12'
}

有人可以帮忙吗?

4

2 回答 2

0

从@michael-easter 的回答开始,我发现 compileJava 任务不使用 javac 使用的相同过程。并发现这个 workarround 将 rt.jar 包含在类路径中:

compileJava {
    options.bootClasspath = "${System.env.JAVA_HOME}/jre/lib/rt.jar"
}
于 2017-11-22T20:05:47.330 回答
0

我不知道这是否可取,但请尝试使用以下内容(来自此处)。在问题的一个快速示例中使用它对我有用:

compileJava {
    options.compilerArgs += ["-XDignore.symbol.file", "-Xdoclint:none", "-Xlint:none", "-nowarn"]
    options.fork = true
    options.forkOptions.executable = 'javac'
}
于 2017-11-22T19:50:04.387 回答