Maven 三、Maven核心知识

3-1 maven常用的构建命令

mvn -v 查看Maven版本

mvn complie 只是编译

mvn test 通过Maven执行单元测试

mvn package 通过Maven进行打包(将项目转为jar)

mvn clean 将Maven生成的taget文件夹下文件全部清理

mvn install 通过Maven将项目打包并发送到本地仓库中

mvn install 安装jar到本地仓库中,这样其他依赖该jar的项目就可以用到了。

mav编译的流程是:编译代码---》发现缺少jar包-----》去pom文件中找依赖的坐标----》去本地仓库找依赖---》如果没有再联网去maven的中央仓库找

3-2  maven自动建立目录骨架

archetype插件:用于创建符合maven规定的目录骨架

maven规定,在src-main-java文件夹下放置主代码,在src-test文件夹下放置测试代码

maven创建目录的两种方式:

1.archetype:generate 按照提示进行选择

2.archetype:generate -DgourpId=组织名,公司网址的反写+项目名称

-DartifactId=项目名-模块名

-Dversion=版本号

-Dpackage=代码所在的包名

实例

mvn archetype:generate -DgroupId=com.imooc.maven04 -DartifactId=maven04-demo -Dversion=1.0.0-SNAPSHOT -Dpackage=com.imooc.maven04-demo

3-3 maven中的坐标和仓库

坐标

         构件

仓库

          本地仓库

          远程仓库:maven-model-builder-3.3.3.jar\org\apache\maven\model,超级pom.xml文件,

          全球中央仓库地址:https://repo.maven.apache.org/maven2

镜像仓库

          /conf/setting文件:

<mirror>

<id>maven.net.cn</id>

<mirrorOf>central</mirrorOf>

<name>central mirror in china</name>

<url>http://maven.net.cn/content/groups/public</url>

</mirror>

            一旦配置了镜像仓库,那么先前的所有配置都会转到镜像仓库中

修改本地仓库的位置:

           <localRepository>D:/Maven/repository</localRepository>

3-4 在eclipse中安装maven插件以及创建maven项目

在eclipse中安装maven插件以及创建maven项目:

①在eclipse4.0及MyEclipse中就不需要安装maven插件,在window--preference中可以查看是否有maven插件,没有的话就需要安装Maven插件,直接复制Maven插件到eclipse安装目录中的dropins中,然后修改eclipse.ini,在这个文件里的512m后面添加-vm,换行,再添加jdk/bin/javaw.exe保存。

②eclipse是默认运行在jre之上的而maven需要jdk的支持,需要tools.jar在jdk/lib目录中,所以修改eclipse的JRE,java---Installed JREs--ADD--Next--把本地JDK的目录放到JRE home中,并设置Dmaven.multiModuleProjectDirectory=$M2_HOME--最后勾选JDK

③更改maven本地的配置Installactions---ADD---把本地的maven目录放进去

④修改setting的路径

会出现的问题:

1、如果版本不匹配 则mvn -v查看maven的jdk版本,然后在eclipse中配置当前使用的jdk

2、run as-->Maven build...-->在goals中compile(可以在此处使用其他的命令,如:package)---》run

若报-Dmaven.multiModuleProjectDirectory错误,则在选项-->java--》installed JRES 中设置jdk的参数,

添加上“-Dmaven.multiModuleProjectDirectory=$M2_HOME”

3-5 maven的生命周期和插件

完整的项目构建过程包括:

清理、编译、测试、打包、集成测试、验证、部署

maven生命周期:

    clean:清理项目

        - pre-clean :执行清理前的工作

        - clean:清理上一次构建生成的所有文件

        - post-clean:执行清理后的文件

    default:构建项目

        - compile test package install

    site:生成项目站点

        - pre-site 在生成项目站点之前要完成的工作

        - site 生成项目的站点文档

        - post-site在生成项目站点后要完成的工作

        - site-deploy发布生成的站点到服务器上

http://maven.apache.org/plugins/index.html

Maven对应的各种命令都是对应着相应的插件来执行的(详细信息去官网去了解),有些插件非常的好玩,功能强大,师傅领进门,修行在个人,视频是入门用的,深入必须去官网看各种资料,老师讲的很好,谢谢。

