Gradle,不在Windows上使用NTLM代理

par*_*tha 9 java gradle

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

我在Windows机器上尝试这个.我曾经让Maven在同一台机器上为我做构建和发布.它位于具有NTLM身份验证的代理之后.过去工作正常.然而,不知何故,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*/ 
}
Run Code Online (Sandbox Code Playgroud)

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

systemProp.proxySet=true
systemProp.http.proxyHost=<proxy name, same as that set in Maven>
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=<domain name>/<user name> 
Run Code Online (Sandbox Code Playgroud)

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

NEGOTIATE authentication error: No valid credentials provided (Mechanism level:
No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)
)
Run Code Online (Sandbox Code Playgroud)

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

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

systemProp.proxySet="true"
systemProp.http.keepAlive="true"
systemProp.http.proxyHost=<proxy name> 
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=<domain name>/<username> 
Run Code Online (Sandbox Code Playgroud)

但我仍然继续看到这个问题.我有更多的日志.我在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'.
Run Code Online (Sandbox Code Playgroud)

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

Rig*_*802 10

更新:

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

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

从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端口上的父代理.

两种情况:您是否拥有管理员权限.

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

如果您没有管理员权限,则可以安装NTLM APS(即使它已经很老了,它适用于我)
您需要使用NT域,主机,父代理+端口,NTLM_TO_BASIC 1配置server.cfg文件(您可以通过按键盘上的"Windows +暂停"按钮获取您的域名和主机,默认端口为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
Run Code Online (Sandbox Code Playgroud)

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


erd*_*rdi 0

我记得过去在 NTLM 代理后面工作。当我们在 *nix 盒子上工作时,我们无法使用 NTLM 代理,因为这些操作系统不支持它。我也不认为 Gradle 支持 NTLM,但我可能是错的。

不管怎样,我们当时使用的是 (cntlm)[http://cntlm.sourceforge.net/] 代理,你也可以做同样的事情。只需在您的计算机上进行设置并将 Gradle 的代理设置指向它即可。

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