请在2024年Clojure调查!中分享您的想法。

欢迎!请参阅关于页面以了解更多有关此功能的信息。

0
tools.deps

提供:git/url../../../../../../../../tmp/foobar(其中/tmp/foobar是系统上的Git仓库)时会导致

`
构建类路径错误。无法将org.eclipse.jgit.transport.TransportLocal转换为org.eclipse.jgit.transport.SshTransport
java.lang.ClassCastException: org.eclipse.jgit.transport.TransportLocal cannot be cast to org.eclipse.jgit.transport.SshTransport

at clojure.tools.gitlibs.impl$fn$reify__829.configure(impl.clj:32)
at org.eclipse.jgit.api.TransportCommand.configure(TransportCommand.java:155)
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:235)
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:49)
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$eval894$fn__896.invoke(git.clj:41)
at clojure.lang.MultiFn.invoke(MultiFn.java:238)
at clojure.tools.deps.alpha$expand_deps.invokeStatic(alpha.clj:168)
at clojure.tools.deps.alpha$expand_deps.invoke(alpha.clj:152)
at clojure.tools.deps.alpha$resolve_deps.invokeStatic(alpha.clj:215)
at clojure.tools.deps.alpha$resolve_deps.invoke(alpha.clj:197)
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:702)
at clojure.core$apply.invokeStatic(core.clj:657)
at clojure.main$main_opt.invokeStatic(main.clj:317)
at clojure.main$main_opt.invoke(main.clj:313)
at clojure.main$main.invokeStatic(main.clj:424)
at clojure.main$main.doInvoke(main.clj:387)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.lang.Var.applyTo(Var.java:702)
at clojure.main.main(main.java:37)

`

Gitlibs应该处理本地仓库。

4 个答案

0

评论由:netpyoung发表

当前tools.gitlib不支持file://url。

`
(defn- call-with-auth
([^GitCommand command]

(call-with-auth
  (.. command getRepository getConfig (getString "remote" "origin" "url"))
  command))

([^String url ^GitCommand command]
(cond

 ;; need to filtering like that.
 (and (instance? TransportCommand command)
      (str/starts-with? url "file"))
 (.call command)
 (and (instance? TransportCommand command)
      (not (str/starts-with? url "http")))
 (.. ^TransportCommand command (setTransportConfigCallback @ssh-callback) call)

:else (.call command))))
`

0
_评论由:alexmiller_发表

使用本地Git仓库与本地依赖相比有什么价值?例如


clj -Sdeps '{:deps {:my/local {:local/root "../../../../../../../../tmp/foobar"}}}'
0

评论由:ajcummings发表

我认为使用本地Git仓库有价值,至少在我的环境中是这样的。

在我们工作的地方,没有运行Git服务器;相反,我们将我们的
仓库托管在NFS上。转向tools.deps的一个动机是,我可以直接从这些
Git仓库获取依赖,而不是通过我们的Maven仓库进行清洗(该仓库也
只是托管在NFS上)。

鉴于这种设置,我希望有一种方法可以直接从文件系统中获取Git
,包括标签和历史细节,以启用-Sresolve-tags、deps-ancient等。
功能。执行git clone/checkout并将那里指向:local/root并不能提供这种能力,
也不支持通过:sha进行版本选择。
我曾尝试的一个解决方案是通过ssh连接到另一台也挂载了NFS的

机器来清洗Git连接。但这与我的IT环境相关的因素较弱,所以我不愿意
向我的团队推广这个方案。因此,我们现在仍然继续通过我们内部的
Maven仓库进行部署。

0
参考资料:https://clojure.atlassian.net/browse/TDEPS-93(报告人:severeoverfl0w)
...