我正在测试一个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文件。
答案 0 :(得分: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'中的值以匹配您的安装) 您还需要使用this patch在sourceforge上修补该版本,因为它有bug with chunked responses
在您的应用程序中,您需要更改代理设置,如下所示:
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=3128 or 5865 depending on which server you installed
有时微软服务器仍会阻止请求,我需要重新启动本地代理或更改父代理地址。
答案 1 :(得分:3)
这是一个相当古老的问题,但仍然是谷歌搜索&#39; gradle&#39;和&#39; ntlm proxy&#39;。关于它的文档不多,但如果gradle抱怨像
这样的话无法获得&#39; https://jcenter.bintray.com/org/slf4j/ ...
并且您使用cntlm作为代理,然后此命令行可能会有所帮助:
gradle test -DproxySet=true -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3128
(假设代理名称和端口的默认值)。注意&#34; https&#34;设置。缺少下载功能已成功使用这些设置。
答案 2 :(得分:0)
我记得过去在NTLM代理背后工作过。当我们处理* nix框时,我们无法使用NTLM代理,因为在这些操作系统中不支持它。我也不认为Gradle支持NTLM,但我可能错了。
无论如何,我们当时使用的东西是(cntlm)[http://cntlm.sourceforge.net/]代理,你可以做同样的事情。只需在您的计算机上进行设置,然后在其上指向Gradle的代理设置。
编辑:显然我错了 - Gradle支持NTLM身份验证,请参阅release notes for 1.0-milestone-8
答案 3 :(得分:0)
Gradle依赖于Apache HttpClient + jcifs来进行NTLM身份验证。
HttpClient 4.2.1和4.2.2中存在一个可能导致问题的错误:您可以尝试两种方法。
systemProp.http.keepAlive="true"
文件中加入gradle.properties
。答案 4 :(得分:0)
看到你有你的maven repo在C:\ ProgramFiles下,而不是在一个典型的可写位置,例如在用户目录中
%USERPROFILE%\.m2\repository || ~/.m2/repository
您的错误可能是Windows权限错误...请务必检查您的Windows日志和/或尝试将您的回购移动到传统位置......
答案 5 :(得分:0)
答案 6 :(得分:0)
这对我有用,正在使用gradle-6.3。将以下内容放入gradle.properties
请注意,通常在登录Windows计算机时会给出域名\用户名,但是要给出的值将是域名/用户名。同样,您的密码也不必进行十六进制编码,如果您的密码包含“等于”字符,则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