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: 连接被拒绝 (连接被拒绝) 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}} 在 {{clojure}} 脚本中的调用。{{-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

我对在代理后面的此问题很感兴趣。

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

2的好处在于这是文档中已提到的设置之一,这样就有了一个比两个独立的设置稍平滑的体验。缺点是没有任何明显的逻辑将JGit设置与mvn绑定。

1和3都是相对合理的JGit相关设置,第一个侧重于JVM的做事方式(尽管JVM并不是100%标准化)。第二个侧重于git方面(这很清晰和定义良好)。这两个选项也是用户可能已经在使用中的设置。

总的来说,我有点倾向于一,特别是如果David正确的话,这是JGit已经支持并设置好的。然而,从对他们的git仓库的快速搜索来看,这不是很明显。仓库中有一个基于JGit的CLI工具,其中确实有代码从JVM系统属性设置代理,但我没有看到它是库的一部分,并且我们还需要将其添加到gitlibs中。如果您有任何关于这是否错误的信息,我会非常感兴趣 @David!

关于选项的看法?

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