Java26:MAVEN


一.介绍:
maven是一款为java项目构建管理,依赖管理的工具,使用maven可以自动话构建 ,测试 ,打包
和发布项目,大大提高了开发效率和质量

二.安装和配置

下载地址:https://maven.apache.org/download.cgi
历史版本下载:Other Releases - Maven 3 archives 
配置变量:MAVEN-HOME :安装地址
                  path:%MAVEN-HOME%\bin
测试地址:mvn -v

settings.xml 配置:

配置本地仓库:
  <localRepository>D:\java\maven\repository</localRepository>

配置中央仓库的阿里镜像:
      <mirror>
     <id>alimaven</id>
     <name>aliyun maven</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
     <mirrorOf>central</mirrorOf>
     </mirror>
     
配置jdk版本:
    <profile>
    <id>jdk-17</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    <jdk>17</jdk>
    </activation>
    <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
    </properties>
    </profile>
    
    
配置idea工具的maven
File-settings-Build,Execution,Deployment-Build Tools-Manven 路径下:
Maven home path 选择maven安装目录


三.maven定位属性
maven工程相对之前的工程,多出一组gavp属性
maven 中的gavp中GroupID,artfactID, VersionID ,Packaging 四个属性

1) GroupID格式:com.{公司/BU}.业务线.{子业务线},最多4级
例如: com.taobao.tddl 或者 com.alibaba.sourcing.multilang
2)ArtfactID 格式: 产品线名-模块名。语义不重复不遗漏
 例如:tc-client/uic-api
3)Version 版本号推荐:主版本号.次级版本号.修订号 1.0.0
主版本号:当作了不兼容的api修改,或者增加了能改变产品方向的新功能
次版本号:当作了向下兼容的功能性新增(新增类/接口等)
修订号:修复bug ,没有修改方法签名的功能加强,保持api兼容性。
例如  初始:1.0.0
      修改bug:1.0.1
      功能调整:1.1.1
      

packaging 定义规则:

指示将项目打包为什么类型的文件,idea 根据packaging值,识别maven项目类型
packaging 属性为jar(默认值)代表普通的java工程,打包以后就是.jar结尾的文件
packaging 属性为war ,代表java的web工程,打包以后.war结尾的文件
packaging 属性为pom, 代表不会打包,用来做继承的父工程


四.maven 工程快速搭建

1)安装插件:JBLJAVATOWEB

2)创建一个javase maven 工程

3)maven工程 右键 jbljavatoweb


五.maven依赖管理及构建命令

1)第三方依赖声明

denpendencies --第三方依赖的集合

dependency 每个依赖项

2)查找第三方依赖
mvn 官网:https://mvnrepository.com
maven插件   maven-search
   安装插件后   进入 Tools- maven search 输入信息 即可
   
 扩展:
 1.提取版本号,统一管理
 2.可选属性scope
  scope 引入依赖的作用域
   默认 compile  main  test  打包运行
   
         test   test    junit@Test
         runtime  main 不会,test 不会, 打包和运行 Class.forName(com.mysql.cj.jdbc.Driver)
         provided main  test   打包运行不会  Servlet HttpServlet
         总结:如果不熟悉,使用默认值即可,全部生效
         

 3.依赖传递:导入依赖,会自动导入依赖的依赖(compile  denpendenices)
             简化依赖的导入  确保依赖的版本无冲突
    依赖冲突:发现已经存在的依赖 会终止依赖传递,避免 循环依赖和重复依赖的问题!
    
    依赖冲突的解决原则:
    第一原则:谁短谁优先!引用的路径长度
     A -C -B1.0
     F -B 2.0           A C F B 2.0
     第二原则:谁上谁优先! denpendencies 声明的先后顺序
       A-B1.0
       F-B2.0
       A-F-B 1.0
       
    4.依赖下载失败解决方法:
    1)检查网络连接和Maven仓库服务器状态
    2)确保依赖项的版本号与队友的版本号匹配并检查Pom文件依赖是否正确
    3) 清楚本地Manven仓库缓存文件lastupdated 并删除,刷新重新下载
    
    5.构建命令
    
    项目构建是指将源代码,依赖库和资源文件等转换为可执行或可部署的应用程序的过程,在这个过程包括
    编译源代码,链接依赖库,打包和部署等多个步骤
    
    语法: mvn  构建命令  构建命令 
    
     mvn  clean   清理编译或打包后的项目结构,删除target文件夹
     mvn  compile   编译项目,生成target文件
     mvn  test   执行测试源码(测试)
     mvn  site    生成一个项目依赖信息的展示界面
     mvn   package   打包项目, 生成war/jar 文件
     mvn   install   打包后上传到maven本地仓库(本地部署)
     mvn  deploy      只打包,上传到maven 私服仓库(私服部署) 
     
     注意:
     1.命令执行必须要我们进入到项目路径
     2.部署必须是jar包形式
     
     
     构建命令周期:
     构建命令周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令
     ,也是一种简单构建的思路
     清理周期:主要对项目编译生成文件进行清理
     包含命令:clean
     
     默认周期:定义了真正构建时所需要执行的所有步骤,它是生命周期中最核心的部分
     包含命令:compile -test -package  -install/deploy
     报告周期
     包含命令:site
     打包:mvn clean package 本地仓库:mvn clean install
     
     最佳使用方案
     打包: mvn  clean  package
     重新编译:mvn clean  compile
     本地部署:mvn  clean  install
     
     六.继承
     
     1.继承概念:
     Maven继承是指在Maven 的项目中,让一个项目从另外一个项目中继承配置信息的机制。
     继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作
     2.继承的作用:
      作用:在父工程中统一管理项目中的依赖信息,进行统一版本管理
     3.继承语法:
       父工程
         <groupId>org.example</groupId>
    <artifactId>maven-shop-parent</artifactId>
    <!-- 当前工程为父工程,它要去管理子工程,所以打包方式必须是pom-->
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
     
     子工程
     <!-- 使用parent标签指定当前工程的父工程-->
       <parent>
        <artifactId>maven-shop-parent</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

     4. 父工程依赖统一管理
       父工程声明版本
       <!-- 使用denpendencyManagement标签配置对依赖的管理-->
          <!-- 被管理的依赖并没有真正被引入到工程-->
          <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.18.0</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.23</version>
            </dependency>

        </dependencies>
           子工程声明版本
           <!-- 子工程引入依赖,不声明版本号,继承父工程的版本号-->
            <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            
        </dependency>
    </dependencies>


    七.聚合
    
    1.聚合概念
    Maven 聚合是指多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程的
    构建的过程
    2.聚合作用:
    a.统一管理子项目构建,通过聚合,可以将多个子项目组织在一起,方便管理和维护
    b.优化构建顺序,通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况
    
    3.聚合语法
    父项目中包含子项目列表
       <modules>
        <module>shop-user</module>
        <module>shop-order</module>
    </modules>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

