maven

本文介绍了Maven的基本概念,包括项目管理工具的角色、核心目录结构、POM、坐标、依赖和仓库。详细阐述了Maven的构建过程,如清理、编译、测试和打包等,并演示了如何在命令行和IDEA中使用Maven命令。此外,还讲解了POM的重要性、依赖范围和生命周期的概念,以及在IDEA中配置和使用Maven的方法,帮助初学者快速掌握Maven的使用。
摘要由CSDN通过智能技术生成

Maven概述

1.1Maven是什么

目前主流的构建工具有Maven 和 Gradle

Maven 是 Apache 开源组织奉献的一个开源项目。Maven 这个词可以翻译为“知识的积累”,也可 以翻译为“专家”或“内行”。

本质

项目管理工具:将项目开发管理过程抽相乘一个项目对象模型(POM)

Maven 是跨平台的,这意味着无论是在 Windows 上,还是在 Linux 或者 Mac 上,都可以使用同样的命令。

总结:

  • Maven 统一集中管理好所有的依赖包,不需要程序员再去寻找。
  • 项目中依赖的第三方组件,Maven 可以轻松解决重复和冲突问题。
  • Maven 作为一个开放的架构,提供了公共接口,方便同第三方插件集成。程序员可以将自己需要 的插件,动态地集成到 Maven,从而扩展新的管理功能。
  • Maven 可以统一每个项目的构建过程,实现不同项目的兼容性管理。

1.2构建

构建就是以我们编写的Java代码,框架配置文件,静态资源等作为原材料,去生产一个 可以运行的项目的过程。

  • 主要环节
    • 1.清理:将之前编译得到的旧的class 文件删除,为下一次编译做准备
    • 2.编译:将java文件编译成字节码文件
    • 3.测试:自动测试,自动调用Junit
    • 4.报告:测试执行的结果
    • 5.打包:动态Web工程打包成war包,不同Java工程jar包
    • 6.安装:将打包得到的文件复制到仓库中的指定位置
    • 7.部署:将war包打包赋值到服务器指定目录下

2.安装Maven

  • 官方下载安装包,找到一个没有中文的目录解压

  • 检查JAVA_HOME环境变量

  • 解压Maven核心程序压缩包,复制到一个不包含中文的目录下

  • 配置Maven环境变量与java类似

    • MAVEN_HOME或M2_HOME
    • path

3.cmd–>mvn - v查看Maven版本

3.Maven核心概念

1.约定的目录结构

2.POM

3.坐标

4.依赖

5.仓库

6.生命周期,插件,目标

7.继承

8.聚合

3.1第一个Maven工程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YtDGezUl-1617017070728)(C:\Users\dell\Pictures\java截图\Maven约定目录结构.png)]

src : 源码

**pom.xml :**Maven工程的核心配置文件

main : 存放主程序

test : 存放测试程序

java : Java源文件

resource : 存放框架或其他配置文件

接下来我们创建一个Maven的简单项目,用来熟悉一下maven

新建-Module-Maven-next

pom

<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>com.wdzl</groupId>
  <artifactId>HelloMaven</artifactId>
  <version>1.0-SNAPSHOT</version>
  
  <build>
	 <plugins>
		 <plugin>
			 <groupId>org.apache.maven.plugins</groupId>
			 <artifactId>maven-compiler-plugin</artifactId>
			 <version>3.8.1</version>
			 <configuration>
				 <source>8</source>
				 <target>8</target>
			 </configuration>
		 </plugin>
	 </plugins>	  
  </build> 
  
  <dependencies>
	  <dependency>
		  <groupId>junit</groupId>
		  <artifactId>junit</artifactId>
		  <version>4.12</version>
	  </dependency>
  </dependencies>
  </project>

写一个类

package com.wdzl;
/**
 * 第一个maven程序
 */
public class Hello{
	public String sayHello(String info){
		return "Hello "+info;
	}
}

test

public class HelloTest{
	@Test
	public void test(){
		Hello hello = new Hello();
		String result = hello.sayHello("Maven");
		/*
		测试方法
		*/
	   assertEquals("Hello Maven",result);
	}
}

使用Maven命令执行编译运行

3.2常用命令

  • mvn compile:编译主程序

  • mvn clean:清理

  • mvn test-compile:编译测试程序

  • mvn test :执行测试

  • mvn package:打包

注意:

  • 执行maven命令,必须进入pom.xml所再的目录

  • Maven工程所依赖的插件,并不包含再Maven核心程序中

    • 当我们执行Maven命令,如果需要某些擦肩,Maven主程序首先会到本地仓库中寻找
    • 本地仓库默认位置:c:\users\当前windows用户名\m2\repository
    • 如果本地仓库找不到,就会联网取中央仓库中寻找,并下载到本地仓库中寻找

