我有一个我的世界织物模型项目
这是它的结构
airgame-api-parent:
airgame-api-common:
airgame-api-client:
airgame-api-server:
airgame-api-all:
最初,我将它们构建为单个项目,但随着代码和功能的增加,我在我的项目中添加了一些其他依赖项。比如
mysql-connector
和HikariCP
。
它只需要在服务器端,因为客户端不需要连接我的 sql。
但是mysql-connector
太大了。它导致我的 jar 文件大小从 100KB+ 增加到 4MB+。
我认为这是无法忍受的。
所以我拆解了我的项目。
该项目airgame-api-common
是通用环境代码:它可以与客户端和服务器一起运行。
该项目airgame-api-client
是客户端唯一的代码。它可以与客户端一起运行。它取决于api-common
.
该项目airgame-api-server
是服务器端唯一的代码。它可以与服务器一起运行。它也取决于api-common
。
包括api-server
一些服务器端代码。例如mysql-connector
和HikariCP
。
最后,包含和的api-all
所有代码。这样,我在编码其他项目时就不需要同时导入和了。(其实我是做不到的,因为和用的一样。如果我导入它们,当我执行测试时,运行环境会同时包含这两个依赖,然后因为冲突而崩溃。)api-common
api-client
api-server
api-client
api-server
api-client
api-server
mod_id
mod_id
好的,首先我尝试在 中使用api project(":airgame-api-common")
,api-client
但它现在可以工作了,其他依赖的项目api-client
仍然看不到api-common
。我猜可能插件fabric-loom
改变了 gradle 的构建或依赖逻辑。
fabric-loom
文档说我需要使用,我试过了modApi
,但它看起来不能用于导入自我子项目。
好吧,不好意思说了很多与问题无关的话,但我只是想表明我已经尽力解决了问题。
所以现在我想还有一种方法:api-common
在 gradle 开始编译代码之前将类路径和资源添加到其他项目。我认为修改build.gradle
可以做到,但我不知道该怎么做。
我尝试阅读 gradle 的文档,但我对这个软件真的不是很了解,所以找不到太多有用的信息。有人可以告诉我吗?
我需要api-client
编译文件有自己的代码和api-common
代码,并且api-common
代码需要对依赖的项目可见api-client
。(这也是和所必需的api-server
。api-all
但我想如果你教我配置api-client
,我应该可以配置其他人。)
最后,我的英语不是很好,但我尽力表达我的意图。我没有伤害任何人的意思。如果我冒犯了你,请原谅我。