Gradle,不在Windows上使用NTLM代理

我只是测试了一个gradle(这个领域的绝对菜鸟)。

我在Windows机器上尝试这个。 我曾经让Maven在同一台机器上为我做构建和发布。 它位于具有NTLM身份validation的代理之后。 过去工作正常。 然而,某种程度上Gradle并没有为我做这件事。

我的build.gradle有以下配置(除了其他)

// Java plugin to build our JAR artifact. apply plugin: 'java' // Build stuff with jdk 1.7 sourceCompatibility = 1.7 targetCompatibility = 1.7 // Regular name and version for your project. group = 'foo.bar.gradle' version = '1.0-SNAPSHOT' // The local maven repository def localMavenRepo = 'file://C:/ProgramFiles/MavenRepository' repositories { // Use the maven central repository. mavenCentral() // ... and the local maven repository. maven { url localMavenRepo } // maven { url 'http://www.springsource.com/repository/' } } dependencies { compile 'org.databene:contiperf:2.2.0','org.springframework:spring-webmvc:3.2.0.RELEASE' testCompile 'junit:junit:4.11' /*compile.exclude module: 'commons'*/ /*all*.exclude*/ } 

我的/gradle.properties具有以下设置

 systemProp.proxySet=true systemProp.http.proxyHost= systemProp.http.proxyPort=8080 systemProp.http.proxyUser=/ 

但是,当我运行它时,我收到以下错误

 NEGOTIATE authentication error: No valid credentials provided (Mechanism level: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt) ) 

这是Gradle的1.3版本。 请帮忙。

更新:我现在已更新为gradle-1.4-rc-3我的gradle.properties文件现在看起来像这样

 systemProp.proxySet="true" systemProp.http.keepAlive="true" systemProp.http.proxyHost= systemProp.http.proxyPort=8080 systemProp.http.proxyUser=/ 

但我仍然继续看到这个问题。 我有更多的日志。 我在STS(IDE)中看到了这一点

 Could not GET 'http://repo1.maven.org/maven2/org/spr...'. Received status code 500 from server: Internal Server Error Could not execute build using Gradle installation 'C:\ProgramFiles\gradle-1.4-rc-3'. 

不,证书没有错。 在相同的设置中,使用相同的值Maven工作正常。 不,gradle.properties也在正确的位置。 如果我更改代理的值,则错误会更改。 因此,该工具肯定是在读取gradle.properties文件。

更新:

随着时间的推移,更好的解

添加wagon-http-lightweight扩展Wagon HTTP轻量级库在使用NTLM代理时处理Maven 3中的身份validation限制。

从maven repo下载wagon-http-lightweight-2.2.jar。 将wagon-http-lightweight-2.2.jar复制到%M2_HOME%/ lib / ext文件夹。

原答案:

我有同样的问题。 这是微软服务器(ISA等)的常见问题。 NTLM不支持您的应用程序中使用的http标头(至少,直接)
为了绕过这个,我使用了“代理到代理”。 一个本地代理,它将动态更改http标头,以便Microsoft服务器可以理解您的请求。

基本上,您将在本地发送请求(127.0.0.1)此代理服务器将更改符合NTLM请求的标头,并将其转发到8080端口上的父代理。

两种情况:您是否拥有Administrators特权。

如果您拥有管理员权限,则可以安装CNTLM它将作为服务安装。 有一个“自动配置”安装,您可以查看CNTLM的维基(默认端口:3128)

如果您没有管理员权限,可以安装NTLM APS (即使它已经很老了,它对我有用)
你需要使用你的NT域,主机,父代理+端口,NTLM_TO_BASIC 1配置server.cfg文件(你可以通过按键盘’windows + pause’按钮获得你的域和主机)默认端口是5865。

对于NTLMAPS,您需要Python(python portable不需要管理员权限,并且更改’runserver.bat’中的值以匹配您的安装),您还需要使用此修补程序修补 sourceforge上的版本,因为它有一个错误大块的回应

在您的应用程序中,您需要更改代理设置,如下所示:

 systemProp.http.proxyHost=127.0.0.1 systemProp.http.proxyPort=3128 or 5865 depending on which server you installed 

有时微软服务器仍会阻止请求,我需要重新启动本地代理或更改父代理地址。

这是一个相当古老的问题,但仍然是谷歌搜索’gradle’和’ntlm proxy’时的第一个点击。 没有太多关于它的文档,但如果gradle抱怨类似的东西

无法获取’ https://jcenter.bintray.com/org/slf4j/

并且您使用cntlm作为代理,那么此命令行可能会有所帮助:

 gradle test -DproxySet=true -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3128 

(假设代理名称和端口的默认值)。 请注意“https”设置。 缺少下载function已成功使用这些设置。

我记得过去在NTLM代理背后工作。 当我们处理* nix框时,我们无法使用NTLM代理,因为在这些操作系统中不支持它。 我也不认为Gradle支持NTLM,但我可能错了。

无论如何,我们当时使用的东西是(cntlm)[http://cntlm.sourceforge.net/]代理,你可以做同样的事情。 只需在您的计算机上进行设置,然后在其上指向Gradle的代理设置即可。

编辑 :显然我错了 – Gradle支持NTLM身份validation,请参阅1.0-milestone-8的发行说明

Gradle依赖于Apache HttpClient + jcifs来进行NTLM身份validation。

HttpClient 4.2.1和4.2.2中存在一个可能导致问题的错误:您可以尝试两种方法。

  • 升级到Gradle 1.4-rc-3或更高版本,其中包含此问题的错误修复程序。
  • gradle.properties文件中包含systemProp.http.keepAlive="true"

看到你有你的maven repo在C:\ ProgramFiles下,而不是在一个典型的可写位置,例如在用户目录中

 %USERPROFILE%\.m2\repository || ~/.m2/repository 

您的错误可能是Windows权限错误…请确保检查您的Windows日志和/或尝试将您的回购移动到传统位置…

我能够修补Gradle核心v1.10以使用BASIC而不是NTLM,它在我们的环境中工作。

如果你想尝试,jar文件就在这里

使用风险由您自己承担。