2024 Clojure 问卷调查! 中分享您的想法。

欢迎!请查看 关于 页面了解更多关于如何使用本站的信息。

+2
tools.deps

在通过代理访问互联网的环境中,{{clj}} 无法解析 Git 依赖。

`
克隆:https://github.com/cognitect-labs/test-runner.git
构建类路径时出错。 https://github.com/cognitect-labs/test-runner.git:无法打开 git-upload-pack
org.eclipse.jgit.api.errors.TransportException: https://github.com/cognitect-labs/test-runner.git: 无法打开 git-upload-pack

    at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:248)
    at org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:306)
    at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:200)
    at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:89)
    at clojure.tools.gitlibs.impl$call_with_auth.invokeStatic(impl.clj:50)
    at clojure.tools.gitlibs.impl$call_with_auth.invoke(impl.clj:41)
    at clojure.tools.gitlibs.impl$git_clone_bare.invokeStatic(impl.clj:71)
    at clojure.tools.gitlibs.impl$git_clone_bare.invoke(impl.clj:68)
    at clojure.tools.gitlibs.impl$ensure_git_dir.invokeStatic(impl.clj:110)
    at clojure.tools.gitlibs.impl$ensure_git_dir.invoke(impl.clj:100)
    at clojure.tools.gitlibs$resolve.invokeStatic(gitlibs.clj:33)
    at clojure.tools.gitlibs$resolve.invoke(gitlibs.clj:29)
    at clojure.tools.gitlibs$procure.invokeStatic(gitlibs.clj:47)
    at clojure.tools.gitlibs$procure.invoke(gitlibs.clj:41)
    at clojure.tools.deps.alpha.extensions.git$eval925$fn__927.invoke(git.clj:41)
    at clojure.lang.MultiFn.invoke(MultiFn.java:239)
    at clojure.tools.deps.alpha$expand_deps.invokeStatic(alpha.clj:189)
    at clojure.tools.deps.alpha$expand_deps.invoke(alpha.clj:172)
    at clojure.tools.deps.alpha$resolve_deps.invokeStatic(alpha.clj:239)
    at clojure.tools.deps.alpha$resolve_deps.invoke(alpha.clj:221)
    at clojure.tools.deps.alpha.script.make_classpath$create_classpath.invokeStatic(make_classpath.clj:59)
    at clojure.tools.deps.alpha.script.make_classpath$create_classpath.invoke(make_classpath.clj:52)
    at clojure.tools.deps.alpha.script.make_classpath$run.invokeStatic(make_classpath.clj:70)
    at clojure.tools.deps.alpha.script.make_classpath$run.invoke(make_classpath.clj:64)
    at clojure.tools.deps.alpha.script.make_classpath$_main.invokeStatic(make_classpath.clj:109)
    at clojure.tools.deps.alpha.script.make_classpath$_main.doInvoke(make_classpath.clj:84)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.lang.Var.applyTo(Var.java:705)
    at clojure.core$apply.invokeStatic(core.clj:665)
    at clojure.main$main_opt.invokeStatic(main.clj:491)
    at clojure.main$main_opt.invoke(main.clj:487)
    at clojure.main$main.invokeStatic(main.clj:598)
    at clojure.main$main.doInvoke(main.clj:561)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.lang.Var.applyTo(Var.java:705)
    at clojure.main.main(main.java:37)

原因:org.eclipse.jgit.errors.TransportException: https://github.com/cognitect-labs/test-runner.git: 无法打开 git-upload-pack

    at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:592)
    at org.eclipse.jgit.transport.TransportHttp.openFetch(TransportHttp.java:345)
    at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:137)
    at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:123)
    at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1269)
    at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:237)
    ... 35 more

原因:java.net.ConnectException: 连接被拒绝 (Connection refused) github.com

    at org.eclipse.jgit.util.HttpSupport.response(HttpSupport.java:213)
    at org.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:506)
    ... 40 more

`

原则上,tools.gitlibs 已经通过 JGit 支持使用标准 JVM 配置代理服务器(链接: https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html#Proxies 文本:系统属性)。只需传递{{-Dhttps.proxyHost=proxy.my.org -Dhttps.proxyPort=3128}}就可以为大多数用户修复这个问题。然而,目前无法将这些标志传递到 {{clojure}} 脚本中的 {{make-classpath}} 调用中。{{-J}}标志仅传递到最后 {{java}} 调用,而不是传递到真正解析依赖的 {{make-classpath}} 调用中。

所以一个直接的方法是在 {{clojure}} 脚本中允许将额外的标志传递给 {{make-classpath}} 调用。

4 个答案

+1
_由 glts 发布的评论

嗨,[~sundbp],如果您在 {{clojure}} 脚本中将此行【https://github.com/clojure/brew-install/blob/1.10.0.442/src/main/resources/clojure#L301】修改为包含 JVM 标志 {{-Dhttps.proxyHost=proxy.my.org -Dhttps.proxyPort=3128}},Git 解析将成功。我已经在我的代理工作环境中验证过这一方法。

TDEPS-20 中讨论了第四种方案,即依赖于相对常规的环境变量 {{http_proxy}} 和相关变量。这是我首选的方法。我不会继续这项工作,所以 anyone 感觉自由地接受它。
0投票

评论者:alexmiller

我昨天刚刚在想这件事... :)

我真的很希望可以从同一个 Maven 系统属性中触发,这样就有一个地方可以设置这些属性

非常希望修复这个问题。我刚在一家新公司开始工作,意外地遇到了这个问题。我升级了 clj 工具,无意中破坏了构建。我没有意识到 clj 工具已经被修改为与代理一起使用,就像其中一个回答中描述的那样,并且我覆盖了它。
0投票

评论者:sundbp

我对这个问题背后的代理很感兴趣。

据我所知,我们有3个潜在来源可以获取代理配置:
1. JVM系统属性,符合JVM“通常”的配置代理方式
2. Maven系统属性,符合用户可能需要/已经有了的代理设置,以使用clj
3. 通过 git config 管理的git CLI工具的代理设置

第2个有好处,已在文档中提及等设置的优点。有一个设置而不是两个独立的设置可以使旅程更加顺畅。缺点是没有明显的逻辑将JGit设置与mvn相关联。

第1和第3个都与JGit相关,第1个着重于JVM的方式做事(尽管JVM并没有100%标准化)。第2个着重于git方面(这很清晰且很好定义)。这两种选项也是用户可能已经使用的设置。

总体来说,我倾向于选择方案1,尤其是如果David是对的,说这已经在JGit中得到支持并设置了的话。然而,从对他们Git仓库的几次快速搜索来看,这对我来说并不明显。这个仓库中有一个基于JGit的CLI工具,这个工具确实有从JVM系统属性中设置代理的代码 - 但我没有看到它直接是库的一部分,我们需要将其代码添加到gitlibs中。如果你有任何关于为什么这是错误的线索,我非常感兴趣 @David!

对选项有何看法?

0投票
通过
...