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}} 就可以解决大多数用户的问题。然而,目前无法将这些标志传递给 {{make-classpath}} 在 {{clojure}} 脚本中的调用。{{-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}} 和朋友。这是我的首选。我不会做这个,所以任何人都欢迎接手。
0

评论者:alexmiller

我昨天才想到这个问题... :)

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

解决这个问题将是件好事。我刚在一家新公司开始工作,偶然遇到了这个问题。我升级了clj工具,无意中破坏了构建。我没有意识到clj工具已经被修改为使用一个在另一个答案中描述的代理来工作,并且我已经覆盖了它。
0

评论者:sundbp

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

在我看来,我们有3个潜在来源可以获取代理配置
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
...