java - 组织项目库

标签 java git gradle intellij-idea

我知道这个问题很久以前就已经解决了,但我不知道如何解决这个问题。

我有一个多部分项目,如下所示:

Native-Module(基于C)-->核心(业务逻辑,Java)-->UI/API模块/层

native 模块和核心模块在所有变体中都将保持不变。然而,UI/API层会根据用途的不同而有所不同。当用作桌面应用程序时,它只是一个 JavaFX 或 ReactNative 层。当在服务器上使用时,UI/API 层将是通过 REST 与控制服务器通信的层。

需要明确的是,所有这些都已经构建并且运行良好。但我一直在手动将每个模块的库导入/复制到下一个模块。我的问题是如何以更自动化的方式管理 git 或 gradle 中的所有单独模块?我还应该清楚,虽然我使用 git 和 gradle 并且对两者都有基本的了解,但我缺乏自己解决这个问题的知识。我为每个模块设置了单独的存储库。我熟悉git的子模块,但它似乎不符合我的需求。我正在尝试设置一切,以便开始从事该项目的新人能够有一个直接的设置过程。

我四处搜寻,但未能找到适合我的场景的资源,因此非常感谢您的帮助。

最佳答案

这个问题相当广泛,所以也许我不应该回答,直到它变得更有针对性,但无论如何我都会尝试一下。

通常,每个模块的构建输出将作为版本化工件(例如 jar 文件)部署到存储库(例如 https://jfrog.com/artifactory/ ),并且您的项目将定义对存储在存储库中的那些版本化工件的依赖关系。然后构建系统(例如 gradle)将自动将定义的工件 pull 入您的构建中。您可以自行设置此本地存储库(例如 Artifactory),并配置 gradle 构建以查看此本地存储库中的工件,以及查看存储常见开源工件的中央存储库。

这是总体的高层方法。我无法在此处提供有关如何在您的环境中管理此问题的详细信息(首先,我对 gradle 不够熟悉,无法使用它提供有意义的具体答案)。

就使用您在问题中提到的一些技术的示例而言(具有 native 库、java 代码和 gradle 构建的多模块项目),JavaFX 系统拥有所有这些,源代码可以在此处找到 https://github.com/javafxports/openjdk-jfx 。然而,JavaFX 是一个大型、复杂的项目,它具有针对不同 native 系统(OS X、Windows、Linux)的 native 部分,并且您的特定应用程序可能不需要像 JavaFX 那样多的自定义。不过,也许您可​​以从回顾 JavaFX 开发人员如何解决这个问题中得到一些东西。

另一个考虑因素是构建系统和生成的工件以及部署系统和已部署的服务之间的关注点分离。对于某些组件,您可能不需要通过在 gradle 类型依赖项管理系统中导入的库来获得运行时或编译依赖项。相反,正如您在问题中所描述的,您通过 REST API 实现了松散耦合,因此 UI 层实际上并不具有对服务器的编译时依赖性。因此,基于 REST 的部分可能会部署到本地服务器、Amazon Web Services、Google Cloud 或 Microsoft Azure 服务器。如果是 AWS,则可以使用云形成模板通过 Ansible 脚本将服务推送到 EC2 盒子。自动化这类东西超出了artifactory、git、gradle等的范围,并且可能很快变得复杂,并且超出了我准备在这里详细讨论的范围。

关于java - 组织项目库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58438593/

相关文章:

android - 无法连接到 android studio 中的 jcenter()

java - 从 hbm 文件生成带注释的 java 类

java - 如何将输入的3个八进制数转换为CHMOD权限转换为二进制?

git rebase -i -- 为什么要更改提交哈希值?

java - 如何包括用于编译类的库文件夹

android - Android Studio src/res/layout子文件夹错误

java - 使用 ThreeTen-Extra 解析 YearQuarter 时是否可以拒绝多个四分位数字?

java - 英语到摩尔斯电码翻译器

git - 如何使用RStudio stash git的未跟踪文件?

git - 如何查看在上次收到的推送中修改/添加/删除的所有文件?