从事 java 开发的都知道 maven 的统一依赖管理,只需要在 pom.xml 中指定坐标(groupId、artifactId、version)便可唯一确定一个 jar 包,同时自动解决前置依赖。
没接触过 Farbic 开发,对 Forge 有皮毛认识。Forge 本身也是借助 gradle (增强版 maven)进行构建的,像最常用的 JEI 也是直接在 build.gralde 直接引入依赖的。
于是就有个问题,为什么 Forge / Farbic,抑或是国外最知名的 CurseForge 平台,不能做到像 maven 一样的依赖管理呢?这里所谓的依赖管理包括:
1. 远程中央仓库
2. 本地缓存仓库
3. 依赖关系解决(自动帮你下载前置)
其中第一点 CurseForge 算是做到了吧,第三点对 minecraft mods 来说基本不会出现循环依赖这种复杂情况,关键在于第二点。就拿我自己做案例,我自己有租一台服务器,专门和小伙伴们一起玩 MC。个人感觉自己还是挺三分钟热度的,每次新开的周目大概能挺个半年到一年左右吧。主要也是想不断尝试新鲜事物,而不是一味蹲在一个存档。于是呢,每更换一周目,我都要把一些常用 mod 复制到新的整合包当中,同时还要去检查有没有新版本更新。这个工作量说实话还挺大的,而且很费存储空间。退一万步说,即便每次更换周目都只修改同一个游戏版本,那mods文件夹的删删改改也好不到哪里去,尤其万一删错了某个 mod,各位都知道 CurseForge 那蛋疼的网速以及最近新出的烦人验证码,是真没心情重新再下。
于是我就在思考,开发当中都用到了 maven 的依赖管理,真正使用时为什么反而这么繁琐?为何本地不能构建一个缓存仓库,像 maven 仓库一样存放这些 mod ?对于整合包或者游戏版本,只需要编辑类似于 pom.xml 文件写写坐标,导入依赖,剩下的就交给程序解决,有时还能解决忘记下前置的问题,同时也能约束下某些作者乱编版本号的问题。我现在考虑到的难点在于:
1. 网速
2. 专用程序开发(毕竟不能直接将开发的 maven 直接照搬到用户使用环境吧)
3. 开发成本,感觉这个工程量还挺庞大,然而没有回报,真的得靠一腔热忱
因为一直在用 HMCL,不知道 MuitiMC 是怎么处理的。在逛 CurseForge 的时候有发现国外整合包其实都是给 mod 下载连接,让玩家自己去下的,但貌似也没有做到本地统一的缓存仓库。不知道各位对此有什么看法。
没接触过 Farbic 开发,对 Forge 有皮毛认识。Forge 本身也是借助 gradle (增强版 maven)进行构建的,像最常用的 JEI 也是直接在 build.gralde 直接引入依赖的。
于是就有个问题,为什么 Forge / Farbic,抑或是国外最知名的 CurseForge 平台,不能做到像 maven 一样的依赖管理呢?这里所谓的依赖管理包括:
1. 远程中央仓库
2. 本地缓存仓库
3. 依赖关系解决(自动帮你下载前置)
其中第一点 CurseForge 算是做到了吧,第三点对 minecraft mods 来说基本不会出现循环依赖这种复杂情况,关键在于第二点。就拿我自己做案例,我自己有租一台服务器,专门和小伙伴们一起玩 MC。个人感觉自己还是挺三分钟热度的,每次新开的周目大概能挺个半年到一年左右吧。主要也是想不断尝试新鲜事物,而不是一味蹲在一个存档。于是呢,每更换一周目,我都要把一些常用 mod 复制到新的整合包当中,同时还要去检查有没有新版本更新。这个工作量说实话还挺大的,而且很费存储空间。退一万步说,即便每次更换周目都只修改同一个游戏版本,那mods文件夹的删删改改也好不到哪里去,尤其万一删错了某个 mod,各位都知道 CurseForge 那蛋疼的网速以及最近新出的烦人验证码,是真没心情重新再下。
于是我就在思考,开发当中都用到了 maven 的依赖管理,真正使用时为什么反而这么繁琐?为何本地不能构建一个缓存仓库,像 maven 仓库一样存放这些 mod ?对于整合包或者游戏版本,只需要编辑类似于 pom.xml 文件写写坐标,导入依赖,剩下的就交给程序解决,有时还能解决忘记下前置的问题,同时也能约束下某些作者乱编版本号的问题。我现在考虑到的难点在于:
1. 网速
2. 专用程序开发(毕竟不能直接将开发的 maven 直接照搬到用户使用环境吧)
3. 开发成本,感觉这个工程量还挺庞大,然而没有回报,真的得靠一腔热忱
因为一直在用 HMCL,不知道 MuitiMC 是怎么处理的。在逛 CurseForge 的时候有发现国外整合包其实都是给 mod 下载连接,让玩家自己去下的,但貌似也没有做到本地统一的缓存仓库。不知道各位对此有什么看法。
Lss233 发表于 2021-6-21 16:57
想法挺好。
CurseForge有Maven的接口
https://support.curseforge.com/en/support/solutions/articles/9000 ...
例子中的 COFH 请求成功,但换了 AppleSkin 一直都是找不到资源,其他 mod 还没测试
之前接触过 cursemaven,现在看来居然还是第三方开发的?那个倒是没问题,毕竟直接指定 projectId 和 fileId 了、
抽空研究了下 FML 中 mod 加载相关的源码,发现 mods(jar包)导入有4种渠道(开发的话有5种),其中包括 maven 导入,优先级仅次于 mods 文件夹之后
启动游戏时需要带上两个选项参数,fml.mavenRoots 指定本地仓库地址,fml.modLists 指定 list 文件路径(数组),list 文件就是普通的 txt 文档改个后缀名,每行以 gradle 形式写坐标,对应每个mod
fml.modLists 反序列化后其实是 List 类型,因此可以写多个 list,于是又有一个脑洞,比如客户端渲染向的写个通用的 list,不同版本(整合包)再写个单独的 list
所以,mods高玩党其实完全有能力可以自定义个仓库,有开发能力的甚至可以玩得更花