04C++循环结构

//while 循环#include <iostream> using namespace std; int main() { int num0; while (num<10){ cout<<num<<endl; num; } return 0; } //do while语句 #include <iostream> using namespace std; int mai…

Appium中的api(一)

目录 1.基础python代码准备 1--参数的一些说明 2--python内所要编写的代码 解释 2.如何获取包名和界面名 1-api 2-完整代码 代码解释 3.如何关闭驱动连接 4.安装卸载app 1--卸载 2--安装 5.判断app是否安装 6.将应用放到后台在切换为前台的时间 7.UIAutomatorViewer的使用 1--找…

并联 高电压、高电流 放大器实现 2 倍输出电流模块±2A

1.1 并联输出电路设计注意事项 直接对两个功率运算放大器的输出进行硬接线并不是一种好的电气做法。如果两个运算放大器的输出直接连接在一起&#xff0c;则可能会导致不均匀的电流共享。这是因为其中的每个运算放大器都尝试强制施加略微不同的 Vout 电压&#xff0c;该电压取决…

vulnhub(16):sickos(两种打点方式)

端口 ip&#xff1a;192.168.72.154 nmap -Pn -p- 192.168.72.154 --min-rate 10000PORT STATE SERVICE 22 open ssh 3128 open http-proxy 8080 closed http-proxy web渗透方式一&#xff1a;web后台 正常访问80端口&#xff0c;是不开放的&#xff0c;我们需要配置…

高速定向广播声光预警系统赋能高速安全管控

近年来&#xff0c;高速重大交通事故屡见不鲜&#xff0c;安全管控一直是高速运营的重中之重。如何利用现代化技术和信息化手段&#xff0c;创新、智能、高效的压降交通事故的发生概率&#xff0c;优化交通安全管控质量&#xff0c;是近年来交管部门的主要工作&#xff0c;也是…

云原生Istio基础

一&#xff0e;Service Mesh 架构 Service Mesh&#xff08;服务网格&#xff09;是一种用于处理服务到服务通信的专用基础设施层。它的主要目的是将微服务之间复杂的通信和治理逻辑从微服务代码中分离出来&#xff0c;放到一个独立的层中进行管理。传统的微服务架构中&#x…

浅析Android View绘制过程中的Surface

前言 在《浅析Android中View的测量布局流程》中我们对VSYNC信号到达App进程之后开启的View布局过程进行了分析&#xff0c;经过对整个App界面的View树进行遍历完成了测量和布局&#xff0c;确定了View的大小以及在屏幕中所处的位置。但是&#xff0c;如果想让用户在屏幕上看到…

【十六进制数转十进制数 】

