请在 2024 Clojure 状态调查! 中分享您的看法。

欢迎!请参阅 关于 页面以了解此处的详细信息。

+1
工具

我们的 CI 运行失败是由于 Clojars 的小故障

构建类路径错误。无法传输工件
rewrite-clj:rewrite-clj:jar:1.1.45 从/到 clojars
(https://repo.clojars.org/): 连接到 repo.clojars.org:443
[repo.clojars.org/146.75.29.128] 失败:连接超时 401 错误
进程以退出码 1 完成执行。

似乎在 tools.deps 中下载依赖项时添加一些重试来处理暂时性失败是个好主意吗?

1 个答案

0

401 表示未经授权。这看起来不像是我们想要重试的错误?

我不确定我们能否区分值得重试的情况(其中一些可能通过 Maven libs 被隐藏)。

另一个方面是,Maven 可能会尝试多个仓库以查找包含该工件的那个仓库。添加重试可能会延长该搜索的时间或者给所有仓库增加大量流量。
虽然在CI中并非所有错误都是401错误,我们经常遇到类似的错误。重新运行构建似乎总是能解决这个问题。

下载中:从clojars下载metosin/muuntaja/0.6.8/muuntaja-0.6.8.pom
...
构建classpath时出错。未能读取metosin:muuntaja:jar:0.6.8的工件描述符。
org.eclipse.aether.resolution.ArtifactDescriptorException: 未能读取工件描述符metosin:muuntaja:jar:0.6.8
   在 org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:259)
   在 org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:175)
   在 org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor(DefaultRepositorySystem.java:255)
   在 clojure.tools.deps.alpha.extensions.maven$fn__1061.invokeStatic(maven.clj:132)
   在 clojure.tools.deps.alpha.extensions.maven$fn__1061.invoke(maven.clj:122)
   在 clojure.lang.MultiFn.invoke(MultiFn.java:244)
   在 clojure.tools.deps.alpha$expand_deps$children_task__754$fn__756$fn__757.invoke(alpha.clj:406)
   在 clojure.tools.deps.alpha.util.concurrent$submit_task$task__479.invoke(concurrent.clj:35)
   在 clojure.lang.AFn.call(AFn.java:18)
   在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
   在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
   在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
   在 java.base/java.lang.Thread.run(Thread.java:829)
原因是:org.eclipse.aether.resolution.ArtifactResolutionException: 无法从/to clojars (https://repo.clojars.org/): /ci/.m2/repository/metosin/muuntaja/0.6.8/muuntaja-0.6.8.pom.part (找不到文件或目录)
   在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:425)
   在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:229)
   在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:207)
   在 org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:244)
   ... 12 more
原因是:org.eclipse.aether.transfer.ArtifactTransferException: 无法从/to clojars (https://repo.clojars.org/): /ci/.m2/repository/metosin/muuntaja/0.6.8/muuntaja-0.6.8.pom.part (找不到文件或目录)
   在 org.eclipse.aether.connector.basic.ArtifactTransportListener.transferFailed(ArtifactTransportListener.java:52)
   在 org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:369)
   在 org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:75)
   在 org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute(BasicRepositoryConnector.java:628)
   在 org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:262)
   在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:514)
   在 org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:402)
   ... 15 more
原因是:java.io.FileNotFoundException: /ci/.m2/repository/metosin/muuntaja/0.6.8/muuntaja-0.6.8.pom.part (找不到文件或目录)
   在 java.base/java.io.FileInputStream.open0(Native Method)
   在 java.base/java.io.FileInputStream.open(FileInputStream.java:219)
   在 java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
   在 org.eclipse.aether.internal.impl.DefaultFileProcessor.copy(DefaultFileProcessor.java:163)
   在 org.eclipse.aether.internal.impl.DefaultFileProcessor.copy(DefaultFileProcessor.java:151)
   在 org.eclipse.aether.internal.impl.DefaultFileProcessor.move(DefaultFileProcessor.java:252)
    在org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask(BasicRepositoryConnector.java:482)处
    在org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:364)处
    ...还有20个更多
by
上面的长堆栈跟踪是因为缺少本地文件,而不是找不到网络资源的问题

   原因:java.ioFileNotFoundException: /ci/.m2/repository/metosin/muuntaja/0.6.8/muuntaja-0.6.8.pom.part (没有该文件或目录)

由于对ci设置的了解更多,很难说,但可能是共享/ci文件系统存在问题
by
我只是回过头来看了一下日志,401是我复制时包含的日志行号。

以下是带有时间戳的日志

00:21:14 GMT 正在下载:org/clojure/data.codec/0.1.0/data.codec-0.1.0.jar 来自中央仓库
00:21:14 GMT 正在下载:com/amazonaws/jmespath-java/1.11.713/jmespath-java-1.11.713.jar 来自中央仓库
00:21:14 GMT 正在下载:clj-commons/pomegranate/1.2.1/pomegranate-1.2.1.jar 来自clojars
00:21:24 GMT 错误:构建类路径失败。无法从clojars传输artifact rewrite-clj:rewrite-clj:jar:1.1.45 (https://repo.clojars.org/):连接到repo.clojars.org:443失败:连接超时
00:21:24 GMT 错误:进程以退出代码1完成。

如果您准备重试,我认为您可能需要捕获一个ConnectTimeoutException: https://www.javadoc.io/doc/org.apache.httpcomponents/httpclient/4.3.4/org/apache/http/conn/ConnectTimeoutException.html
by
对于401的问题,我笑了。

如果我们能够在正确的地方区分工件不存在与服务不可用的情况,我对此想法持开放态度。对我来说,并不清楚我们是否有机会来区分这些情况,所以需要进一步的调查。
...