Maven特点、作用、生命周期和核心概念的简介

一、初始Maven

Maven是一个项目管理工具,主要用于Java项目的管理。它提供了项目对象模型(POM),一个用于描述项目的基础、源代码、构建配置、依赖关系等信息的XML文件,使得开发人员能够使用统一的方式来构建和管理项目。

1、Maven的主要特点和功能

  • 依赖管理: Maven通过坐标定位的方式自动下载和管理项目所需的依赖库,避免了手动下载和管理的繁琐过程,降低了项目的维护成本。
  • 构建自动化: Maven内置了构建生命周期,支持项目的编译、测试、打包等构建过程,并提供了丰富的插件来扩展构建功能。
  • 项目信息一致性: 通过POM文件,Maven可以确保项目的构建、报告和文档具有一致的信息。
  • 跨平台性: Maven使用Java编写,因此可以在任何支持Java的平台上运行,具有良好的跨平台性。
  • 多模块管理: Maven支持多模块项目的管理,使得大型项目可以分解为多个子模块,每个子模块都可以独立构建和管理。

2、Maven的使用流程

  • 创建POM文件: 在项目根目录下创建一个名为pom.xml的文件,用于描述项目的基本信息和依赖关系。
  • 配置依赖关系: 在POM文件中配置项目所需的依赖库,Maven会自动下载并管理这些依赖库。
  • 执行构建命令: 使用Maven提供的命令行工具或集成开发环境(IDE)中的Maven插件执行构建命令,如编译代码、运行测试、打包应用程序等。

Maven可以更加高效地进行Java项目的开发和管理,减少重复劳动和错误,提高开发效率和质量。

3、为什么使用Maven

  • Maven可以管理jar文件。
  • 自动下载jar和他的文档,源代码。
  • 管理jar直接的依赖, a.jar需要b.jar , maven会自动下载b.jar。
  • 管理你需要的jar版本。
  • 帮你编译程序,把java编译为class。
  • 帮你测试你的代码是否正确。
  • 帮你打包文件,形成jar文件,或者war文件。
  • 帮你部署项目。

二、Maven工具的安装和配置

  • 1、从Maven的官网下载Maven的安装包,版本可选择apache-maven-3.3.9-bin.zip,该版本配合jdk1.8
  • 2、解压安装包,解压到一个目录,非中文目录。
  • 子目录bin:用于执行程序,主要是 mvn.cmd
  • 子目录conf:Maven工具本身的配置文件 settings.xml
  • 3、配置环境变量,在系统的环境变量中,指定一个M2_HOME的名称, 指定它的值是Maven工具安装目录。
  • 例如:M2_HOME=D:\work\maven_work\apache-maven-3.3.9
  • 再把M2_HOME加入到path之中,在所有路径之前加入 %M2_HOME%\bin
  • 注意:需要配置JAVA_HOME ,指定jdk路径。
  • 4、验证,新的命令行中,执行mvn -v

出现如下内容,maven安装,配置正确。

具体操作步骤可以查看:Maven安装与配置

三、Maven构建

Maven构建是一个自动化的项目构建过程,它基于项目对象模型(POM)来管理项目的构建生命周期、依赖关系以及插件等。

  • 项目对象模型(POM): POM是Maven项目的核心配置文件,通常命名为pom.xml。它包含了项目的基本信息、依赖关系、构建配置等。通过POM文件,Maven能够理解项目的结构和需求,从而执行相应的构建操作。
  • 构建生命周期: Maven定义了标准的构建生命周期,包括清理(clean)、编译(compile)、测试(test)、打包(package)、集成测试(integration-test)、验证(verify)、安装(install)和部署(deploy)等阶段。每个阶段都有特定的目标,并且按照顺序执行。开发人员可以通过执行Maven命令来触发这些阶段的执行。
  • 依赖管理: Maven通过解析POM文件中的依赖关系,自动下载和管理项目所需的库和依赖项。它可以从本地仓库、中央仓库或远程仓库中获取这些依赖,并将其添加到项目的构建路径中。这使得开发人员无需手动管理依赖库,减少了项目中的冲突和错误。
  • 插件执行: Maven的构建过程是通过插件来执行的。插件是Maven的核心组件,用于执行构建生命周期中的各个阶段的具体任务。Maven提供了大量的内置插件,并且还支持自定义插件的扩展。开发人员可以在POM文件中配置插件的使用,以满足项目的特定需求。

