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)

原因: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

原因:https://github.com/cognitect-labs/test-runner.git:连接被拒绝 (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}} 就可以为大多数用户解决这个问题。然而,目前无法将这些标志传递给 脚本中的 make-classpath 调用。{{-J}} 标志仅传递给最终的 {{java}} 调用,而不是传递给实际解析依赖项的 {{make-classpath}} 调用。

因此,一个简单的解决方案是在 clojure 脚本中允许传递额外的标志给 make-classpath 调用。

4 答案

+1
_评论由 glts 提出:

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

在TDEPS-20中讨论了第四种选择,即依赖较为传统的环境变量{{http_proxy}}及其朋友。这是我的首选。我不会去操作这个,所以任何人都可以自由地接手。
0

评论者:alexmiller

我昨天刚好想过这件事... :)

我非常希望可以从相同的Maven系统属性中触发,这样就可以在一个地方设置所有东西。

如果能修复这个问题就好了。我刚在一个新地方开始工作,无意中遇到了这个问题。我升级了clj工具,无意中破坏了构建。我没有意识到clj工具已经更改,可以与代理一起工作,正如另一个答案中所描述的,我覆盖了它。
0

评论者:sundbp

我对这个问题隐藏在代理背后的情况有一定兴趣。

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

2的好处是此设置已在文档中提及,有单独的设置,使得流程会更顺畅。缺点是没有任何明显逻辑将JGit的设置与mvn关联起来。

1和3是JGit相关的相对合理的设置,第一种侧重于JVM进行操作的方式(尽管JVM并不是100%标准化)。第二种侧重于git方面(明确且定义良好)。两种选项也是用户可能会使用的设置。

总的来说,我有点倾向于选择1,特别是如果David正确的话,这已经在JGit中得到支持和设置。然而,在搜索其git存储库的过程中,这并不明显。存储库中的基于JGit的CLI工具部分确实有代码可以从JVM系统属性设置代理,但我不觉得它是直接在库中的,我们还需要将代码添加到gitlibs中。如果你有任何关于为什么这是错误的指路,我非常感兴趣@David!

对这些选项有什么看法?

0
参考: https://clojure.atlassian.net/browse/TDEPS-124(由 glts 报告)
...