Maven基础与环境构建

本文介绍了Maven作为项目管理工具的核心功能,包括依赖管理和项目构建。Maven通过POM.xml文件管理jar包,从本地或远程仓库获取依赖。文章详细讲解了Maven的安装、仓库配置、生命周期、工程结构以及在IDEA中的使用,帮助开发者快速掌握Maven的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Maven官网

Maven搜索库

一.Maven简介

maven是一个Apache下的一个纯Java开发的开源项目

定义:

Maven是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的工具。

(1)Maven能解决什么问题:

通俗的讲:我们知道,项目开发不就仅仅是写写代码而已,期间会伴随着各种比不可少的事情要做,下面列举几个例子:

  • 我们需要引用各种jar包,尤其是比较大的工程,引用的jar包往往有几十个乃至上百个,每用到一种jar包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的jar包冲突,版本冲突。
  • 我们写好的java文件,需要通过javac编译成class文件才能交给JVM运行。这项工作可以由各种集成开发工具帮我们完成 Eclipse、IDEA 等都可以将代码即时编译。
  • 世界上没有不存在 bug 的代码,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
  • 再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,进行打包。如果是 web 项目,还需要将之发布到服务器 。

如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点,你会用吗? Maven 就可以解决上面所提到的这些问题。

(2)Maven的两个核心功能

依赖管理:

* 传统的 WEB 工程中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。

* maven的 WEB 工程中不直接将jar包导入到工程中,而是通过在 pom.xml 文件中添加所需jar包的坐标。项目运行时,通过读取坐标到一个专门用于“存放jar包仓库"(Maven仓库)找到相应的jar包。

仓库如何存放jar包?

(3)项目构建:

我们的项目,往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。
 
什么是项目构建? 指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个过程
称为构建。 一键构建 指的是整个构建过程,使用 maven 一个命令可以轻松完成整个工作。
 
 
Maven 规范化构建流程如下:
 

 

二.Maven安装和使用

(1)Maven下载和安装

下载:

Maven官网下载地址 :http://maven.apache.org/download.cgi

Maven官网下载地址

安装:

Maven 下载后,将 Maven解压到一个没有中文没有空格的路径下 。 解压后目录结构
如下:
 

Maven使用java语言开发的,解压即可运行
 注意:maven依赖 JAVA_HOME

目录:

* bin :存放了 maven 的命令,比如我们前面用到的 mvn tomcat7:run
 
* boot :存放了一些 maven 本身的引导程序,如类加载器等
 
* conf :存放了 maven 的一些配置文件,如 setting.xml 文件
 
* lib :存放了 maven 本身运行所需的一些 jar
 
至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK
 
Maven及JDK配置:
 
开发者电脑上需安装 java 环境,安装 JDK1.7 + 版本 (将 JAVA_HOME/bin 配置环境变量 path ),我们使用的是 JDK8
相关版本。
 
配置 MAVEN_HOME ,变量值就是你的 maven 安装 的路径( bin 目录之前一级目录)
 

 

上面配置了我们的 Maven 软件,注意这个目录就是之前你解压 maven 的压缩文件包在的的目录,最好不要有中文和
空格。
 
再次检查 JDK 的安装目录,如下图:
 
 

jdk环境变量配置:

环境变量
        MAVEN_HOME: maven安装目录
        path: %MAVEN_HOME%\bin

Maven软件版本测试:

通过 mvn -v 命令检查 maven 是否安装成功,看到 maven 的版本为 3.5.2 java 版本为 1.8 即为安装成功。 找开 cmd
令,输入 mvn –v 命令,如下图:
 
 
我们发现 maven 的版本,及 jdk 的版本符合要求,这样我们的 maven 软件安装就成功了。

 

三.Maven仓库

(1)Maven仓库分类:

Maven 仓库分为本地仓库和远程仓库二大类。而远程仓库又可分成中央仓库,私服,第三方仓库。
 

 

1. 本地仓库    
        项目通过jar坐标,先从本地仓库找对应jar包,如果找不到会从远程仓库(互联网)去下载 jar 包,保存在本地仓库(在程序员的电脑    上),第二次不需要从远程仓库去下载。
        