重点要晓得,Maven的生命周期是顺序执行的,如果自己没有执行,当我们从中间的某个阶段执行了的话,Maven也会自动的为墨门执行前面的每个阶段的

3-6 maven中Pom.xml解析

pom.xml常用元素

modelVersion 指定了当前pom版本

groupId 反写的公司网址+项目名

artifactId 项目名+模块名

version 版本号 第一个0表示大版本号,第二个0表示大版本号,第三个0表示大版本号

0.0.1snapshot快照

packaging 打包方式 默认是jar

name 项目的描述名

url 项目的地址

description 项目描述

developers 开发人员信息

licenses 许可证信息

dependencies

dependency

scope 依赖范围

optional 设置依赖是否可选

exclusion

dependencyManagement 依赖管理 不会被运行

build

plugins 插件列表(指出坐标)

parent 对父模块的继承

modules 定义多个模块 一起进行编译

3-7 maven依赖范围

依赖:就是我们编程时需要使用到的他人为我们提供好的程序,各种框架、各种库、各种API、各种工具包等等都是这样的。对于JAVA编程而言,我们需要将这些程序(打好的JAR包,放到classpath路径下就可以了)Maven为我们提供了三种classpath,编译、运行、测试,所以就进一步的产生了依赖范围这个概念,就是指这三种classpath在什么时候有效,下面是依赖范围

1.compile:默认范围,编译测试运行都有效

2.provided:在编译和测试时有效

3.runtime:在测试和运行时有效

4.test:只在测试时有效

5.system:在编译和测试时有效,与本机系统关联,可移植性差

6.import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置

如果想深入的了解这个工具的使用方式,应该去官网读文档,并且在实际的工作中多多的使用使用,才是关键。

3-8 maven依赖传递

传递依赖:简单讲就是间接依赖关系,比如:B依赖A,C依赖B,那么C也就依赖A了,C和A的依赖关系就是传递依赖。

Maven对于依赖的管理是这样的,当在POM.XML文件中发现配置了,某个依赖,就先去自己本地的依赖仓库中去找对应的依赖,如果没找到,就去Maven的中央依赖仓库中去找,如果还是没找到,就会生气报错。

对于项目而言,比如上面的例子A/B/C我们需要在B的POM.XML依赖关系中配置上A的坐标,并且需要对A进行编译、打包、安装到本地仓库等工作,B才能实现对A的依赖。C依赖与B,并且B依赖与A,C的依赖库里会自动的将A项目的jar包也导进来的。如果我们不想这样,那么就需要用到排除依赖这个标签了<exclusion></exclusion>——此标签就是排除对传递依赖的依赖关系的一种方式。

另外,在settings.xml文件中可以设置maven默认jre版本——使用<profile></profile>标签

3-9 maven依赖冲突

不同版本的构件

1.短路优先

2.先声明先优先

如果路径长度相同,则谁先声明,先解析谁

3-10 聚合和继承

聚合:如果项目D依赖项目C,项目C依赖项目B,项目B依赖项目A,我们需要一个个安装这项项目,在Maven中有一种方式可以将多个项目一次性安装,这就是聚合的概念。简单讲就是,需要人工多次操作的,只要Maven能理解,一次性告诉他,他就能帮我们做这件单调烦人的事情了。

——使用<modules></modules>这个标签。

继承:多次使用到的依赖,比如:单元测试,没有必要在所有的项目中都引用一下,此时就可以采用继承的方式来实现,先来一个父级的POM.XML然后再继承此POM.XML。

1. packaging 改为pom。

2. dependencyManagement 中并不提取依赖,只进行统一管理。

3. property中定义了junit版本号,之后可以引用。

4. 父类parent中的main和test没有意义,可以删除。

父类pom:

<dependencyManagement>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>${junit.version}</version>

</dependency>

</dependencies>

</dependencyManagement>

子类pom:

<parent>

<groupId>com.hongxin</groupId>

<artifactId>hongxin-parent</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

猜你喜欢

转载自blog.csdn.net/qq_40638497/article/details/81230398
今日推荐