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 发布的评论

嗨ya [~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}} 和相关变量。这是我首选的方法。我将不会进行这项工作,所以任何人都欢迎承担这项工作。
0 投票

评论者:alexmiller

我昨天刚好在想这个…… :)

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

如果能解决这个问题就太好了。我刚刚在一家新的地方开始工作,偶然遇到了这个问题。我升级了clj工具,无意中破坏了构建。我没有意识到clj工具已经被修改来支持代理,就像另一个回答中描述的那样,而我覆盖了它。
0 投票

评论者:sundbp

我对这个问题很感兴趣,我在代理后面。

在我看来,我们有3个潜在的来源可以提取代理配置:
1. JVM系统属性,符合JVM“通常”配置代理的方式
2. Maven系统属性,与用户可能需要设置的代理设置相符
3. Git CLI工具的代理设置,通过git config管理。

第2项的优点是它是一个在文档中已经提到的设置。有这样一个设置代替两个独立的设置会使行程更加顺畅。缺点是没有明显的逻辑将JGit设置与mvn挂钩。

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

总的来说,我有点倾向于选择第1项,特别是如果David正确的话,这个设置在JGit中已经得到支持并设置。然而,我没有从他们的git仓库中快速搜索出这个结论。这个仓库中有一个基于JGit的CLI工具,确实有从JVM系统属性设置代理的代码,但我看不到它在直库中,我们需要将其添加到gitlibs中。如果您有关于为什么这是错误的信息,我对此非常感兴趣@David!

对选项的看法?

0 投票
by
...