当执行Maven构建时,Maven会根据POM文件中的配置和依赖关系,按照构建生命周期的顺序执行相应的插件任务。例如,编译阶段会执行编译源代码的任务,测试阶段会运行项目的测试用例,打包阶段会将项目打包成可执行的JAR文件或WAR文件等。

1、Maven构建的生命周期

Maven构建的生命周期是Maven实现自动化构建的基础,它定义了一系列有序的构建阶段(phase),每个阶段都有特定的目标和任务。这些阶段按照预设的顺序依次执行,以完成整个项目的构建过程。

Maven构建的生命周期可以分为以下三大类:

Clean生命周期:

  • clean: 清理项目产生的所有文件,如编译产生的class文件、测试产生的结果文件等。这个生命周期的目的是确保构建环境是干净的,以便进行下一次的构建。

Default生命周期(这是Maven最常用的生命周期):

  • validate: 验证项目是否正确,以及所有必需的信息是否可用。
  • compile: 编译项目的源代码。
  • test: 使用适合的单元测试框架运行测试。这些测试不应该要求代码被打包或部署。
  • package: 将编译后的代码打包成可发布的格式,如JAR、WAR等。
  • verify: 运行任何检查来验证包是否有效且满足质量标准。
  • install: 将包安装到本地仓库,以便本地的其他项目可以使用。
  • deploy: 将最终的包复制到远程仓库,以供其他开发人员和项目使用。

Default生命周期是最核心的生命周期,它涵盖了从编译、测试到打包、部署等完整的构建流程。

Site生命周期:

  • pre-site: 执行一些生成站点报告之前的处理。
  • site: 生成项目的站点文档。
  • post-site: 执行一些生成站点报告之后的处理。
  • site-deploy: 将生成的站点文档部署到特定的服务器。

Site生命周期主要用于生成和发布项目站点,帮助开发人员和用户了解项目的文档、报告和相关信息。

2、Maven生命周期的作用

  • 标准化构建流程: 通过定义有序的构建阶段,Maven确保项目的构建过程是一致的,减少了不同开发人员或不同构建环境之间的差异。
  • 自动化构建: Maven能够自动执行构建生命周期中的各个阶段,无需开发人员手动干预,提高了构建效率。
  • 扩展性: Maven允许通过插件来扩展构建生命周期,开发人员可以根据项目需求添加自定义的构建任务。
  • 依赖管理: Maven在构建过程中能够自动管理项目的依赖关系,确保所有必要的依赖库都被正确引入。

Maven的生命周期提供了一种标准化、自动化和可扩展的项目构建机制,帮助开发人员高效地构建和管理Java项目。

通过Maven构建,可以确保项目的构建过程是一致和可重复的,减少了手动构建过程中的错误和不确定性。同时,Maven的标准化和自动化特性也提高了开发效率,使得团队之间的协作更加顺畅。

四、Maven核心概念

1、Maven的核心概念主要包括

  • POM(Project Object Model,项目对象模型): POM是Maven项目的核心配置文件,通常以XML格式编写并命名为pom.xml。它位于项目的根目录下,包含了项目的基本信息、坐标、依赖关系、构建插件、资源目录等配置信息。POM定义了项目的结构和构建规则,控制Maven构建项目的过程,管理项目的依赖关系。
  • 坐标: 坐标是一个唯一的字符串,用于在Maven的仓库中定位项目或依赖。它由groupId、artifactId和version三个元素组成,类似于我们在超市中找到商品的唯一标识。
  • 依赖管理: Maven通过坐标来管理项目的依赖关系,自动下载和管理项目所需的库和依赖项。这避免了手动下载和配置依赖的繁琐过程,降低了项目的维护成本。
  • 仓库管理: Maven仓库用于存储项目的构建结果、依赖库和其他资源。它分为本地仓库和远程仓库,本地仓库是开发人员机器上的一个目录,用于缓存下载的依赖和构建产生的文件;远程仓库则是一个中心化的资源存储库,可以供多个开发人员共享。
  • 构建生命周期: Maven定义了一套标准的构建生命周期,包括清理、编译、测试、打包、安装、部署等阶段。这些阶段按照预定的顺序执行,以完成项目的构建和发布。
  • 插件: Maven的插件是执行构建任务的工具,它们可以在构建生命周期的各个阶段中执行特定的任务,如编译代码、运行测试、生成文档等。Maven提供了大量的内置插件,并且还支持自定义插件的扩展。

