iTXTech / mirai-console-loader

模块化、轻量级且支持完全自定义的 mirai 加载器。
GNU Affero General Public License v3.0
733 stars 62 forks source link

从阿里云镜像下载失败时,应当重试 #130

Closed Itsusinn closed 2 years ago

Itsusinn commented 2 years ago

阿里云maven镜像的缓存策略是,如果用户不获取,则不缓存。 当用户第一次从镜像获取时,先返回包不存在的错误,再缓存。

因此当下载失败时,可能不是包不存在,而是镜像尚未同步。

Itsusinn commented 2 years ago

待验证的推断

由于maven镜像缓存以单个版本为最小单位 当获取mirai2.jar时,jar,source-jar等亦同时开始同步。

也就是说获取mirai2.jar时,mcl找不到该包,maven镜像同步亦开始 等到获取jar时,镜像同步完成,命中jar

DEBUG日志

初次运行

  10:18:08 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.zip
  10:18:08 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.mirai2.jar
  10:18:08 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.mirai.jar
  10:18:09 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1-all.jar
  10:18:09 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.jar
  10:18:09 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.jar
 Downloading mirai-message-source-1.5.1.jar [==============================] 102.36 KB                         
  10:18:09 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.jar.sha1
 Downloading mirai-message-source-1.5.1.sha1 [==============================] 40 B                    
  10:18:09 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.mirai.metadata

报NoClassDefFoundError

删除plugins下已下载的插件 & 第二次运行

10:19:36 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.zip
  10:19:36 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.mirai2.jar
  10:19:36 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.mirai2.jar
 Downloading mirai-message-source-1.5.1.jar [==============================] 103.14 KB                         
  10:19:37 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.mirai2.jar.sha1
 Downloading mirai-message-source-1.5.1.sha1 [==============================] 40 B                    
  10:19:37 [DEBUG] HTTP HEAD https://maven.aliyun.com/repository/public/org/mesagisto/mirai-message-source/1.5.1/mirai-message-source-1.5.1.mirai.metadata
  10:19:37 [DEBUG] RepoCache has been cleared

Work around 1: 每次发布在maven central后,在自动化中用curl请求阿里镜像的对应地址 Work around 2:

  publication {
    artifacts.remove(tasks.getByName("jar"))
    artifact(tasks.getByName("buildPlugin"))
  }

publish时不上传jar

PeratX commented 2 years ago

个人认为缓存同步应该由该包的管理者来保证

Itsusinn commented 2 years ago

个人认为缓存同步应该由该包的管理者来保证

尽管包管理者可以保证自己的缓存同步, 但他不总是能保证其依赖或递归依赖的缓存。

PeratX commented 2 years ago

确实如此。mcl也不会使用到其依赖和其递归依赖。