mvn compile

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IJoy4asZ-1617017070730)(C:\Users\dell\Pictures\java截图\mvn compile.png)]

mvn clean

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IFt0OSxa-1617017070731)(C:\Users\dell\Pictures\java截图\mvn clean.png)]

mvn test

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xaC4wo2r-1617017070732)(C:\Users\dell\Pictures\java截图\mvn test.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XVRciwnS-1617017070733)(C:\Users\dell\Pictures\java截图\mvn生成的包.png)]

3.3POM

**pom:**Project Object Model项目对象模型

pom.xml对于Maven工程,它是核心配置文件,与构建相关的所有配置都是再这个文件中配置,后期学习,也是围绕着这个文件

3.4坐标

1.在Maven中的坐标

​ a.:公司或阻止的域名倒序+项目名

<groupId>com.wdzl</groupId>

​ b.:模块名

<artifactId>HelloMaven</artifactId>

​ c.:版本号

<version>1.0-SNAPSHOT</version>

注意:

SNAPSHOT:不稳定版本或快照版本,表示该项目处于开发状态美穗饰可能发生变化

RELEASE:稳定版本或发布版本,一般项目上线后都会改为RELEASE版本

3.5仓库

1.分类

  • 本地仓库:当前电脑上部署的Maven仓库,它是为当前电脑上的所有Maven工程服务的

  • 远程仓库:

    • 私服:搭建在局域网中,为局域网中的Maven工程服务的
    • 中央仓库:架设在互联网上,为全球所有Maven工程服务
    • 中央仓库镜像:为中央仓库分担访问压力,提高用户体验性

2.仓库里面保存的内容

  • Maven自身所需的插件
  • 第三方框架或工具的jar包
  • 我们自己开发的Maven项目

3.6.依赖

讲解依赖之前,我们需要了解 SNAPSHOT 和 RELEASE 的区别

SNAPSHOT :不稳定版本 或 快照版本,表示该项目还处于开发状态,随时都可能发生变化,所以它是 不稳定版本。

RELEASE :代表稳定版本或发布版本,一般项目上线都会改为RELEASE 版本。

案例

1.创建与第一个Maven工程相同的目录结构

2.将第一个工程安装到Maven仓库中

3.编辑pom.xml,将第一个工程的依赖导入到当前项目中

?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"4. 编写测试案例
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>SecondMaven</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.wdzl.maven</groupId>
<artifactId>FirstMaven</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependen

\4. 编写测试案例

/**
* @author lp
* @version 1.0
*/
public class HelloMavenAgain {
public String sayHelloAgain() {
HelloMaven helloMaven = new HelloMaven();
String result = helloMaven.sayHello("Maven");
return result + " again";
}
    }
/**
* @author lp
* @version 1.0
*/
public class HelloTest {
@Test
public void testHello() {
HelloMavenAgain again = new HelloMavenAgain();
String result = again.sayHelloAgain();
assertEquals("Hello Maven again",result);
}

常见依赖范围对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZIvlPByd-1617017070734)(C:\Users\dell\Pictures\java截图\常见依赖范围对比.png)]

  • compile依赖范围

    • 主程序:有效

    • 测试程序:有效

    • 打包:参与

    • 部署:参与

  • test依赖范围

    • 主程序:无效
    • 测试程序:有效
    • 打包:不参与
  • provided依赖范围

    • 主程序:有效
    • 测试程序:有效 打包:
    • 不参与 部署:不参与,原本的依赖由服务器提供

4.生命周期

这部分为纯理论,不需要死记硬背,理解即可。

​ 在介绍 Maven之前,项目构建的生命周期概念就已经存在了。软件开发人员每天都要对项目进行 清理、编译、测试、打包以及安装部署。 虽然每个软件开发人员都做相关的事情,但公司和公司之间、项目和项目之间,往往目的一样,而 实现的形式各种各样。有的项目基于 IDE 工具完成编译、打包和发布,比如 MyEclipse 和 Eclipse Java EE;有些是软件开发人员自己编写脚本,对项目进行自定义构件,比如 ant 脚本。 这些都是具有个性化和针对性的,到下一个项目后,又需要改造成新项目所需要的形式。因此就产 生了一个问题:感觉是一样的,又不能重用,所以必须重写。 学习、分析、反思和总结以前工作中对项目的构建过程,Maven 抽象出了一个适合于所有项目的 构建生命周期,并将它们统一规范。 具体步骤包括

  • 清理、

  • 初始化、

  • 编译、

  • 测试、

  • 打包、

  • 集成测试、

  • 验证、

  • 部署

  • 生成站点

