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: 其中 refused (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}} 在 {{clojure}} 脚本中的调用。{{-J}} 标志仅传递给最终的 {{java}} 调用,而不是传递给实际解析依赖项的 {{make-classpath}} 调用。

因此,一个直接的解决方案可以是允许在 {{clojure}} 脚本中将附加标志传递给 {{make-classpath}} 调用。

4 答案

+1 投票
评论由:glts_ 制作

你好 [~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 系统属性,符合用户可能需要或设置的用于使用 clj 的代理设置
3. 通过 `git config` 管理的 git CLI 工具的代理设置

2 有一个好处,即它是文档中已经提到的设置之一。拥有一个替代两个单独的设置可以让使用体验更加流畅。缺点是,没有明显的逻辑将 JGit 设置与 Maven 紧密关联。

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

总的来说,我倾向于选择选项 1,特别是如果 David 是正确的,即这已经在 JGit 中得到支持和设置。然而,我通过搜索他们的 git 仓库并不能明显地发现这个事实。仓库中有一个基于 JGit 的 CLI 工具,该工具实际上有代码从 JVM 系统属性设置代理,但我没有看到这部分在直接库中,我们需要将其代码添加到 gitlibs 中。如果有人能指正为什么这是错误的,我会非常感兴趣 @David!

关于这些选择的看法是什么?

0
...