Gradle compileJava faills sun.net.www.protocol.http.ntlm.NTLMAuthenticationCallback

时间:2017-11-22 18:56:21

标签: java gradle ntlm-authentication

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

代码从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

我发现NTLMAuthenticationCallback类在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'
}

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

我不知道这是否可取,但请尝试使用以下内容(来自here)。使用它在这个问题的一个简单例子中为我工作:

compileJava {
    options.compilerArgs += ["-XDignore.symbol.file", "-Xdoclint:none", "-Xlint:none", "-nowarn"]
    options.fork = true
    options.forkOptions.executable = 'javac'
}

答案 1 :(得分:0)

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

compileJava {
    options.bootClasspath = "${System.env.JAVA_HOME}/jre/lib/rt.jar"
}