0

我有一个我的世界织物模型项目

这是它的结构

airgame-api-parent:
    airgame-api-common:
    airgame-api-client:
    airgame-api-server:
    airgame-api-all:

最初,我将它们构建为单个项目,但随着代码和功能的增加,我在我的项目中添加了一些其他依赖项。比如mysql-connectorHikariCP
它只需要在服务器端,因为客户端不需要连接我的 sql。
但是mysql-connector太大了。它导致我的 jar 文件大小从 100KB+ 增加到 4MB+。
我认为这是无法忍受的。

所以我拆解了我的项目。

该项目airgame-api-common是通用环境代码:它可以与客户端和服务器一起运行。

该项目airgame-api-client是客户端唯一的代码。它可以与客户端一起运行。它取决于api-common.

该项目airgame-api-server是服务器端唯一的代码。它可以与服务器一起运行。它也取决于api-common

包括api-server一些服务器端代码。例如mysql-connectorHikariCP

最后,包含和的api-all所有代码。这样,我在编码其他项目时就不需要同时导入和了。(其实我是做不到的,因为和用的一样。如果我导入它们,当我执行测试时,运行环境会同时包含这两个依赖,然后因为冲突而崩溃。)api-commonapi-clientapi-serverapi-clientapi-serverapi-clientapi-servermod_idmod_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-serverapi-all但我想如果你教我配置api-client,我应该可以配置其他人。)

最后,我的英语不是很好,但我尽力表达我的意图。我没有伤害任何人的意思。如果我冒犯了你,请原谅我。

4

1 回答 1

1

好的,我在另一个答案中找到了答案:Gradle: common resource dependency for multiple java projects

它的

sourceSets.main {
    java.srcDirs += [
        project(':api-common').sourceSets.main.java,
        project(':api-common-server').sourceSets.main.java
    ]
    resources.srcDirs += [
        project(':api-common').sourceSets.main.resources,
        project(':api-common-server').sourceSets.main.resources
    ]
}
于 2021-11-22T04:39:26.870 回答