2. 远程仓库
   1 中央仓库
        由专业团队(maven团队)统一维护。
        中央仓库的地址:http://repo1.maven.org/maven2/

         在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它
       是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。
 

   2 私服
        架设在公司局域网内,提供给内部的人员使用。

       私服是一种特殊的远程仓库,其内容是来自于其他的远程仓库,一般架设在局域网内,提供给一个组织的人员使用。
      当 Maven 需要下载依赖时,从私服请求,如果私服上不存在该依赖,则从其他远程仓库下载,同时缓存在私服上,提
     供给其他人使用。如果项目中的一些内部模块,无法发布到外部远程仓库中,也可发布在私服上,提供给项目中的其
     他人员使用。
 

   3第三方仓库
         Maven 仓库默认中央仓库在国外且只有一个, 国内使用难免很慢,我们可以更换为第三方公共库,例如:阿里云镜

依赖寻找流程:

1. 在本地仓库中,根据 Maven 坐标系寻找指定依赖,如果存在,直接返回。
2. 如果 Maven 仓库中不存在,或者需要检查依赖的版本时, maven 则会去远程仓库中寻找,下载到本地仓库中再使
用。
 

本地仓库:

 

(2)Maven本地仓库的配置:
 

1. 将Maven下载好的仓库 解压到非中文及特殊符号目录下

2. 修改 maven的安装目录/conf/settings.xml 文件的标签
        <localRepository>本地仓库地址</localRepository>

指定自定义本地仓库

(3)Maven仓库国内镜像的配置

修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
</mirrors>

(4)全局setting与用户setting

maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。 在 maven 安装目录下
的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project 项目,它作为 maven 的全局配置。
如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在: ${user.dir} /.m2/settings.xml 目录
,${user.dir} windows 中的用户目录。 maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全
局配置文件。

四:Maven坐标和依赖:

Maven 的一个核心的作用就是管理项目的依赖,引入我们所需的各种 jar 包等。为了能自动化的解析任何一个 Java
件, Maven 必须将这些 Jar 包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包
括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。
 
坐标的定义元素如下:
 
groupId :定义当前 Maven 项目名称
artifactId :定义项目模块
version :定义当前项目的当前版本
 
例如:创建一个 Maven web 项目,在 pom.xml 文件中生成坐标
 
 
<!--当前项目坐标--> 
<groupId>com.wsl</groupId>
 <artifactId>maven_helloword</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>war</packaging>
例如:要引入 junit 的测试 jar ,只需要在 pom.xml 配置文件中配置引入 junit 的坐标依赖即可:
 
<!-- 依赖关系 -->
 <dependencies> 
    <!-- 此项目运行使用junit,所以此项目依赖junit --> 
   <dependency> 
     <!-- junit的项目名称 --> 
     <groupId>junit</groupId> 
     <!-- junit的模块名称 --> 
     <artifactId>junit</artifactId>
     <!-- junit版本 --> 
     <version>4.12</version> 
     <!-- 依赖范围:单元测试时使用junit --> 
     <scope>test</scope> 
   </dependency> 
</dependencies>

五.Maven工程结构:

传统java工程遇到的问题:

Maven项目结构:

* java项目
	java工程名(项目名)
		|-- src目录
			|-- main目录(主干代码)
				|-- java目录(java代码)
				|-- resources目录(配置文件)
			|-- test目录(测试代码)
				|-- java目录(java代码)
				|-- resources目录(配置文件)
		|-- pom.xml(maven工程核心配置文件)
		|-- target目录(存放编译后的class文件.....)

* web项目【重点】
	web工程名(项目名)
		|-- src目录
			|-- main目录(主干代码)
				|-- java目录(java代码)
				|-- resources目录(配置文件)
				|-- webapp目录(页面资源)
					|-- WEB-INF
						|-- web.xml(web工程核心配置文件)
					|-- index.jsp
					|-- css、js、img..
			|-- test目录(测试代码)
				|-- java目录(java代码)
				|-- resources目录(配置文件)
		|-- pom.xml(maven工程核心配置文件)
		|-- target目录(存放编译后的class文件.....)

 

六.Maven生命周期和插件:

(1)Maven常用命令和插件:

我们可以在 cmd 中通过一系列的 maven 命令,来对我们的工程进行编译、测试、打包、安装、部署。

1)clean

maven工程的清理命令,执行clean会删除target目录及内容。

2)compile

maven工程的编译命令,作用是将 src/main/java 下的文件编译为class文件输出到target目录下。

3)test

