Maven 父子项目配置
应用服务模块使用 Maven 作为构建工具,Maven 支持多级项目的 Parent/Child 关系配置。配置项目的 Parent/Child 关系后,子项目可以重用父项目的版本,属性,依赖和插件管理,默认依赖等设置。
系统自带的应用模块(main)默认使用系统自带的parent pom,通过平台的容器镜像分发
<parent>
<groupId>com.justep.cloud</groupId>
<artifactId>project-boot-parent</artifactId>
<version>2.0</version>
</parent>
定制 parent 的场景
用户项目使用 Maven 构建,有自己的 parent 配置,在 Newdao 平台应用中要使用这些项目。
使用外部应用导入功能导入外部项目,外部项目使用了多级的 Maven 配置
定制 parent 步骤
- 在应用中添加 mavenInstall 组件,该组件会在池绑定时执行 "mvn install" 命令,安装 pom 中声明的依赖到 Maven 本地仓库
- model/service 目录下放入作为 service 下所有模块的 parent pom文件,文件内容由用户自行提供。
- 父子关系设置,子项目设置 parent , 重用 parent 中的设置,parent 设置 module 声明子项目(必须), mavenInstall 执行时根据 module 设置自动执行子项目的构建和安装,缺少 module 配置的子项目不会自动安装到 maven 本地仓库。
- 如果是需要独立运行的应用,在 project.xml 设置 parent,系统自动调度运行需要此设置。
安装 mavenInstall 组件
model/service/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test.com</groupId>
<artifactId>parent-child-sample</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<name>Parent Child Sample</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.10</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modules>
<module>mcommon</module>
<module>mcommon2</module>
</modules>
<dependencies>
</dependencies>
</project>
project.xml 添加 parent配置
只有外部导入的应用模块才需要添加此配置 顶层 app 节点下添加
<src>disable</src>
<parent relativePath="../pom.xml"></parent>
完整的project.xml
<?xml version="1.0" encoding="UTF-8"?>
<app revision="20170501">
<!-- 服务信息 -->
<name>mapp1</name>
<version>1.0.1</version>
<framework>springboot</framework>
<src>disable</src>
<parent relativePath="../pom.xml"></parent>
<!-- 服务协议 -->
<rpc>
<protocol switch="enable">REST</protocol>
<protocol switch="disable">GRPC</protocol>
<protocol switch="disable">THRIFT</protocol>
</rpc>
<!-- 数据源配置 -->
<datasource>
</datasource>
<!-- 编译插件配置 -->
<configuration>
<component>
<compile>disable</compile>
</component>
<swagger>
<compile>disable</compile>
</swagger>
</configuration>
</app>
注意事项
依赖兼容性
系统应用默认的 parent 中定义了 SpringBoot 框架和其它第三方依赖的版本,如果引入的项目需要在系统的应用(main)中使用,需要考虑依赖的兼容性。 "本地IDE安装目录\tools\maven\repo\com\justep\cloud\project-boot-parent\2.0" 目录下可查看默认 parent pom 文件的内容 如果是外部应用导入,可以不用考虑与系统依赖的兼容性问题。
系统应用模块的parent
系统应用模块(main)依赖了平台特有的库和市场组件,在默认的 project-boot-parent 进行了配置,建议不要修改系统应用模块的 parent,如果一定修改,需要自行合并 project-boot-parent 中的配置到 model/service/pom.xml 中
私有依赖
组织内部可能有一些公共的库,使用私有的 Maven 仓库发布,这些库不能通过公共的 Maven 仓库下载,称为私有依赖。 如果上述 parent 的定制配置中引入了私有依赖,需要在 Newdao 平台的 Maven 仓库中进行配置,平台执行 Maven 构建才能下载这些依赖。 有两种配置方法,建议使用配置代理仓库的方法
配置代理仓库
平台使用 Nexus 提供 Maven 仓库服务。 默认的 maven-public 仓库是一个 Group,可以在其中添加 Proxy 指向第三方 Maven 仓库 url
上传依赖
使用 Nexus 提供的上传机制上传依赖到平台 Maven 仓库。