组合项目

Jmix 中的组合项目是指项目结构中包含多个相关的 扩展组件 以及应用程序的单一 IDE 项目,不管这些项目是不是在同一个代码仓库都可以。

Jmix 设计该功能的原因和背景请参阅 Jmix 博客 扩展组件和组合项目

创建组合项目

如需创建空的组合项目,在 项目向导 中选择 Composite Project 模板。

如果选择的是 Composite Project for Monorepo 模板,Studio 会创建一个项目并在根目录下有构建脚本:

root-dir/
    build.gradle
    settings.gradle

如果选择的是 Composite Project for Separate Repositories 模板,Studio 会自动创建下面结构的项目(假设项目名称为 sales):

root-dir/
    sales-all/
        build.gradle
        settings.gradle

然后,可以通过 Jmix 工具窗口的 New → Subproject 创建或添加子项目,子项目可以是新的扩展组件或应用程序,也可以是从 VCS 检出的已有项目,或添加已有项目的文件夹。

new subprojects

Studio 在 Jmix 工具窗口中将组合项目和所有的子项目都作为顶级节点展示:

composite projects structure

可以看到,聚合项目的 settings.gradle 文件使用了 includeBuild 指令。这些指令由 Gradle 的 组合构建 功能提供。

在组合项目的构建中,Gradle 会将对制件的依赖替换为项目之间的依赖。也就是说,在扩展组件中做的修改会直接影响到依赖它的其他组件和应用程序。IntelliJ IDEA 可以完美地引入这种项目,并识别 Gradle 定义的项目依赖。因此,在组合项目的开发中,代码的重构是透明的,无需 "publish locally" 操作。

打开组合项目

打开 组合项目时,请确保打开的是聚合主项目文件夹下的的 build.gradle 文件。

如果组合项目是通过 Composite Project for Monorepo 模板创建的,则 build.gradle 位于根目录。

如果组合项目是通过 Composite Project for Separate Repositories 模板创建的,则 build.gradle 位于 <project-name>-all 目录:

open composite project

管理项目属性

你可以编辑所有子项目共用的属性。点击 Jmix 窗口工具栏的 Settings→Project Properties,选中 All subprojects 即可:

composite project edit properties

共用属性包括制件仓库配置和 Jmix 框架版本。因此,可以一次将所有子项目升级到同一个 Jmix 的新版本。

配置依赖

大型组合项目中最有用的一个功能是可以在单一窗口中配置子项目之间的依赖。

该配置窗口通过 Jmix 工具窗口的 Settings → Dependencies Between Subprojects 操作打开。

composite project dependencies

这里的 customers 是一个扩展组件,依赖 users 组件。根据在这个窗口中做的配置,Jmix Studio 会自动在子项目的 build.gradle 文件中添加依赖,并配置扩展组件的 @JmixModule 注解。还能防止循环依赖。从下面的截图中可以看到,无法配置 users 组件依赖 customers,因为 customers 已经依赖了 users

composite project dependencies 2

管理数据存储

Studio 可以为扩展组件生成 Liquibase 更改日志,该功能在组合项目中也有效。

如需为扩展组件生成更改日志,首先需要在组件内定义一个 数据存储。数据存储在 Jmix 项目树中展示:

add on data store

该数据存储的设置会保存在 jmix-studio.xml 文件中,而非 Java 配置文件中。

然后,可以在数据存储上执行 Generate Liquibase Changelog 操作。

在组合项目中,需要为同一个扩展组件再次指定数据存储,因为组合项目有其自有的 jmix-studio.xml 文件,位于根目录或 <project-name>-all 项目中。因此,数据存储配置保存的位置与单独开发一个组件项目时有所不同,但是最后生成的更改日志是一样的。