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

时间:2013-07-28 14:30:57

标签: github playframework ivy dependency-management playframework-1.x

我有一个Play v1.2.5应用,我已将其配置为依赖Github release binary。为了支持我在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可能会导航使用不同协议的重定向,但在任何情况下,默认框架库都不包含HttpClient v3.x,我试图避免自定义Play,因为我需要将其部署到Heroku。

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

  1. 修补org.apache.ivy.util.url.BasicURLHandler以支持按照Download binary file from Github using Java处理协议更改的重定向,然后在未来的Play版本中包含更新版本的Ivy。
  2. 修补org.apache.ivy.util.url.URLHandlerRegistry以加载更新版本的Apache HttpClient,例如: v4.2,并确保在未来的Play版本中包含HttpClient lib以及补丁。但是看起来早期版本的HttpClient v4.2本身也存在从https重定向到http,HTTPClient unable to establish route between https and http
  3. 的相同问题。
  4. 让Github更改它的重定向策略,以便在这种情况下保持相同的协议https。
  5. 有人可以就最佳行动方案提出建议吗? THX

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

    重定向上的协议更改已由github解决,现在重定向会保留对AWS S3请求的“https”协议。然而,现在当依赖关系被解析时,在重定向上返回403,这似乎是缺少cookie,这是AWS S3身份验证所需要的 - 另外一个问题是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.

1 个答案:

答案 0 :(得分:1)

我遇到了一个类似的问题,它通过禁用重定向失败的Java HttpUrlConnection 所做的一些检查来解决。您可以按建议here

尝试标记-Djsse.enableSNIExtension=false