IDEA maven使用详解

news2024/12/24 22:32:35

前提

确保本地安装了maven

以一个模块工程为例,内部包含了许多maven项目
在这里插入图片描述

生命周期

这是全部的生命周期
在这里插入图片描述

其中,常用的生命周期的各个功能为:
(clean生命周期)mvn clean清理target
(default生命周期①)mvn validate验证项目为maven项目,正确并且所有信息可用
(default生命周期②)mvn compile编译源代码为.class文件(java)
(default生命周期③)mvn test对管理的模块项目进行test目录下的(JUnit)单元测试
(default生命周期④)mvn package打包.class文件成为JAR(或其它格式文件)
(default生命周期⑤)mvn verify集成测试,运行任意的检查测试来验证项目达到标准
(default生命周期⑥)mvn install安装包到本地maven仓库(自己取的结构名下可以找到),可供他人使用
(default生命周期⑦)mvn depoly远程部署,需要在maven本地仓库的setting里面写用户名密码,以及连上服务器上的(nexus)私有仓库
(site生命周期)mvn site覆盖率测试和PMD测试,生成报告,生成站点

在这里插入图片描述

自定义拓展插件

可用自定义插件,需要在POM中写入(这里展示生成源码jar包插件
写入区域为<project>内,格式:

<build>
        <plugins>
            <plugin>
            <!--GAV坐标-->
                <groupId>org. apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <!--执行内容-->
                <executions>
                    <execution>
                    <!--执行目标-->
                        <goals>
                         <!--jar:对源码打包,test-jar:对测试代码打包-->
                            <goal>jar</goal>
                        </goals>
                        <!--执行阶段,可在前面图片内查看过程-->
                        <phase>generate-test-resources</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

写完后,点击install,即可发现有2个jar包,一个是发布的jar包,一个是源码jar包
在这里插入图片描述

当我们在这写入2个目标时,就会生成测试jar包和源码jar包了
在这里插入图片描述

分模块开发与设计思想

通常在中大型项目中需要解耦,因此将原有的单模块(dao,service,controller层统一由一个pom进行管理)全部拆分成独立的模块,方便团队协作开发
项目的大模块又称聚合模块
在这里插入图片描述

父模块pom编写

父模块作为所有项目的模块的祖宗模块,它需要统一管理版本
因此,pom中必须有版本管理配置
其中,<dependencyManagement>中的 ${XXX.version}对应的是上面<properties>内的版本
请注意,<dependencyManagement>是不会自动加载依赖的(懒加载),只有你在继承它的子模块中加入了相应的依赖,并且不填写版本,maven才会加载。
当然,如果你在子模块中写入了版本,maven则会以就近原则来选取子模块的版本
子模块可用加入父模块没有的依赖,作为自己需要的依赖

<properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!--spring-->
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <spring-boot.version>...</spring-boot.version>
</properties>
<dependencyManagement>
        <dependencies>
            <!--SpringCloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SpringBoot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                GAV...
            </dependency>
    </dependencyManagement>
</dependencies>

子模块pom编写

所有的子模块都需要继承父模块parent进行统一的版本管理,格式为:

<parent>
        <groupId>组织地址</groupId>
        <artifactId>父模块名称</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../父模块名称</relativePath>
</parent>

聚合模块pom编写

聚合模块指定了内部的子模块,同时也是继承了父模块parent(也是parent的子模块),格式为

<parent>
        <groupId>组织地址</groupId>
        <artifactId>父模块名称</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../父模块名称</relativePath>
</parent>
<modules>
        <module>控制层子模块名称</module>
        <module>业务层子模块名称</module>
        <module>模型层子模块名称</module>
</modules>

同时,需要加上<packaging>pom</packaging>,因为这样使得maven辨别此为聚合模块,而不是一个把子模块全部混淆的jar包父模块pom与jar详解

聚合模块的子模块pom编写

聚合模块的子模块可以是各层拆分后得到的模块(dao,service,ctrler等)
因此,它需要指定父模块为聚合模块,路径不需要填写(填写正确也没啥事)

<parent>
        <groupId>cn.emscc</groupId>
        <artifactId>emscc-content</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../../emscc-content</relativePath>
</parent>

由于我们已经写好了一个base模块,供别的模块调用依赖,因此,我们调用一下base模块即可,然后再调用自己相调用的依赖

<!--emscc-base-->
<dependency>
            <groupId>cn.emscc</groupId>
            <artifactId>emscc-base</artifactId>
            <version>0.0.1-SNAPSHOT</version>
</dependency>

在这里插入图片描述

版本冲突

在这里插入图片描述

如:A依赖了B的1.0,C依赖了B的2.0,导致B有2个版本

解决办法:
①使用<exclusions>排除依赖
只使用B的1.0版本,那么在依赖C时排除对B的依赖
②使用<dependencyManagement>锁定版本号

循环依赖

A模块要去依赖B模块的部分功能,B模块也要去依赖A模块的部分功能;
从而导致maven在打包时不知道先去打包哪个(由于maven打包是自下而上的打包方式)
解决办法:
①设置service与service impl包,将各个不同模块的互相引用分离开来,其它模块引用自己的接口,而自己的模块也引用其它模块的接口即可
②添加一个中间模块,让大家都去引用中间模块

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

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

相关文章

自然语言处理的进阶之路

1、隐马尔可夫链路一般较短原因 连乘链路太长&#xff0c;会导致数据稀疏&#xff0c;零频词太多 2、零频问题的一般解决方案 平滑/回退/差值 当n设置较小时&#xff0c;仍然会存在oov问题&#xff08;语料中未出现的词&#xff09; 2.1、平滑 2.1.1、加1平滑/拉普拉斯平…

Maven初级(一)

目录 一. Maven概述 1.1 Maven是什么 1.2 Maven的作用 1.2.1 项目构建 1.2.2 依赖管理 1.2.3 统一项目结构 1.3 Maven模型 1.3.1 插件 1.3.2 项目对象模型 1.3.3 依赖管理模型 二. Maven基础概念 2.1 仓库&#xff1a; 2.2 仓库分类 2.2.2 远程仓库(私服) 中央仓…

Python继承的优缺点

推出继承的初衷是让新手顺利使用只有专家才能设计出来的框架&#xff01;子类化内置类型的问题在Python2.2之前&#xff0c;内置类型不能子类化&#xff0c;如list、dict等。在Python2.2之后&#xff0c;内置类型可以子类化了&#xff0c;但是要注意的是&#xff1a;内置类型&a…

Individual tree segmentation and tree-counting using supervised clustering

ABSTRACT 个体树木分割 (ITS) 或树木计数是精准林业和农业过程中的一项基础工作。与费时费力的人工检查不同&#xff0c;计算机视觉在基于无人机 (UAV) 的应用中显示出巨大的前景&#xff1b;此类应用之一包括森林资源清单中的自动树木计数问题。然而&#xff0c;由于树冠冠层…

深度学习性能评估指标介绍

首先是相关数据描述。假设原始样本中有两类数据&#xff0c;其中&#xff1a;总共有P个类别为1的样本&#xff0c;假设类别1为正例总共有N个类别为0的样本&#xff0c;假设类别0为负例经过分类后&#xff1a;有TP个类别为1的样本被系统正确判定为类别1&#xff0c;FN个类别为1的…

【哈希表】leetcode1. 两数之和(C/C++/Java/Python/Js)

leetcode1. 两数之和1 题目2 思路3 代码3.1 C版本3.2 C版本3.3 Java版本3.4 Python版本3.5 JavaScript版本4 总结1 题目 题源链接 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数…

iPad 屏幕镜像到 macbook

将iPad 到屏幕投屏到 macbook&#xff0c;只需要三步就可以实现用数据线连接ipad和macbook在macbook的应用中找到QuickTime Player&#xff0c;打开QuickTime Player&#xff0c;在【文件】中选择【新建影片】在弹出窗口的小箭头中&#xff0c;选择需要的iPad名称通过数据线连接…

目标跟踪心得篇七:解决目标跟踪评价指标输出为0或异常(Trackeval、MMtracking)

如果在做跟踪任务测评时,发现输出的评价指标全为0或者异常值时该怎么办(如下图)?博主调试了很久发现其实这是MMtracking的一个Bug,因此如果不是用MMtracking框架的话本节可能对你帮助不大。 大致有以下两个内容: TrackEval目前还不能做到对多类别的MOT任务计算评价指标,…

FDD与TDD

TDD&#xff0c;时分双工(Time Division Duplexing) FDD&#xff0c;频分双工(Frequency Division Duplexing) 帮助理解&#xff1a; 1.FDD&#xff1a;双车道&#xff0c;一个车道只能走一个方向&#xff0c;双向互不干扰。 2.TDD&#xff1a;单车道&#xff0c;不同时间允…

RabbitMQ看这一篇文章就够了

第一章 RabbitMQ介绍 第1节 MQ是什么 1 2 3 41. 消息队列(Message Queue),又叫做消息中间件 2. 用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成 3. 通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信 4. MQ 是用来解…

北斗短报文遥测终端机在水雨情监测系统中的应用

一、方案概述 我国水利监管手段比较单一&#xff0c;水雨情监测移动公网覆盖不足等诸多问题&#xff0c;利用北斗短报文通信技术数字化信息采集技术&#xff0c;实现水文自动测报&#xff0c;大幅度提升湿地生态和水域的监测、查询、预警和应急处理能力。在恶劣天气情况或特殊灾…

360(drizzleDumper)脱壳教程“某药数据”

一、drizzleDumper的下载使用 1.上GitHub下载开源的脱壳工具mirrors / DrizzleRisk / drizzleDumper GitCodedrizzleDumper是一款基于内存搜索的Android脱壳工具。 &#x1f680; Github 镜像仓库 &#x1f680; 源项目地址 ⬇ ⬇...https://gitcode.net/mirrors/DrizzleRisk…

ZedGraph如何显示鼠标附近的曲线的点?介绍三种方法

使用ZedGraph绘制曲线图的时候&#xff0c;不仅仅是看曲线的走向&#xff0c;也需要查看曲线上某位位置处采集到的数据是多少。下面介绍三种方法&#xff0c;从简单到复杂。 文章目录1、使用自带的功能显示点的坐标2、 多条曲线的坐标点同时显示3、 多条曲线的坐标点同时显示&a…

100%国产C2000,P2P替代TMS320F280049C,独立32位双核CPU,主频高达400MHz

一、特性参数 1、独立双核&#xff0c;32位CPU&#xff0c;单核主频400MHz 2、IEEE 754 单精度浮点单元 &#xff08;FPU&#xff09; 3、三角函数单元 &#xff08;TMU&#xff09; 4、1MB 的 FLASH &#xff08;ECC保护&#xff09; 5、1MB 的 SRAM &#xff08;ECC保护&…

docker基础简介

一、docker架构 二、Docker 基本命令 1、查看 Docker 版本 查看 Docker 版本包括 Docker 版本号、API 版本号、对应的 Git Commit、Containerd 和 runC的版本信息等。 # docker version Client: Docker Engine - Community Version: 20.10.4 API version: 1.40 Go version: …

新手小白做跨境电商应该从哪里入手?

想从事跨境电商先从哪里入手?米贸搜整理如下&#xff0c;希望可以帮助到你跨境电商平台&#xff0c;如&#xff1a;Amazon、eBay、aliexpress、Cdiscount、wish等。想从事跨境电商&#xff0c;你得搭建电商团队&#xff0c;先从跨境电商平台的入驻入手&#xff0c;弄清楚入驻条…

【设计模式】行为型模式·模板方法模式

学习汇总入口【23种设计模式】学习汇总(数万字讲解体系思维导图) 一.概述 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类中&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 在面向对象程序设计过程中&#xff0c;程序员常…

HTB_Inclued_TFTP文件包含与LXD提权

文章目录信息收集TFTPLXD 提权环境安装报错信息收集 开放80端口&#xff0c;url为http://ip:port?filehome.php 测试文件包含&#xff0c;本地包含成功&#xff0c;远程失败&#xff0c;尝试上传后门木马反弹shell 根据图示&#xff0c;网站目录为var/www&#xff0c;其他功…

minio 使用docker安装和入门案例demo

minio目录1.安装2.页面web访问3.在界面上传4.使用api上传5.使用api下载目录 公司目前用到文件上传&#xff0c;考虑到费用等情况&#xff0c;可以在公司自己的服务器上搭建一下。本人记录minio的使用情况。 “前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

搭建 SpringBoot 项目

创建 SpringBoot 项目 配置application.properties 根据自己数据库进行配置 spring.datasource.nameexamspring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver spring.datasource.usernameroot spring.datasource.passwordroot spring.datasource.urljdbc:mysql://1…