组合项目
创建组合项目
如需创建空的组合项目,在 项目向导 中选择 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 检出的已有项目,或添加已有项目的文件夹。
Studio 在 Jmix 工具窗口中将组合项目和所有的子项目都作为顶级节点展示:
可以看到,聚合项目的 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 目录:
管理项目属性
你可以编辑所有子项目共用的属性。点击 Jmix 窗口工具栏的 Settings→Project Properties,选中 All subprojects 即可:
共用属性包括制件仓库配置和 Jmix 框架版本。因此,可以一次将所有子项目升级到同一个 Jmix 的新版本。
配置依赖
大型组合项目中最有用的一个功能是可以在单一窗口中配置子项目之间的依赖。
该配置窗口通过 Jmix 工具窗口的 Settings → Dependencies Between Subprojects 操作打开。
这里的 customers 是一个扩展组件,依赖 users 组件。根据在这个窗口中做的配置,Jmix Studio 会自动在子项目的 build.gradle 文件中添加依赖,并配置扩展组件的 @JmixModule 注解。还能防止循环依赖。从下面的截图中可以看到,无法配置 users 组件依赖 customers,因为 customers 已经依赖了 users:
管理数据存储
Studio 可以为扩展组件生成 Liquibase 更改日志,该功能在组合项目中也有效。
如需为扩展组件生成更改日志,首先需要在组件内定义一个 数据存储。数据存储在 Jmix 项目树中展示:
然后,可以在数据存储上执行 Generate Liquibase Changelog 操作。
数据存储设置将保存在 jmix-studio.xml 文件中,而不是 Java 配置中。即,扩展组件不会为其所在的应用程序定义数据存储。相反,相同名称的数据存储应该由应用程序本身定义。
例如,如果在扩展组件中定义了 ads1 数据存储,则应该在包含此扩展组件的应用程序中定义 ads1 数据存储。并且,如果扩展组件为该数据存储提供了 Liquibase changelog,将由应用程序执行。
当在独立项目和复合项目中同时使用扩展组件时,需要两次指定数据存储,因为复合项目在其根目录或 <project-name>-all 聚合器项目中有自己的 jmix-studio.xml 文件。因此,数据存储设置将分别存储在独立项目和复合项目中,但生成的 changelog 集合将是相同的。
|