【十六进制数转十进制数 】 C语言版本C 版本Java版本Python版本 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 从键盘接收一个十六进制数&#xff0c;编程实现将其转换成十进制数。 输入 输入一个十六进制数 输出 输出一个十进制数 样…

GitHub 上的优质 Linux 开源项目,真滴硬核!

作为一名互联网人&#xff0c;提起 Linux 大家都不陌生&#xff0c;尤其是日常跟 Linux 操作系统打交道最多的&#xff0c;最熟悉不过了。互联网上关于 Linux 相关的教程和资料也非常的多&#xff0c;但是当你从中筛选出真正对自己有帮助的资料是需要花费很大精力与时间的。 G…

JVM基础(内存结构)

文章目录 内存结构JAVA堆方法区 &#xff08;Method Area&#xff09;运行时常量池&#xff08;Runtime Constant Pool&#xff09; 虚拟机栈 &#xff08;Java Virtual Machine Stack&#xff09;本地方法摘栈&#xff08;Native Method Stacks&#xff09;程序计数器&#xf…

交易的人生就是对未来不断的挑战!

在这个充满不确定性的市场中&#xff0c;我们每个人都渴望找到一条通往成功的路径。在Eagle Trader交易员中&#xff0c;有一位资深交易者&#xff0c;他不仅对交易有着不同寻常的执着和热爱&#xff0c;而且他的真诚见解和独到的交易哲学&#xff0c;可能会触动你的心弦。他的…

尚硅谷-react教程-求和案例-@redux-devtools/extension 开发者工具使用-笔记

## 7.求和案例_react-redux开发者工具的使用(1).npm install redux-devtools/extension(2).store中进行配置import { composeWithDevTools } from redux-devtools/extension;export default createStore(allReducer,composeWithDevTools(applyMiddleware(thunk))) src/redux/s…

OpenCV系列教程六:信用卡数字识别、人脸检测、车牌/答题卡识别、OCR

文章目录 一、信用卡数字识别1.1 模板匹配1.2 匹配多个对象1.3 处理数字模板1.4 预处理卡片信息&#xff0c;得到4组数字块。1.5 遍历数字块&#xff0c;将卡片中每个数字与模板数字进行匹配 二、人脸检测2.1人脸检测算法原理2.2 OpenCV中的人脸检测流程 三、车牌识别3.1 安装t…

一行代码,实现请假审批流程(Java版)

首先画一个流程图 测试流程图 activiti 项目基础配置 activiti 工作流引擎数据库设计 工作流引擎API 介绍 什么是BPMN流程图 工作流引擎同类对比 继续学习方向 总结 工作流审批功能是办公OA系统核心能力&#xff0c;如果让你设计一个工作流审批系统&#xff0c;你会吗…

SDK5(note中)

在原有SDK5(note上)里的代码上添加了 timer的消息 LRESULT OnCreate(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {OutputDebugString(_T("[11syy]WM_CREATE\n"));//创建一个计时器SetTimer(hwnd, 1, 1000, nullptr);return TRUE; }LRESULT OnClese(HWND …

全星魅 北斗三号船载终端的优势和领域利用

QM43BS型北斗三号船载终端&#xff1a;开启航海通信与定位新时代 在当今这个信息化高速发展的时代&#xff0c;航海领域对于通信与定位技术的需求愈发迫切。深圳市全民北斗科技有限公司&#xff0c;作为北斗技术应用领域的佼佼者&#xff0c;针对数传通信和位置服务应用&#x…

Python 实现深度学习模型预测控制--预测模型构建

链接&#xff1a;深度学习模型预测控制 链接&#xff1a;WangXiaoMingo/TensorDL-MPC: DL-MPC(deep learning model predictive control) is a software toolkit developed based on the Python and TensorFlow frameworks, designed to enhance the performance of tradition…

你了解kafka消息队列么?

消息队列概述 一. 消息队列组件二. 消息队列通信模式2.1 点对点模式2.2 发布/订阅模式 三. 消息队列的优缺点3.1 消息队列的优点3.2 消息队列的缺点 四. 总结 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&…

Android Junit 单元测试 | 依赖配置和编译报错解决

问题 为什么在依赖中添加了testImplement在build APK的时候还是会报错&#xff1f;是因为没有识别到test文件夹是test源代码路径吗&#xff1f; 最常见的配置有: implementation - 所有源代码集(包括test源代码集)中都有该依赖库.testImplementation - 依赖关系仅在test源代码…

理解磁盘结构---CHS---LAB---文件系统

1&#xff0c;初步了解磁盘 机械磁盘是计算机中唯的一个机械设备&#xff0c; 特点是慢&#xff0c;容量大&#xff0c;价格便宜。 磁盘上面的光面&#xff0c;由数不清的小磁铁构成&#xff0c;我们知道磁铁是有n&#xff0f;&#xff53;极的&#xff0c;这刚好与二进制的&…