maven模块管理和继承聚合

news2024/9/20 12:04:36

1.分模块设计与开发

分模块即为不同的模块实现不同的功能,方便项目开发和部署。

如下图:pojo为实体模块,tlias为业务模块,utils为功能模块

要在tlias模块中使用其他两个模块,需要在pom文件中加入对应的依赖。

如图,加入模块时仅打出部分名称即可。

遇到的问题:

新建模块时项目结构没有java和test目录,解决方案如下:

在新建模块页面如下操作,生成的模块目录即可齐全。

2.继承与聚合

1.继承

1.继承关系

1.首先创立父模块parent,将其打包方式设置为pom

关于三种打包方式的说明:

jar:普通模块打包,springboot项目基本都是jar包(内嵌tomcat运行)

war:普通web程序打包,需要部署在外部的tomcat服务器中运行

pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理

2.在子模块中设置parent为父工程

<relativePath>../parents/pom.xml</relativePath>

该代码表示父工程的pom文件的所在位置。../表示退出一级目录

上述操作完成后,在父工程parent模块中添加依赖,子模块同样也会生效。

ps:若父子工程都配置了同一个依赖的不同版本,以子工程的为准。

2.版本锁定

问题缘由:在一个项目中仅有几个项目需要用到特定的依赖,无需添加到父模块中,但一旦版本变更修改版本号非常麻烦,因此需要版本锁定。

1.版本锁定基础实现

在父工程中添加如下标签:

    <!-- 统一版本管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>3.15.1</version>
            </dependency>
            <!--JWT令牌-->
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt</artifactId>
                <version>0.9.1</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

在此标签作用下,子模块中版本号即可删掉,仅保留剩余两项即可。

    <dependencies>

      <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
      </dependency>

      <!--JWT令牌-->
      <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
      </dependency>
  </dependencies>

2.每个版本号放在一起

需要变更版本时直接在parent模块中修改即可,但是版本号分散开,不便于修改,可做如下处理:

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!-- 此为版本号统一管理 -->
        <aliyun_oss.version>3.15.1</aliyun_oss.version>
        <jwt.version>0.9.1</jwt.version>
    </properties>
    <!-- 统一版本管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>${aliyun_oss.version}</version>
            </dependency>
            <!--JWT令牌-->
            <dependency>
                <groupId>io.jsonwebtoken</groupId>
                <artifactId>jjwt</artifactId>
                <version>${jwt.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

 在<properties>标签中自定义属性,在 <dependencyManagement>标签中使用${}加入对应属性即可。

ps:

<dependencyManagement> <dependencies>的区别是什么?

<dependencies> 是直接依赖,在父工程配置了依赖,子工程会直接继承下来

<dependencyManagement> 是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)

2.聚合

问题缘由:要打包业务模块,首先要将其他模块打包成jar文件到本地仓库,随后才能打包业务模块,这样业务模块才会找到其他模块构建成功,此过程过于繁琐。

在父模块中使用<modules>标签来聚合所有模块实现一键打包。

    <!-- 聚合所有模块 -->
    <!-- ../表示退出当前目录 -->
    <modules>
        <module>../tlias-web-management</module>
        <module>../src/poji</module>
        <module>../src/utils</module>
    </modules>

ps:聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关。

继承聚合总结:

作用

        聚合用于快速构建项目

        继承用于简化依赖配置、统一管理依赖

相同点:

        聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中

        聚合与继承均属于设计型模块,并无实际的模块内容

不同点:

        聚合是在聚合工程中配置关系,聚合可以感知到参与聚合的模块有哪些

        继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己

3.maven私服

1.打开maven的settings.xml配置文件,在 servers 标签中,配置访问私服的个人凭证(访问的用户名和密码)

<server>
    <id>maven-releases</id>
    <username>admin</username>
    <password>admin</password>
</server>
    
<server>
    <id>maven-snapshots</id>
    <username>admin</username>
    <password>admin</password>
</server>

2.在 mirrors 中只配置我们自己私服的连接地址(如果之前配置过阿里云,需要直接替换掉)

<mirror>
    <id>maven-public</id>
    <mirrorOf>*</mirrorOf>
    <url>http://192.168.150.101:8081/repository/maven-public/</url>
</mirror>

3.需要在 profiles 中,增加如下配置,来指定snapshot快照版本的依赖,依然允许使用

