章节一、Maven学习

news/2024/11/14 13:27:50/文章来源:https://www.cnblogs.com/jieety/p/18502386

一、maven介绍

1、简介

Maven是一个项目管理工具(构建工程、管理jar包、编译代码、完成测试、项目打包)

Maven是基于POM(project object model 项目对象模型)实现的

Maven标准化了项目结构

Maven提供了一个免费的中央仓库 开源jar包

Maven是跨平台的

2、作用

一键构建:编译、测试、打包、安装、部署一系列过程称作“构建”,在maven中可以一键完成

依赖管理:

不使用maven的项目,磁盘空间被jar包占据,资源浪费

使用maven的项目,项目中不存放jar包,maven会建立一个仓库来统一管理jar包,所有项目共享这个仓库

3、工程的类型和结构

POM工程:逻辑工程,不含java代码

JAR工程:普通java工程

WAR工场:java web工程

工程结构:

- src:源码

- target:编译生成的文件

- pom.xml:maven工程配置文件

项目结构:

src/main/java:存放项目的java 文件

src/main/resources:存放项目资源文件,如配置文件

src/test/java:存放项目的测试文件

src/test/resources:存放测试时的资源文件

 二、一键构建

1、项目的生命周期

验证--编译--测试--打包--检查--安装--部署

2、maven常用命令

mvn clean:清除编译的class文件,即删除target目录

mvn validate:验证项目是否正确

mvn compile:编译maven,创建target目录

mvn test:编译maven,并运行测试文件

mvn package:编译maven,运行测试文件,并打包

mvn install:编译maven项目,运行测试文件,打包,并发布到本地仓库

mvn deploy:部署项目到远程仓库

mvn tomcat7:run:使用tomcat运行项目

三、依赖管理

1、maven仓库类型

本地仓库:maven只访问本地仓库,本地仓库没有则会从远程拉取到本地仓库

远程仓库:私服

中央仓库:maven提供,最全的仓库(一般配置镜像,访问镜像源)

2、maven配置文件

配置文件位置:maven/conf/settings.xml

修改本地仓库位置: 通过<localRepository>标签配置本地仓库位置

配置镜像:通过<mirrors>标签下的<mirror>标签配置,例如配置阿里云镜像:

<mirror> <!-- 指定镜像ID --><id>nexus-aliyun</id> <!-- 匹配中央仓库。--><mirrorOf>central</mirrorOf><!-- 指定镜像名称 -->  <name>Nexus aliyun</name> <!-- 指定镜像路径 -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url> 
</mirror>

配置jdk版本:maven默认使用jdk 1.5版本来验证语法,可以通过<profiles>标签配置,例如配置jdk 11

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

3、idea中配置maven插件

 注意:idea2020只支持maven3.6.3及以下的版本

在idea中file/settings/maven下,进行三项配置:

Maven home:Maven的安装目录

User settings file:maven/conf/settings.xml文件所在位置

Local repository:本地仓库所在位置

四、Maven工程开发

1、构建Maven工程

在idea中创建maven web项目:

新建项目选择maven项目---选择模板webapp---编写项目名、项目组位置(com.单位名)---进行maven配置(上面三项)

2、pom文件配置

依赖管理:

  <dependency><groupId>junit</groupId> 依赖组名称<artifactId>junit</artifactId> 依赖名称<version>4.13.1</version> 版本号<scope>test</scope> 依赖的作用范围</dependency>

插件管理:

<!--  tomcat7插件    -->
<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>8080</port><path>/</path><urlEncoding>UTF-8</urlEncoding><server>tomcat7</server></configuration>
</plugin>

五、Maven工程测试

1、Junit使用步骤

在main/java下添加被测类的代码

在test/java下添加测试类,测试类的写法注意以下三点:

  1. 方法名一般是test+被测方法名
  2. 在测试方法上方加上注解@Test
  3. 测试方法没有参数和返回值

2、Junit结果判定(断言)

断言:Assert.assertEquals(exp, act)
第一个参数:预期结果
第二个参数:实际结果

3、Junit测试夹具

@Before:测试执行之前执行

@After:测试执行之后执行

六、依赖冲突调节

maven原则:最短路径优先、最先声明

1、依赖产生的原因--依赖传递

依赖A引入了依赖C,依赖B也引入了依赖C,当同时引入依赖A、B的时候,就会引入两个依赖C,就会产生依赖冲突

2、最短路径优先原则

还是如上条件,依赖A、B同时引入依赖C;不同的是依赖A直接引入依赖C,依赖B通过依赖D来引入依赖C,那么根据最短路径优先原则,会保留依赖A引入的依赖C,依赖B则不会引入依赖C

3、最先声明原则

在依赖路径长度相等的情况下,谁现在pom文件中声明,谁就优先

4、排除依赖,锁定版本

排除依赖:在引入依赖的过程中,将产生冲突的依赖在其中一个依赖中排除在外

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.12.RELEASE</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId></exclusion></exclusions>
</dependency>

锁定版本:直接将冲突的依赖手动引入,锁定版本

<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.2.4.RELEASE</version></dependency></dependencies>
</dependencyManagement>

七、Maven聚合开发

聚合关系、继承关系

1、聚合关系

举例:电商买家项目、电商卖家项目

将可以共用的部分打成jar包放到仓库中

