10

我只是在测试一个 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*/ 
}

我的 /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> 

但是,当我运行它时,出现以下错误

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=<proxy name> 
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=<domain name>/<username> 

但我仍然继续看到这个问题。我还有一些日志。我在 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 文件。

4

7 回答 7

11

更新:

随着时间的推移,更好的解决方案:

添加 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 标头。
为了绕过这个,我使用了“proxy-to-proxy”。一个本地代理,它将动态更改 http 标头,以便 Microsoft 服务器可以理解您的请求。

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

两种情况:您是否拥有管理员特权。

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

如果您没有管理员权限,您可以安装NTLM APS(尽管它很旧,但对我有用)
您需要使用您的 NT 域、主机、父代理 + 端口、NTLM_TO_BASIC 1 配置 server.cfg 文件(您可以通过按键盘上的“Windows + 暂停”按钮来获取您的域和主机)默认端口是 5865。

对于 NTLMAPS,您需要 Python(python 便携版不需要管理员权限,并更改 'runserver.bat' 中的值以匹配您的安装),您还需要使用此补丁修补sourceforge 上的版本,因为它有一个错误分块响应

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

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

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

于 2013-01-29T14:32:28.100 回答
4

这是一个相当古老的问题,但在谷歌搜索“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”设置。缺少的下载在这些设置下成功运行。

于 2015-10-13T17:52:40.480 回答
1

这对我有用,我使用的是 gradle-6.3。将以下内容放在 gradle.properties

请注意,我们通常在登录 Windows 机器时提供 domain-name\user-name,但要提供的值将是 domain-name/user-name。此外,您的密码不需要是十六进制编码的,如果您的密码包含“等于”字符,gradle 会选择所有值“之后”第一个“=”(从左侧)作为您的密码。

systemProp.http.proxyHost=proxy-ip-or-name
systemProp.http.proxyPort=proxy-port 
systemProp.http.proxyUser=domain-name/user-name 
systemProp.http.proxyPassword=your-password-without-any-encoding

systemProp.https.proxyHost=proxy-ip-or-name 
systemProp.https.proxyPort=proxy-port 
systemProp.https.proxyUser=domain-name/user-name 
systemProp.https.proxyPassword=your-password-without-any-encoding
于 2020-05-01T15:55:54.440 回答
0

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

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

使用风险自负。

于 2014-02-04T11:45:58.857 回答
0

Gradle 依赖 Apache HttpClient + jcifs 进行 NTLM 身份验证。

HttpClient 4.2.1 和 4.2.2 中有一个错误可能会导致问题:有 2 个选项供您尝试。

  • 升级到Gradle 1.4-rc-3或更高版本,其中包含针对此问题的错误修复。
  • 包含systemProp.http.keepAlive="true"在您的gradle.properties文件中。
于 2013-01-25T05:18:35.403 回答
0

看到您的 maven 存储库位于 C:\ProgramFiles 下,而不是典型的可写位置,例如用户目录

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

您的错误可能是 Windows 权限错误...确保检查您的 Windows 日志和/或尝试将您的存储库移动到传统位置...

于 2013-01-29T05:21:32.187 回答
0

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

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

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

于 2013-01-22T13:25:53.423 回答