这些核心概念共同构成了Maven的核心功能,使得Maven能够成为一个强大的项目管理工具,帮助开发人员高效地构建和管理Java项目。

2、Maven约定的目录结构

每一个Maven项目在磁盘中都是一个文件夹(项目-Hello)

Hello/
---/src
------/main                   # 放你主程序java代码和配置文件
----------/java               # 你的程序包和包中的java文件
----------/resources          # 你的java程序中要使用的配置文件
------/test                   # 放测试程序代码和文件的(可以没有)
----------/java               # 测试程序包和包中的java文件
----------/resources          # 测试java程序中要使用的配置文件
---/pom.xml                   # Maven的核心文件(Maven项目必须有)

3、Maven下载依赖

疑问: 使用mvn compile命令会编译src/main目录下的所有java文件,并同时会检查文件完整,会下载插件。

Maven工具执行的操作是需要很多插件(jar文件)完成的,下载的jar文件叫做插件,是完成某些功能的组件,内部是Java类。

下载的插件位置是默认仓库(本机仓库),是setting.xml文件中的默认位置。

执行mvn compile, 结果是在项目的根目录下生成target目录(结果目录),Maven编译的Java程序,最后的.class文件都放在target目录中。

设置本机存放资源的目录位置(如何设置本机仓库):

  • 修改maven的配置文件, Maven的安装目录在/conf/settings.xml 文件中。
  • 先备份 settings.xml
  • 修改文件中 <localRepository> 的位置,指定你的目录(不要使用中文目录)
  • 例如:D:\work\maven_work\maven_repository

4、仓库:存放Maven使用的jar包

仓库存放Maven使用的 jar包 和项目使用的 jar包

  • Maven使用的插件(各种jar)
  • 我项目使用的jar(第三方的工具)

仓库的分类:

  • 本地仓库:就是个人计算机上的文件夹,存放各种jar。
  • 远程仓库:在互联网上的,使用网络才能使用的仓库。
  • 中央仓库:最权威的, 所有的开发人员都共享使用的一个集中的仓库。
  • 中央仓库的镜像:就是中央仓库的备份, 在各大洲,重要的城市都是镜像。
  • 私服:在公司内部,在局域网中使用的, 不是对外使用的。

Maven仓库的使用不需要人为参与,如果需要使用mysql驱动。

Maven首查本地仓库,再查私服,再查镜像,再查中央仓库,按照顺序一层一层查询。

你在写项目的中的用到的所有依赖(jar),必须在本地仓库中有。没有必须通过Maven下载, 包括provided的都必须下载。

你在servlet需要继承HttpServlet( provided) ,你使用的HttpServlet是Maven仓库中的。当你的写好的程序, 放到 tomat服务器中运行时, 此时你的程序中不包含servlet的jar,因为tomcat提供了 servlet的.jar

5、pom:项目对象模型

Maven的POM(Project Object Model,项目对象模型)是一个XML文件,通常命名为pom.xml,它是Maven项目的核心配置文件。POM定义了项目的所有属性,包括项目的名称、版本、依赖关系、构建配置等。使用pom.xml,我们可以轻松地管理项目的构建和依赖关系,从而更专注于业务逻辑的开发。

1、坐标:唯一值, 在互联网中唯一标识一个项目的
  • groupId:项目或者组织的唯一标志,用于在Maven仓库中标识项目的位置。
  • artifactId:项目的通用名称,通常用于生成项目的jar包名称。
  • version:项目的版本号,用于标识项目的不同发布版本。
<groupId>公司域名的倒写</groupId>
<artifactId>自定义项目名称</artifactId>
<version>自定版本号</version>
2、packaging: 打包后压缩文件的扩展名
  • packaging:项目的打包类型,如pom、jar、war等。这决定了项目的输出形式,例如,一个web应用可能会打包为war文件。
3、依赖:dependencies 和dependency
  • dependencies:项目的依赖关系列表,用于指定项目所需的其他库或模块。每个依赖项都包含groupId、artifactId和version等属性。相当于是 java代码中import,你的项目中要使用的各种资源说明, 比如我的项目要使用mysql驱动:
<dependencies>
    <!--依赖  java代码中 import -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.9</version>
    </dependency>
</dependencies>
4、properties:定义项目级别的属性

统一设置依赖中的属性,如上面的版本号,名字等。

5、build:构建配置

包括构建插件、源代码目录、输出目录。

6、依赖范围,使用scope表示

scope:表示依赖使用的范围,也就是在maven构建项目的那些阶段中起作用。scope的值有compile,test,provided,默认是compile

maven构建项目:编译、测试、打包、安装、部署 过程(阶段),根据scope可以设置在某个阶段某个依赖生效。

例如:junit的依赖范围是 test

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope> 测试的时候才有效
</dependency>

<dependency>
    <groupId>a</groupId>
    <artifactId>b</artifactId>   b.jar
    <version>4.11</version> 不写但也是全局使用,compile在每个阶段
</dependency>

<dependency> 
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>servlet.jar
    <scope>provided</scope> 提供者
</dependency>
7、modules、developers和licenses
  • modules:对于多模块项目,这个属性用于列出子模块的路径。
  • developers:项目开发人员的信息。
  • licenses:项目的许可信息。

6、Maven插件

Maven插件是由Maven构建工具本身提供的,用于自动化和重复性的任务。插件是由Maven构建工具通过解析pom.xml文件中的插件配置来加载的。它们极大地扩展了Maven的核心功能,使得开发者能够更方便地进行项目构建、测试、打包等操作。

Maven插件由三部分组成,分别是Mojo类、Goal类和Pom类。Mojo类是插件的核心,它包含了插件的主要逻辑;Goal类是Mojo类的实现,它定义了插件的目标;Pom类则用于配置插件的元数据。

Maven为大多数构建步骤编写并绑定了默认插件。例如,针对编译的插件有maven-compiler-plugin,针对测试的插件有maven-surefire-plugin等。这些插件在大多数情况下都能满足开发者的需求,但当有特殊需要时,也可以配置插件以定制构建行为,甚至自己编写插件。

插件可以在自己的项目中设置,最常使用的是maven编译插件。设置项目使用的 jdk 版本时通过编译插件指定。pom.xml 文件<build>中设置。

<build>
	<!-- 配置插件 -->
	<plugins>
	    <!-- 配置具体的插件 -->
	    <plugin>
	        <groupId>org.apache.maven.plugins</groupId>
	        <!-- 插件的名称 -->
	        <artifactId>maven-compiler-plugin</artifactId>
	        <!-- 插件的版本 -->
	        <version>3.8.1</version>   
	        <!-- 配置插件的信息 -->
	        <configuration>    
		        <!-- 告诉maven 我们写的代码实在jdk1.8上面编译的 -->
		        <source>1.8</source>
		        <!-- 我们的程序应该运行在1.8的jdk上 -->
		        <target>1.8</target>
	        </configuration>
		</plugin>
    </plugins>
</build>

7、单元测试junit

单元测试(测试方法):用的是junit, junit是一个专门测试的框架(工具)。

junit测试的内容: 测试的是类中的方法, 每一个方法都是独立测试的。方法是测试的基本单位(单元),判断你类是否正确,可以测试你的每一个方法是否达到了预期功能。Maven借助单元测试,批量的测试你类中的大量方法是否符合预期的。

首先加入依赖,在pom.xml加入单元测试依赖:

<!-- 单元测试 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

在maven项目中的src/test/java目录下,创建测试程序。 推荐的创建类和方法的提示:

  • 测试类的名称:Test + 你要测试的类名
  • 测试的方法名称:Test + 方法名称

例如你要测试HelloMaven,创建测试类 TestHelloMaven。


@Test
public void testAdd(){
    // 测试HelloMaven的add方法是否正确
}

其中testAdd叫做测试方法,它的定义规则

  • 方法是public的,必须的
  • 方法没有返回值, 必须的
  • 方法名称是自定义的,推荐是Test + 方法名称
  • 在方法的上面加入 @Test

然后运行测试方法,查看测试结果。

8、资源插件

默认没有使用resources的时候, Maven执行编译代码时, 会把 src/main/resource 目录中的文件拷贝到 target/classes 目录中。对于 src/main/java 目录下的非java文件不处理,不拷贝到 target/classes 目录中。