<profile>
    <id>allow-snapshots</id>
        <activation>
        	<activeByDefault>true</activeByDefault>
        </activation>
    <repositories>
        <repository>
            <id>maven-public</id>
            <url>http://192.168.150.101:8081/repository/maven-public/</url>
            <releases>
            	<enabled>true</enabled>
            </releases>
            <snapshots>
            	<enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
</profile>

4.如果需要上传自己的项目到私服上,需要在项目的pom.xml文件中,增加如下配置,来配置项目发布的地址(也就是私服的地址)

<distributionManagement>
    <!-- release版本的发布地址 -->
    <repository>
        <id>maven-releases</id>
        <url>http://192.168.150.101:8081/repository/maven-releases/</url>
    </repository>
    
    <!-- snapshot版本的发布地址 -->
    <snapshotRepository>
        <id>maven-snapshots</id>
        <url>http://192.168.150.101:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

5.发布项目,直接运行 deploy 生命周期即可 (发布时,建议跳过单元测试)

ps:deploy发布命令即为将模块上传到私服中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2148850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【OceanBase诊断调优】—— obdiag 一条命令搞定卡合并问题根因分析

1. 背景 卡合并是一个OceanBase中较为复杂的问题&#xff0c;可能由各种问题引入导致。当前是否卡合并无明确定义&#xff0c;一方面我们认为超过36小时没合完是合并超时&#xff08;RS会报ERROR日志&#xff09;&#xff0c;另一方面用户可能自己判断合并超时&#xff08;根据…

探索AI大模型:从入门到精通的学习路径

每日一句正能量 其实许多波折不过是成功道上的荆棘路&#xff0c;纵然今天不如意&#xff0c;但我们还有未来。 前言 随着人工智能技术的快速发展&#xff0c;AI大模型学习正成为一项备受关注的研究领域。为了提高模型的准确性和效率&#xff0c;研究者们需要具备深厚的数学基…

pc远程控制软件有哪些?4款热门远程控制软件推荐,总有一款适合你!

在数字化转型的浪潮中&#xff0c;远程控制已成为企业提升运营效率、实现远程办公的不可或缺的工具。 正所谓 "运筹帷幄之中&#xff0c;决胜千里之外" &#xff0c;PC端远程控制软件让企业管理者和员工能够跨越地域限制&#xff0c;高效协同工作。 今天&#xff0c…

excel 单元格一直显示年月日

excel 单元格一直显示年月日&#xff0c;在单元格上右键选择单元格格式&#xff0c;选择日期时单元格会显示成日期格式

Flink 与 Kubernetes (K8s)、YARN 和 Mesos集成对比

Flink 与 Kubernetes (K8s)、YARN 和 Mesos 的紧密集成&#xff0c;是 Flink 能够在不同分布式环境中高效运行的关键特性。 Flink 提供了与这些资源管理系统的深度集成&#xff0c;以便在多种集群管理环境下提交、运行和管理 Flink 作业。Flink 与 K8s、YARN 和 Mesos 集成的详…

前后端独立部署的企业级私有化文档管理系统丨无忧·企业文档

大家好&#xff0c;我是软件部长&#xff0c;今天给大家介绍一款企业级在线知识库项目-JVS的无忧企业文档。 JVS提供低代码、物联网、规则引擎、智能BI、逻辑引擎、无忧企业文档&#xff08;在线协同&#xff09;、无忧企业计划、无忧企业邮筒等平台&#xff0c;欢迎关注微信公…

无处不在的人工智能:现状与未来

文章目录 引言科幻电影中的AI《她》&#xff1a;人工智能的爱情《我&#xff0c;机器人》&#xff1a;AI的觉醒 人工智能的发展现状专用人工智能的突破通用人工智能的起步 结语 引言 在21世纪的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经成为推动社会发展的关键…

热爱无国界:deepin 23获得全球用户的信任与支持

查看原文 随着 deepin 操作系统在全球范围内知名度和影响力的日益攀升&#xff0c;其独特的魅力和卓越的使用体验赢得了世界各地的众多开源爱好者与全球媒体的高度关注与支持。 海外分支社区的蓬勃发展 最近&#xff0c;deepin 在国际化进程中又迈出了坚实的一步——deepin …

【贪心算法】贪心算法一

贪心算法一 1.柠檬水找零2.将数组和减半的最少操作次数3.最大数4.摆动序列 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.柠檬水找零 题目…

