当前位置: 首页 > news >正文

Maven 自动化构建

优质博文:IT-BLOG-CN

一、Maven:是一款服务于 Java平台的自动化构建工具

【1】Maven可以将一个项目按模块划分成不同的工程,利于分工协作;
【2】Maven可以将 jar包保存在自己的中央“仓库”中进行统一管理,有需要使用的工程引用这个文件接口即可,不需要真的将 ja包复制过来(解决同样的 jar包文件重复出现在不同的项目工程中,一方面浪费存储空间,另外也让工程比较臃肿);
【3】可以自动导入依赖的相关jar包,之前需要自己手动导入相关 jar包;
【4】Tip:如下表示运行时环境,主要存储 String等类似对象,其实只是一组 jar包的引用;
在这里插入图片描述

二、安装 Maven:配置环境变量即可

【1】创建 MAVNE_HOME环境变量
在这里插入图片描述

【2】在 path 中添加 Maven 的 bin 目录:验证(mvn -v)命令查看 maven 版本
在这里插入图片描述

三、自定义Maven仓库

修改解压目录下的conf/setting.xml文件:
在这里插入图片描述

四、命令

【1】maven compile:编译main文件,生成class文件位于 target 目录中。
【2】maven package:对主程序进行打包,生成文件在 target 目录中。
【3】maven clean:清理 target 目录下文件。
POM:project object model 项目对象模型。对于 Maven 工程是核心配置文件,与构建过程相关的一切设置都是在这个文件中进行设置。

五、坐标:使用下面三个向量在仓库中唯一定位一个Maven工程

【1】groupid: 公司或组织域名倒序+项目名
【2】artifactid: 模块名称Hello
【3】version: 版本

<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.0.RELEASE</version>

【定位的文件】:org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar

六、 仓库的分类

【1】本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有的Maven工程服务。
【2】远程仓库:①、私服:搭建在当前局域网下,为当前局域网网范围内的所有Maven工程服务。②、中央仓库:架设在Internet上,为全世界所有Maven工程服务。③、中央仓库的镜像:为了分担中央仓库的压力,提升用户访问的速度。

七、依赖:Maven解析依赖信息时,会到本地仓库中找被依赖的jar包。

对于我们开发的工程需要使用 install 命令安装后就可以进入仓库,生成 jar 包等文件。

<dependency><groupId>com.shidaiyintong</groupId><artifactId>Hello</artifactId><version>0.0.1-SNAPSHOT</version><scope>compile</scope>
</dependency> 

依赖具有传递性: 当父类依赖了 jar 包后,子类 Maven Dependencies 也会自动添加,但非 compile 范围的 jar 包不能传递。
依赖的排除性:使用 exlutions 标签

<exclusions><exclution><groupId>xxxx</groupId><artifactId>xxx</artifactId></exclution>
</exclutions>    
<exclusions><exclution><groupId>xxxx</groupId><artifactId>xxx</artifactId></exclution>
</exclutions>

依赖的原则: 解决 jar 包冲突问题,就近原则。相同路径取先声明者优先,指 dependency标签的声明顺序。

依赖的范围:
【1】compile: 对主程序、测试程序可见,主程序参与打包、测试程序不参与打包
【2】test: 对主程序无效,对测试程序有效,不参与打包
在这里插入图片描述

【3】provided: 主要用于开发,测试有效。不参与打包(不部署),防止冲突(特别是一些服务器的jar包)。 点击并拖拽以移动​点击并拖拽以移动​
在这里插入图片描述

八、生命周期

清理、编译、测试、报告、打包、安装、部署、运行。
特性: 当执行某一阶段时,都是从第一阶段开始执行。

九、利用 MyEclipse 中使用 Maven

【1】使用内置 Maven 但是需要设置如下(不建议使用自带的 Maven 程序,不稳定。使用我们自己解压的文件)Window—>Preferences—>Maven4MyEclise—>Installations—>Add
在这里插入图片描述

【2】设置 User Settings: 指定 conf/settings.xml 的位置,进而获取本地仓库的位置,如下:
在这里插入图片描述
【3】修改每次创建 Maven 项目后,JDK的版本,需要在 settings.xml 文件中 标签内添加如下:

<profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties>
</profile>