程序有时候需要把一些文件放在 src/main/java 目录中,当在执行 Java程序时,需要用到 src/main/java 目录中的文件,需要告诉Maven在 mvn compile src/main/java 目录下的程序时,需要把文件一同拷贝到 target/classes 目录中。此时就需要在 <build> 中加入 <resources>

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory><!--所在的目录-->
            <includes><!--包括目录下的.properties.xml 文件都会扫描到-->
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <!—filtering 选项 false 不启用过滤器, *.property 已经起到过滤的作用了 -->
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

五、Maven与IDEA

在IDEA中设置Maven,让IDEA和Maven结合使用。IDEA中内置了Maven,一般不使用内置的, 因为用内置修改IDEA的设置不方便。使用自己安装的Maven, 需要覆盖IDEA中的默认的设置。

1、确保机器上安装了Maven。
2、确保Maven在机器上的环境已经正确配置。
前两步可以参照安装和配置章节。
3、确保IDEA正确配置了Maven的地址。

  • 打开IDEA左上角file功能,弹出后,在搜索框搜索Maven。
  • 需要配置:
  • Maven home path:Maven项目的安装路径。
  • User settings file: settings.xml 文件位置,一般为安装路径下的 conf/settings.xml 位置。
  • Local repository: 本地仓库,在 settings.xml 文件中配置好的仓库路径。
  • 注意jdk的配置。
  • 配置好之后,启动项目。

  • 28
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.[今日课程内容总览] Maven--***** 介绍 优点 用maven创建一个项目, 用maven创建一个ssm项目,每一层的代码分开,把一个项目拆解成多个项目 2.[今日包含笔记] maven介绍: Eclise: 缺点: Jar包: 版本管理,解决jar包冲突:删除老的jar包,保留新的jar包 不同的项目,jar包要复制一份;Users Library 羡慕yum的好处,安装软件,自动下载,自动验证,自动安装,自动测试;镜像网站 Jar包的依赖: 致命的缺点:现象: 每一个项目都有前台(广大网民)和后台(管理员看的),后台的功能远远的大于>前台的功能;迭代升级;每次升级都要重启tomcat;将tomcat做很多个备份(10个),为了nginx转发;前台:访问比较大,管理员访问量比较小; 问题: 每次升级,10个tomcat都升级一次 后台的升级频繁要比前台频繁;升级10次,9次改的是后台的代码,只有一次是前台的代码 解决方案: 是将前台(广大网民看的页面)的代码和后台(管理员)的代码要分开,将原来的一个项目分别放到两个web项目;一个web项目一个tomcat;好处:更新的时候如果更新后台(管理员),只需要重启后台的tomcat(服务); 折成两个项目以后的缺点:Service以下的代码重复; 将Service层以下的代码放到一个新创建的java项目中,在部署的时候将Service(java项目)打成一个jar包,分别放到两个web服务中;编译的时候让web项目依赖与Service(java项目)_source folder;配置麻烦,项目与项目之间的依赖头脑得相当清晰 这个缺点Maven解决了; 请听今天的内容 拆分前:图一 拆分后是图二 3. 介绍 官网:http://maven.apache.org/download.cgi 目录介绍: Bin:二进制文件 Boot:引导,启动 Conf:配置文件 Lib:jar包 README.txt:读我 3.1.修改配置文件的内容 路径:%MAVEN_HOME%\conf\settings.xml 配置文件代码: d:/repo alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central 注意: 千万不要将文档中的setting的内容全部替换到maven中的内容,要对比着修改,保留原来的; 只修改本地仓库,和下载镜像(源) 3.2.Eclipse Maven的配置 每打开一个新的工作空间,要配置一下Maven,然后再写代码 3.3.创建Maven项目 右击创建一个maven project Packing:有三种: Jar:java项目, War:web项目 Pom:文件夹,jar和war文件,mavenProject:一个项目,可以放jar和war包,通过pom,一般新创建的maven Project是POM 3.4.创建一个Maven Model 最外面的项目是MavenProject,其它的全部是Maven Model 3.4.1.创建JAR 目录介绍: Mvn-jar |-->Src:源码:java代码 |-->|-->main:代码:除测试以外的代码:junit |-->|-->main|-->java:代码 |-->|-->main|--
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值