这些步骤几 乎适合所有的项目,也就是说,所有项目的管理构建过程都可以对应到这个生命周期上来。 需要注意的是,Maven 中项目的构建生命周期只是 Maven 根据实际情况抽象提炼出来的一个统一 标准和规范,是不能做具体事情的。也就是说,Maven 没有提供一个编译器能在编译阶段编译源代 码。 既然 Maven 不做具体事情,那具体事情由谁做呢?

​ 好的思想、创意,最终都需要在做具体事情的 实践中执行才有结果。 所以 Maven 只是规定了生命周期的各个阶段和步骤,具体事情,由集成到 Maven 中的插件完 成。比如前面介绍的生成站点,就是由 maven-site-plugin 插件完成的。 Maven 在项目的构建过程中,只是在方向和步骤上面起到了管理和协调的作用。 Maven 在生命周期的每个阶段都设计了插件接口。用户可以在接口上根据项目的实际需要绑定第 三方的插件,做该阶段应该完成的任务,从而保证所有 Maven 项目构建过程的标准化。当然,Maven 对大多数构建阶段绑定了默认的插件,通过这样的默认绑定,又简化和稳定了实际项目的构建。 在执行编译前,我们需要清理旧的内容,清理完成后才能执行编译,编译后要进行测试,生成报告,报 告没有问题才能打包和安装,部署。 所以:各个构建环节顺序必须按照给定的顺序来执行,并且都依赖 于特定的插件。

4.1 Maven的三个生命周期

Maven中有三个相互独立的生命周期,分别是:

①Clean Lifecycle:在进行项目构建前进行的一些清理工作

②Default Lifecycle:构建的核心部分,如编译,测试,打包,安装,部署等。

③Site Lifecycle: 生成项目报告,发布站点等

4.2Clean生命周期

  1. pre-clean:执行一些需要在clean之前完成的工作
  2. clean:删除上一次构建生成的文件
  3. post-clean:执行一些需要在clean之后完成的工作

4.3 Default生命周期

\1. validate:验证,验证项目是否正确且所有必须信息是可用的

  1. compile:编译,源代码编译在此阶段完成
  2. Test:测试,使用适当的单元测试框架进行测试,例如JUnit。
  3. package:打包,创建jar包 或 war包
  4. verify:检查,对集成测试的结果进行检查,以保证质量达标
  5. install:安装,安装打包的项目到本地仓库,以供其他程序使用
  6. deploy:部署,拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

5.在IDEA中安装Maven

1.配置Maven

setting中的maven

Maven home directory: maven的安装目录

User settings file:Maven安装目录conf/settings.xml配置文件

Local repository: Maven本地仓库的目录位置

2.配置Maven环境(在Setting中的Runner

VM Options:-DarchetypeCatalog=internal -DarchetypeCatalog=internal

  • maven :Maven项目在创建时,会联网下载模板文件
  • -DarchetypeCatalog=internal :Maven项目创建时,不下载模板文件,创建速度会提高

JRE:选择JDK6以上版本

3.创建Maven工程

1.创建一个空项目

2.创建module

Create from archetype:是创建module使用模板的意思,勾选后可以选择你想创建的模板

  1. maven-archetype-quickstart : 普通的java项目
  2. maven-archetype-webapp : web工程

4.IDEA中使用Maven命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UOmtT5pO-1617017070735)(C:\Users\dell\Pictures\java截图\在IDEA中使用Maven命令.png)]

6.依赖关系

通过快捷键:

Alt + Ctrl +Shift + U 调出 Maven项目依赖关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J6V405ll-1617017070736)(C:\Users\dell\Pictures\java截图\依赖关系.png)]

排除依赖

在实际开发中,我们经常会遇到Maven依赖冲突的问题,导致编译时报一些异常,处理依赖冲突问题, 我们可以解除依赖排除。这里我们提供两种方式,第一种是图形化界面操作,第二种是手动添加依赖排 除

\1. 通过IDEA添加依赖排除

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b7LnWATu-1617017070736)(C:\Users\dell\Pictures\java截图\依赖排除.png)]

\2手动删除依赖

直接通过代码删除

依赖原则
  • 就近原则
    工程

4.IDEA中使用Maven命令

[外链图片转存中…(img-UOmtT5pO-1617017070735)]

6.依赖关系

通过快捷键:

Alt + Ctrl +Shift + U 调出 Maven项目依赖关系

[外链图片转存中…(img-J6V405ll-1617017070736)]

排除依赖

在实际开发中,我们经常会遇到Maven依赖冲突的问题,导致编译时报一些异常,处理依赖冲突问题, 我们可以解除依赖排除。这里我们提供两种方式,第一种是图形化界面操作,第二种是手动添加依赖排 除

\1. 通过IDEA添加依赖排除

[外链图片转存中…(img-b7LnWATu-1617017070736)]

\2手动删除依赖

直接通过代码删除

依赖原则
  • 就近原则
  • 先到先得原则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值