C++中模板的初级使用函数模板(刚刚接触模板概念的小白也能明白)

文章目录 模板分类函数模板函数模板的原理函数模板基本语法 —— typename 以及 class简单的函数模板多类型模板参数class 和 typename 的选择类模板 模板分类 模板的核心思想是让编译器在编译时生成适用于具体类型的代码&#xff0c;这个过程称为模板实例化。C 中的模板分为两…

3 种自然语言处理(NLP)技术:RNN、Transformers、BERT

自然语言处理 (NLP) 是人工智能的一个领域&#xff0c;旨在使机器能够理解文本数据。NLP 研究由来已久&#xff0c;但直到最近&#xff0c;随着大数据和更高计算处理能力的引入&#xff0c;它才变得更加突出。 随着 NLP 领域的规模越来越大&#xff0c;许多研究人员都试图提高…

大模型算法二次开发,基本思路详细拆解

前言 随着众多大模型相继问世&#xff0c;大模型二次开发、大模型微调成为一项热门技术。本文为大家总结了大模型二次开发的基本方法与思路&#xff0c;希望对大家有所帮助。 转载自丨吃果冻不吐果冻皮 开发方法分类 1、领域知识注入&#xff1a;Continue PreTraining(增量…

LeetCode_sql_day28(1767.寻找没有被执行的任务对)

描述&#xff1a;1767.寻找没有被执行的任务对 表&#xff1a;Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

简单题88. 合并两个有序数组 (Python)20240920

问题描述&#xff1a; python&#xff1a; class Solution(object):def merge(self, nums1, m, nums2, n):""":type nums1: List[int]:type m: int:type nums2: List[int]:type n: int:rtype: None Do not return anything, modify nums1 in-place instead.&qu…

GSAP动画库:让网页动起来的艺术

GSAP动画库&#xff1a;让网页动起来的艺术 前言 在现代网页设计中&#xff0c;动画效果不仅能够提升用户体验&#xff0c;还能增强视觉吸引力。 GSAP&#xff08;GreenSock Animation Platform&#xff09;是业界领先的动画库&#xff0c;它提供了强大的工具和功能&#xff…

Vue3快熟

Vue3快速上手 1. Vue3简介1.1. 【性能的提升】1.2.【 源码的升级】1.3. 【拥抱TypeScript】1.4. 【新的特性】 2. 创建Vue3工程2.1. 【基于 vue-cli 创建】2.2. 【基于 vite 创建】(推荐)2.3. 【一个简单的效果】 3. Vue3核心语法3.1. 【OptionsAPI 与 CompositionAPI】Options…

医学数据分析实训 项目十 基于深度残差神经网络的皮肤癌检测

文章目录 综合实践三 基于深度残差神经网络的皮肤癌检测实现步骤1&#xff1a;图像数据预处理实现步骤2&#xff1a;模型构建实现步骤3&#xff1a;性能度量提交要求 1 基于深度残差神经网络的皮肤癌检测代码2 结果分析 综合实践三 基于深度残差神经网络的皮肤癌检测 皮肤镜图…

Games101学习 - 着色

本文主要讲述Games101中的着色部分。 文中将使用UE的UTexture2D接口&#xff0c;若不了解可以看这篇&#xff1a; https://blog.csdn.net/grayrail/article/details/142165442 1.面积比计算三角形坐标 通过三角形面积比可以得到三角形的坐标alpha、beta、gamma从而进行插值&a…

MATLAB画图,曲线图如何绘制美观,曲线图10种美化方法

曲线图是比较常用的图形&#xff0c;本文以二维曲线图为例&#xff0c;展示曲线的图的不同美化方法&#xff0c;如图1所示&#xff0c;是一个标准的曲线图&#xff0c;横坐标为x&#xff0c;纵坐标为y, 图1 标准曲线图 调整方法1 首先可以通过改变线的颜色&#xff0c;不同…

react + antDesign封装图片预览组件(支持多张图片)

需求场景&#xff1a;最近在开发后台系统时经常遇到图片预览问题&#xff0c;如果一个一个的引用antDesign的图片预览组件就有点繁琐了&#xff0c;于是在antDesign图片预览组件的基础上二次封装了一下&#xff0c;避免重复无用代码的出现 效果 公共预览组件代码 import React…