首页 > 其他分享 >章节一、Maven学习

章节一、Maven学习

时间:2024-11-13 11:42:50浏览次数:1  
标签:章节 maven 依赖 工程 仓库 jar Maven 学习

一、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在定义依赖传递时,一些依赖范围的依赖无法传递

 

标签:章节,maven,依赖,工程,仓库,jar,Maven,学习
From: https://www.cnblogs.com/jieety/p/18502386

相关文章

  • 大厂SSP的Java学习路线
    现在互联网环境这么差,Java还能学吗?学Java还能找到工作吗?大家好呀,我是程序员回家养猪,一个专升本,三段实习经历拿下大厂SSPoffer的程序员博主.关于我的个人经历,之前文章有聊过了。虽然现在Java开发的行情确实比以前要差很多,但是差并不是光Java开发差,是所有行业都变差......
  • 零基础入门大模型教程,2024最详细的学习路线,让你少走99%弯路!
    第一阶段:基础理论入门目标:了解大模型的基本概念和背景。内容:人工智能演进与大模型兴起。大模型定义及通用人工智能定义。GPT模型的发展历程。第二阶段:核心技术解析目标:深入学习大模型的关键技术和工作原理。内容:算法的创新、计算能力的提升。数据的可用性与规模性......
  • 强化学习理论-第4课-值迭代与策略迭代
    1.valueiterationalgorithm:值迭代上一节已经介绍过:1.1policyupdate:1.2Valueupdate:此时,\(\pi_{k+1}\)和\(v_k\)都是已知的1.3proceduresummary:1.4example:2.policyiterationalgorithm:Q1:Q2:Q3:2.1Policyevaluation:2.2Policyimprove......
  • GDB 学习笔记
    GDB学习笔记在使用gdb进行调试时,编译时需要加上-g参数,以确保生成包含调试信息的可执行文件。常用命令程序控制run(r)[arg1arg2...]从头开始运行程序直到结束或遇到断点,后面可以添加命令行参数。continue(c)从当前位置开始继续执行,直到下一个断点或程序结束。nex......
  • ts初步学习
    ts基础类型系统:变量和函数的类型声明(如 string, number, boolean 等)。接口(Interfaces):如何使用接口定义数据结构。类(Classes):了解类的定义和使用,包括类的构造函数和方法。装饰器(Decorators):Angular中的组件、模块等都是用装饰器定义的,如 @Component, @NgModule 等。1.......
  • Linux学习,clear命令
    Linuxclear命令在Linux和类Unix操作系统中用于清除终端屏幕上的所有内容,使终端看起来像是刚刚打开的一样。这个命令不会删除终端的历史记录或当前正在运行的命令,只是简单地清除屏幕上的显示内容。命令使用:在终端中输入 clear 并按下回车键即可执行该命令。注意事项:......
  • 计算机基础学习(非常详细)零基础入门到精通,收藏这篇就够了
    一、计算机概述计算机历史与发展:了解计算机的起源、发展简史,包括第一台电子计算机ENIAC的诞生、冯·诺依曼提出的“存储程序”原理等。计算机分类:巨型计算机、大中型计算机、小型计算机、微型计算机(如PC)、工作站等。计算机特点与应用:指令周期快、运算精度高、可靠性高......
  • Kruskal 重构树学习笔记+杂题
    图论系列:前言:相关题单:戳我一.最小瓶颈路唉,前面4个题单里其实有不少题是最小瓶颈路的做法啊。讲解摘自wiki。1.定义无向图\(G\)中\(x\)到\(y\)的最小瓶颈路是这样的一类简单路径,满足这条路径上的最大的边权在所有\(x\)到\(y\)的简单路径中是最小的。(对于下面这张......
  • 分布式事务~从seata实例来学习分布式事务
    部署dockerrun--name=seata1.4.2\--hostname=d67502e1d2ea\--mac-address=02:42:0a:ff:fe:02\--env=SEATA_IP=192.168.60.136\--env=SEATA_PORT=8091\--volume=/root/seata/seata-server-1.4.2/conf/registry.conf:/......
  • [这可能是最好的Spring教程!]Maven的模块管理——如何拆分大项目并且用parent继承保证
    问题的提出在软件开发中,我们为了减少软件的复杂度,是不会把所有的功能都塞进一个模块之中的,塞在一个模块之中对于软件的管理无疑是极其困难且复杂的。所以把一个项目拆分为模块无疑是一个好方法┌──────┐┌─......