我们有一个批处理文件来构建我们的Android应用程序。它基本上运行gradlew.bat assemble
。当我将桌面远程安装到构建机器(Windows 8)并运行批处理文件时,所有内容都按预期构建。但是,当我通过NT服务调用批处理文件时,我们开始收到错误。
运行该服务的帐户确实具有该计算机的管理权限。
第一个错误是javax.net.ssl.SSLHandshakeException
。根据其他帖子Android Studio Gradle build failed. Error:Cause: peer not authenticated,我修改了gradle-wrapper.properties
以使用http
代替https
作为分发网址。这解决了这个问题。
下一个错误也类似,但这次是下载pom文件。根据另一篇帖子android- Gradle: An issue occurred configuring root project android studio,我修改了build.gradle
以使用http://jcenter.bintray.com/
作为网址而不是默认https
。
现在我收到以下错误:
Could not parse POM
http://jcenter.bintray.com/com/android/tools/build/gradle/1.1.0/gradle-1.1.0.pom
我想知道为什么https
可能导致NT服务帐户出现问题,而不是普通的交互式帐户。有办法解决吗?如果没有,如果有人对上述错误的含义有所了解,将不胜感激。问候。
答案 0 :(得分:0)
当作为交互式用户成功执行但在作为服务运行时失败的程序的常见问题是,执行周围的用户设置已更改。例如,当您运行Gradle时,%USERPROFILE%\ .gradle中有一些设置(通常为c:\ users \&lt; username&gt ;,您以交互方式登录的设置与运行该服务的帐户不同。)< / p>
当您作为服务运行时,会有不同的用户配置文件,或者可能根本没有。让您的批处理脚本转储环境(在.bat文件的顶部附近添加“set” - 这将转储按字母顺序排列的环境变量列表),并将输出作为服务运行时的输出与交互运行时的输出进行比较。查看是否已定义USERPROFILE,以及是否将服务区域中的.gradle文件夹与您自己的.gradle文件夹进行比较。
除Gradle设置外,Gradle的缓存通常也位于.gradle文件夹下。您的缓存可能包含与服务缓存不同的项目,如果您的构建尝试连接的外部存储库中存在身份验证问题,这可能很重要(同样,可能是由于用户配置中的不同凭据) !)
处理https请求的工具可能会在您的用户个人资料中的某处查找证书。您可能已接受未包含在服务的可接受证书中的证书(用于“识别”https服务器)。这些可能位于用户配置文件中的.keystore文件中。 Java的keytool.exe可以帮助解码和转储此文件。
构建中涉及的其他工具也可能具有存储在USERPROFILE空间中的设置,这些设置在您的空间和服务帐户的空间之间有所不同 - 例如Android(.android),Java,Maven(.m2),Git(。 gitconfig)等。