Maven基础

 Maven基础

1Maven介绍

1.1什么是Maven

Maven发音是[ˈmevən](枚文)意思是专家、内行。

Maven的一个比较正式的定义:

Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model),一组标准集合

一个项目生命周期(Project Lifecycle),一个依赖管 理系统(Dependency Management System),

和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑

1.2为什么使用Maven

大工程需要引入很多java包,容易遇到jar包和版本冲突问题;

代码完成后,需要写单元测试,一个个运行检查;

需要吧代码、配置文件、资源整合后打包;web项目需要发布到服务器;

Maven是一个能帮我们从上面这些繁琐的工作解放出来的工具。能帮助我们:

构建项目、管理jar包、编译代码、自动运行单元测试(...)、打包、生成报表(...)、部署项目生成web站点。

1.3依赖管理的概念

依赖管理就是管理jar包的过程(Maven的一个核心功能);

传统工程把依赖的jar包复制到项目中,会使工程内存变得很大,Maven创建的工程,就不用担心这个问题。(如下图)

 

 Maven工程中没有存放jar包,取而代之的是在pom.xml文件中加入jar包的坐标(GAV:公司/组织名+项目名+版本号),即添加依赖

项目用到jar包的时候,通过pom.xml中的坐标(依赖,从仓库(Maven仓库)中找到对应的jar包,然后拿来运行。

补充:因为Maven仓库中建立了索引,所以提高了maven项目根据pom.xml配置文件中的依赖加载jar包的速度(达到了传统项目加载自己jar包一样的速度)

1.4一键构建的概念

 构建:项目从编译、测试、运行、打包、安装、到部署的整个过程都交给maven管理。

一键构建:maven将项目构建的过程标准化,每个阶段使用一个命令就可以完成。

Maven的构建过程的阶段,图如下:

例子:mvn tomcat7:run 一键运行Hello-Maven工程

  在打开cmd,进入项目根目录,输入mvn tomcat7:run后(也可以进入根目录,shift+右键,之间进入cmd输入命令),然后复制网址,浏览器访问。

 2Maven的安装和仓库的种类

 2.1安装

去官网下载(http://maven.apache.org/download.cgi)apache-maven-3.6.0-bin.zip。

(Maven 3.3+要求执行JDK 1.7或更高版;Maven使用前提安装了jdk)

这个下载网址也可以http://archive.apache.org/dist/maven/maven-3/

 

然后解压到没有中文的目录,并且配置环境变量MAVEN_HOME,设置为安装路径。

 path添加:%MAVEN_HOME%in

Maven软件结构

bin:存放了 maven 的命令,比如我们前面用到的 mvn tomcat:run

boot:存放了一些 maven 本身的引导程序,如类加载器等

conf:存放了 maven 的一些配置文件,如 setting.xml

文件 lib:存放了 maven 本身运行所需的一些 jar 包

 使用mvn -v命令测试安装是否成功

2.2仓库的种类

仓库分三种:本地仓库、远程仓库(私服)和中央仓库;

本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包, 优先从本地仓库查找

默认本地仓库位置在 ${user.dir}/.m2/repository,${user.dir}表示 windows 用户目录

默认本地仓库位置需要修改到显眼的地方。

打开configsetting.xml文件

设置镜像

  <mirrors>
  
      <!-- 阿里云仓库 -->
        <mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
        </mirror>
    
        <!-- 中央仓库1 -->
        <mirror>
            <id>repo1</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo1.maven.org/maven2/</url>
        </mirror>
    
        <!-- 中央仓库2 -->
        <mirror>
            <id>repo2</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo2.maven.org/maven2/</url>
        </mirror>全局

全局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 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载(???不是中央仓库吗,需要测试) 远程仓库可以在互联网内也可以在局域网内。 

中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,

服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含了世界上大部分流行的开源项目构件。

3 Maven标准目录结构和常用命令

 Maven目录结构

src/main/java (存放项目的.java 文件)

src/main/resources (存放项目资源文件,如 spring, hibernate 配置文件)

src/test/java (存放所有单元测试.java 文件,如 JUnit 测试类)

src/test/resources ( 测试资源文件)

target (项目输出位置,编译后的 class 文件会输出到此目录)

pom.xml(maven 项目核心配置文件 注意:如果是普通的 java 项目,那么就没有 webapp 目录。

常用命令:

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

  (进入Maven项目目录cmd 进入命令状态,执行 mvn compile,其它命令执行类似)

test:测试命令 mvn test,会执行 src/test/java 下的单元测试类

clean:清理命令,执行 clean 会删除 target 目录及内容。

package:对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war 包。

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

当后面的命令执行时,前面的操作过程也都会自动执行,

4Maven生命周期和概念模型图

三套”相互独立的生命周期“,重点掌握默认生命周期。

 概念模型图

5使用骨架创建Maven的java工程

首先在idea中配置maven:

上面配置成功以后,每次创建maven项目还是要选择,解决方法:

ps:如果c盘用户里面那个仓库删除以后等下次运行还会在出来的话,就去你idea的安装路径里找个

名字为plugins的文件夹,里面也有一个maven文件这里面有idea自带的两个maven版本童谣道理找到这两个里面的settings.xml将路径更改一下即可

 

 用骨架创建一个java项目

 

填写坐标

设置配置信息

设置项目位置

补全文件夹:

不用骨架直接穿件java工程则不需要创建资源文件夹,推荐这种方式。

用骨架创建一个web项目

过程和上面类似,需要创建src下创建java文件夹,make as Sources Root.

6Maven工程servlet实例

mavevn问题:

01idea maven仓库索引更新怎么弄?

原文地址:https://www.cnblogs.com/juna3066/p/10618616.html