【4】Maven 中执行命令的方式:pom.xml—>右键—>Maven build…—>Golas(compile)等。
【5】Maven 创建一个 Web 工程: 创建的时候 packing:war 包,创建完后,会发现与我们平常的 web 工程不太一样,缺少web.xml等文件。添加方式如下:选中工程右键进入 properties 属性—> Project Facets 去掉 Dynamic Web Model再勾上Dynamic Web Model,会出现超链接如下:
在这里插入图片描述

【6】在 Content directory 中输入要存放标准Web工程生成的文件的目录
在这里插入图片描述

【7】最终目录如下:
在这里插入图片描述
【8】Maven工程导入Existing Maven Project 没有 cope 功能,因此要将Maven工程放入 workspace 目录中,进行导入。在Maven工程中主要通过 pom.xml 文件进行识别。普通Java文件导入时,有 cope 功能,也能够导入 Maven 工程,但必须是Eclipse 工程,工程中含有 .clsspath/.project 文件为Eclipse工程。
【9】自定义版本标签: 方便版本升级等问题的解决,凡是需要声明后统一使用的场合都可以使用, 使用的时候只需要在 中输入 ${atguigu.spring.version} 即可

<properties><atguigu.spring.verion>4.0.0.RELEASE</atguigu.spring.version>
</peoperties>

十、继承

对依赖范围: test、provide 的同一 jar 包的版本的管理。

解决思想: 将此 jar包统一提取到“父”工程中,在子工程中声明此 jar包依赖时不指定版本号,以父工程中统一设定的为准,同时也便于修改。

操作步骤:
【1】创建一个 Maven 工程作为父工程,打包方式为 pom
【2】在子工程中声明对父工程的引用
【3】将子工程中坐标与父工程坐标相同的内容删掉
【4】在父工程中统一 jar包依赖
【5】在自工程中删除jar包依赖的版本号

子类找干爹配置:

<parent><!--父元素的pom地址--><relativePath>../Parent/pom.xml</relativePath><!--相对地址-->
</parent>

父类统一管理配置: 配置集成后,执行安装命令 install 时,要先安装 parent,按顺序 install,解决办法,聚合即可。

 <dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit<artifactId><version>4.0</version><scope>test</scope></dependency><dependencies></dependencyManagement>

十一、聚合:一键安装各个模块工程

【1】配置方式: 在一个工程中配置,例如 parent 工程中:直接install parent项目就安装了全部工程,会自动检测顺序。
【2】查找 jar包的 pom文件: http://mvnrepository.com

<modules><module>../Hello</module><module>../HelloFriend</module>
</modules>
http://www.lryc.cn/news/347889.html

相关文章:

  • Unicode字符集和UTF编码
  • echarts默认图例(横线+圈圈)
  • Shell脚本的基础和变量
  • VRRP协议-负载分担配置【分别在路由器与交换机上配置】
  • 商务分析方法与工具(十):Python的趣味快捷-公司财务数据最炫酷可视化
  • 思源笔记如何结合群晖WebDav实现云同步数据
  • Electron Forge | 跨平台实战详解(中)
  • stable diffusion教程
  • 音频文件分析-- whisper(python 文档解析提取)
  • Python深度学习基于Tensorflow(3)Tensorflow 构建模型
  • 火爆多年的抖音小店,2024年想要入驻需要什么条件呢?
  • STM32G030C8T6:EEPROM读写实验(I2C通信)
  • 使用Git管理github的代码库-上
  • 经典文献阅读之--D-Map(无需射线投射的高分辨率激光雷达传感器的占据栅格地图)
  • 开源免费的定时任务管理系统:Gocron
  • 从零开始详解OpenCV车道线检测
  • 【Java代码审计】逻辑漏洞篇
  • SSH简介
  • Oracle的高级分组函数grouping和grouping_id
  • SqlServer 查询数据库 和 数据表 大小的语句
  • 特殊类的设计与单例模式
  • MySQL从入门到高级 --- 6.函数
  • Qt---信号和槽
  • POCEXP编写—文件上传案例
  • C#知识|上位机UI设计-详情窗体设计思路及流程(实例)
  • 目标检测——印度车辆数据集
  • Zotero Word中插入带超链接的参考文献
  • 如何在服务器上下载,解压github上的代码
  • BGP学习二:BGP通告原则,BGP反射器,BGP路径属性细致讲解,新手小白无负担
  • Docker学习(带图详细)