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 步骤

  1. 在应用中添加 mavenInstall 组件,该组件会在池绑定时执行 "mvn install" 命令,安装 pom 中声明的依赖到 Maven 本地仓库
  2. model/service 目录下放入作为 service 下所有模块的 parent pom文件,文件内容由用户自行提供。
  3. 父子关系设置,子项目设置 parent , 重用 parent 中的设置,parent 设置 module 声明子项目(必须), mavenInstall 执行时根据 module 设置自动执行子项目的构建和安装,缺少 module 配置的子项目不会自动安装到 maven 本地仓库。
  4. 如果是需要独立运行的应用,在 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 仓库。

results matching ""

    No results matching ""