如何让Play v1.2.5安装存储为github发布二进制文件的依赖项



我有一个Play v1.2.5应用程序,我已经将其配置为依赖于Github发布的二进制文件。为了支持这一点,我在dependencies.yml文件中创建了一个自定义存储库,如下所示:

    - github:
       type: http 
       artifact: "https://github.com/[organisation]/[module]/releases/download/[revision]/[module]-[revision].zip"
       contains: 
           - tazmaniax -> *

这是正确的,Ivy能够构建正确的URL,但在获取二进制资源时遇到了问题,因为Github重定向到AWS S3,并在此过程中将协议从https更改为http。显然,标准的Java HttpUrlConnection是Ivy使用的默认连接,只要协议没有更改,它就会遵循重定向。所以我想看看如何解决这个问题。

Play v1.2.5在封面下使用Ivy v2.2.0。Ivy使用类URLHandlerRegistry来决定是否使用HttpUrlConnection,或者如果类路径中存在Apache HttpClient v3.x,则使用该类。HttpClient v3.x可能会导航使用不同协议的重定向,但在任何情况下,默认框架libs都不包括HttpClient v2.x,我试图避免自定义Play,因为我需要将其部署到Heroku。

最终,这是一个Ivy问题(或者Github,取决于你的观点),所以从长远来看,选择是:

  1. 修补org.apache.ivy.util.url.BasicURLHandler,以支持根据使用Java从Github下载二进制文件的协议更改来处理重定向,然后在未来的Play版本中获得ivy的更新版本
  2. 修补org.apache.ivy.util.URLHandlerRegistry以加载apache HttpClient的最新版本,例如v4.2,并确保HttpClient lib与修补程序一起包含在未来的Play版本中。然而,看起来早期版本的HttpClient v4.2本身在从https重定向到http时也存在同样的问题,HttpClient无法在https和http之间建立路由
  3. 让Github更改其重定向策略,在这种情况下保持为相同的协议https

有人能就最佳行动方案提出建议吗?Thx

===更新2013年9月6日===

github已经解决了重定向协议的更改,现在重定向在向AWS S3的请求中保留了"https"协议。然而,现在当依赖关系得到解决时,重定向时会返回403,这似乎是AWS S3身份验证所需的丢失cookie——我想Ivy使用HttpUrlConnection的另一个问题,除了重点添加丢失的cookie支持外,上述选项仍然主要相关。

===2014年10月18日更新===

我尝试按照建议运行play deps . --sync -Djsse.enableSNIExtension=false,但问题仍然存在。相关响应标头为:

Date:Sat, 18 Oct 2014 09:56:33 GMT
Location:https://s3.amazonaws.com/github-cloud/releases/25392769/2302c572-56ac-11e4-9623-393cafb2c0e5.zip?response-content-disposition=attachment%3B%20filename%3Dplay-markdown-1.9.zip&response-content-type=application/octet-stream&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1413626253&Signature=7gI7fe0CeCzuu73KmcklIVSVPSQ%3D
Server:GitHub.com
Set-Cookie:user_session=692wy9ubPTtFAGT-WGjwFdykXc06-SELUtGGhg3i56vyT0SEVEI5UVnhkDsdQigEQagDUq54dyjTSEUW; path=/; expires=Sat, 01-Nov-2014 09:56:33 GMT; secure; HttpOnly
Set-Cookie:_gh_sess=eyJsYXN0X3dyaXRlIjoxNDEzNjI1ODE1MzkwLCJzZXNzaW9uX2lkIjoiYzFmNzQ0NDRlNmMzYjAwZTE2ZDg4MzVhMDJjNmVhZmMiLCJzcHlfcmVwbyI6InRhem1hbmlheC9wbGF5LW1hcmtkb3duIiwic3B5X3JlcG9fYXQiOjE0MTM2MjYxOTMsInJlZmVycmFsX2NvZGUiOiJodHRwczovL2dpdGh1Yi5jb20vaXZheW5iZXJnL3NlbGVjdDIvY29tbWl0cy9tYXN0ZXIiLCJjb250ZXh0IjoiLyJ9--8c45e0231ec4859b693de524e966cbc4a6582442; path=/; secure; HttpOnly
Status:302 Found
Strict-Transport-Security:max-age=31536000; includeSubdomains; preload

我确信问题是Ivy(或Ivy调用的相关HTTP库)没有在302上设置cookie,然后在没有这些cookie参数的情况下跟踪位置会在403中失败。

我遇到了一个类似的问题,通过禁用JavaHttpUrlConnection进行的一些检查解决了这个问题,该检查在重定向时失败。您可以尝试此处建议的标志-Djsse.enableSNIExtension=false

最新更新