maven工程的测试命令,作用是执行 src/test/java 下单元测试类,并编译为class文件。

4)package

maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。

注意:为什么maven_hello是war包而不是jar包呢?

5)install

maven工程的安装命令,执行install将mave工程打成jar包或war包,并发布到本地仓库。

6)deploy

maven工程部署命令,将jar或war包部署(上传)到私服中。

 

(2)生命周期:

maven 对项目构建过程分为“三套相互独立的”生命周期,这三套生命周期分别是:

1. Clean Lifecycle(清理生命周期)
		在进行真正的构建之前进行一些清理工作。
		命令:clean
		
2. Default Lifecycle(默认生命周期)
		构建的核心部分,编译,测试,打包,部署等等。
		命令: compile  test  package  install  deploy
		
3. Site Lifecycle(站点生命周期)
		生成项目报告,站点,发布站点。 
		命令: site
		
* 在同一个生命周期中的命令,执行后面的命令,前面的命令自动执行

clean 生命周期 :
 
clean 生命周期的目的是清理项目,它包含三个阶段:
  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后立刻完成的工作
default生命周期:
 
default 生命周期定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分,它包含的阶段如下:
 
 

site生命周期:

site 生命周期的目的是建立和发布项目站点, Maven 能够基于 POM 所包含的信息,自动生成一个友好的站点,方便团
队交流和发布项目信息。该生命周期包含如下阶段:
 
  • pre-site:执行一些需要在生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy:将生成的站点文档部署到特定的服务器上

 

(3)Maven概念模型:

Maven 包含了一个项目对象模型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project
Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插
件(plugin)目标(goal)的逻辑。
 
项目对象模型 (Project Object Model)
 
一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、插件目标等。
 
依赖管理系统 (Dependency Management System)
 
通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。比如:项目依赖 junit4.12 ,通过在 pom.xml 中定义
junit4.12 的依赖即使用 junit4.12 ,如下所示是 junit4.12 的依赖定义:
 
<!-- 依赖关系 --> 
<dependencies> 
    <!-- 此项目运行使用junit,所以此项目依赖junit --> 
    <dependency> 
        <!-- junit的项目名称 -->
         <groupId>junit</groupId> 
        <!-- junit的模块名称 -->
         <artifactId>junit</artifactId>
         <!-- junit版本 --> 
        <version>4.12</version>
         <!-- 依赖范围:单元测试时使用junit -->
         <scope>test</scope> 
    </dependency> 
</dependencies>
一个项目生命周期 (Project Lifecycle)
 
使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程, maven 将这些过程规范为一个生命
周期,如下所示是生命周期的各各阶段
 
 
一组标准集合
 
maven 将整个项目管理过程定义一组标准,比如:通过 maven 构建工程有标准的目录结构,有标准的生命周期阶
段、依赖管理有标准的坐标定义等。
 
插件 (plugin) 目标 (goal)
 
maven 管理项目生命周期过程都是基于插件完成的。
 
 

七.IDEA创建Maven工程

(1)IDEA配置本地Maven环境(全局配置)

如果我们在IDEA创建maven工程默认从互联网在下载一个骨架(但是若电脑没有联网,就会卡顿一段时间,再使用本地骨架),我们可以直接指定IDEA查找本地骨架,效率提升

-DarchetypeCatalog=internal -Dfile.encoding=GB2312

初始化工作空间:

设置jdk环境:

统一编码环境

点击 File 菜单项,选中 Settings
 
选中 Editor File Encodings 选项卡,设置编码为 UTF-8

方法之间加入一条分割线:

 

(2)创建一个全新的工作空间(基于Maven结构)

 

(1)IDEA创建工程

java工程:

手动创建test测试配置文件目录

指定maven环境的jdk版本和字符集

<build>
    <plugins>
        <!-- 设置编译版本为1.8 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

maven工程命令操作:

如何导入依赖:

maven的搜索仓库:https://mvnrepository.com/

https://mvnrepository.com/

web工程

idea创建web工程,我们需要安装一个插件:

安装完成后,重启idea工具

注意:

有些时候创建maven之后,文件夹不变颜色,需要手动刷新:

 

发布web工程:

idea使用外置tomcat运行

idea使用maven内置tomcat插件

<build>
        <plugins>
            <!-- 设置编译版本为1.8 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                    <uriEncoding>utf-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

双击启动

命令启动

 

(3)依赖管理:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值