共用部分:dao层、domain层(java bean)、service层

买家控制层controller---引入上面的jar

卖家控制层controller---引入上面的jar

 

Maven在打包时,会将共用部分+各自单独的部分合并到一起打包,产生一个完整的可以运行的一个端的代码包

 2、继承关系

Maven父工程定义的依赖和插件子工程可以直接使用

Maven是单继承,如果想要实现多继承,可以曲线救国(即用引用依赖的方式)

Maven父工程是一个POM工程(逻辑工程),在父工程中可以引入管理所需要的三方jar包,例如Junit、mysql、druid、servlet、jsp、taglib等;还有插件如tomcat

子工程继承父工程是通过在pom中配置

<parent><groupId>com.compnay</groupId><artifactId>parent_name</artifactId><version>1.0-SNAPSHOT</version>
</parent>

dao和service工程都继承父工程,service工程又依赖dao工程,web工程又依赖service工程

项目运行时,可以直接运行父工程,也可以在本地发布了dao和service工程后,单独运行web工程

依赖传递失效原因和解决办法:

Maven在定义依赖传递时,一些依赖范围的依赖无法传递

 

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

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

相关文章

[GYCTF2020]Blacklist 1

[GYCTF2020]Blacklist 1 打开实例发现get提交框,提交1发现显示尝试万能密码无果尝试联合注入,显示出了过滤规则,可以见到很多关键字都被过滤了尝试堆叠注入,成功显示出数据表 ?inject=1;show databases;查表 ?inject=1;use ctftraining;show tables;看到了个FLAG_TABLE查…

Serverless GPU:助力 AI 推理加速

本文将探讨云原生 Serverless GPU 如何从根本上解决这些问题,以实现 AI 技术的高效落地。本文整理自 2024 云栖大会,阿里云智能集团高级技术专家聂大鹏、NVIDIA 解决方案架构师金国强演讲议题《Serverless GPU:助力 AI 推理加速》 近年来,AI 技术发展迅猛,企业纷纷寻求将 …

HyperWorks的shrink warp meshing

在HyperWorks中,针对某些具有复杂几何特征的零部件的网格剖分,Altair HyperMesh 向用户提供了一种名为 Shrink Warp Meshing 的技术,快捷高效地完成有限元模型前处理工作。例如在车辆碰撞分析研究中,用户可以使用 Shrink Warp Meshing 技术快速构建诸如传动系统等(具有复杂…

快速了解电源模块的使用方法 BDB10-12W系列电源模块

快速了解电源模块的使用方法 BDB10-12W系列电源模块电源是整个电路可靠工作的核心部分。然而,由于电源电路的电流和发热量较大,容易出现故障。今天我为大家介绍一下电源模块的使用方法。BOSHDIA电源模块是将电源电路集成到一个很小的PCB板上,从而实现输出稳定电压和大电流的…

GSDml结构

1. 如何方便的看到GSDml的结构在github上找到一个很好用的开源工具以及它的开源汉化,叫xml notepad,可以很好的看到设备树视图。 [2.9.0.8官方下载地址] [汉化插件]2. 文件结构总体就是header和Body两个部分ISO15745Profile | +--ProfileHeader +--ProfileBody|+--DeviceIdent…

什么是CRM系统?CRM系统在企业中扮演什么角色?

近年来,客户关系管理(CRM)系统逐渐显露头角,成为企业把握航向、驶向成功的关键。也有好多人来问关于这方面的问题,所以专门开一篇文章为大家深入了解CRM系统的含义、功能、价值以及它在现代企业中的实际应用,为的呀就是帮助大家全面把握这一概念。 一、CRM系统是什么? 客…

运行 MainApplication 时出错 运行 MainApplication 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行

运行springboot的启动类时,报了这个错。 解决办法: 1、修改选项2、添加缩短命令行项3、选择JAR清单

python 垃圾回收

引用计数器#define PyObject_HEAD PyObject ob_base; #define PyObject_VAR_HEAD PyVarObject ob_base;// 宏定义,包含 上一个、下一个,用于构造双向链表用。(放到refchain链表中时,要用到) #define _PyObject_HEAD_EXTRA \struct _object *_ob_next;标记清除 分…

作业4

作业①: 要求: 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东方财富网:http://quote.eastmoney.com/center/gridlist…

采集opc da 转 profinet IO项目案例

VFBOX协议转换网关支持PLC,modbus,EthernetIP,Profinet,CCLink,EtherCAT,IEC61850,IEC104,bacnet,DLT645,HJ212,opc ua,opc da,DNP3。目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 应用条件 2 4 查看OPC DA服务器的相关参数 2 5 配置网关采集opc da数据 4 6 用prof…

laravel PhpOffice 读取表格数据

/*** 更新安通船期* Description * Author Allen* Date 2024-11-11* @param Request $request [description]* @return [type] [description]*/public function updateAntongShipDate(Request $request){set_time_limit(0);$file = request()->file(file);if (em…

AI网关在企业系统应用中的角色和作用

在人工智能技术不断进步的今天,AI已成为推动全球经济增长的关键动力。预计到2027年,全球企业在AI技术上的支出将达到8000亿美元,年均增长率达到37.3%。这一趋势不仅改变了企业的业务模式,也对企业的安全策略提出了新的挑战,尤其是在构建、运行、扩展和保护AI应用程序及其底…