Maven认知

1. Maven定义

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.——Maven official website

Apache Maven是一个软件项目管理和理解工具。基于项目对象模型(POM)的概念,Maven可以管理项目的构建,报告和文件,从信息中心。

Maven采用一种“优先于配置(CoC)”的策略来管理项目。它不仅把源代码构建成可以发布的项目(包括编译、打包、测试和分发),还可以生成报告生成web站点等。——轻量级javaEE企业应用实战

2. 为什么用Maven

  1. maven项目依赖的本地仓库,没有jar包,项目比平常的项目要小很多,节省空间
  2. 不需要在每个项目靠同样的包,只需要在本地仓库有一份就行了
  3. maven可以带插件,如果导入配置了tomcat等插件的maven项目就不需要再配置本地tomcat了
  4. 一键构建项目,编译,测试,运行,打包,部署
  5. maven是java开发的自然是跨平台的
  6. 应用于大型项目,可以提高开发效率

3. Maven入门

3.1. 下载Maven

官网地址(这里下载的是apache-maven-3.5.0-bin.zip)

3. 2. 解压目录介绍

  1. bin:maven的可执行性文件
  2. boot:plexus-classworlds类加载器框架
  3. conf:相关配置文件
  4. lib:Maven的类库

3.3. 设置环境变量

  1. JAVA_HOME:JDK的安装路径
  2. MAVEN_HOME:Maven的安装路径
    ps:M2_HOME设置好后在path中注册一下:%M2_HOME%\bin;

3.4. 验证安装

打开cmd,输入mvn help:system,此时Maven会从网络上下载各种文件,当出现如下信息时表示安装成功了。
Maven Build Success

3.5. 设置Maven

3.5.1. maven 两种设置方式:

  1. 全局设置即通过Maven安装目录下的conf\settings.xml进行设置(推荐)
  2. 当前用户范围:通过${user.home}/.m2/settings.xml进行配置

3.5.2. maven参数配置

这里需要在maven配置文件中配置一个本地仓库,当然它有一个默认的在c盘,但是最好自己定义一个,配置方式参看:(3.5.3. settings相关配置参数)。

3.5.1. settings相关配置参数:

  1. (localRepository)配置本地仓库:

     <localRepository>D:/ide/Maven/LocalRepository</localRepository>
  2. (interactiveMode)与用户交互:true提示用户输入,false智能选择默认值

  3. (offline)设置maven是否为离线状态:false,当maven找不到本地插件、依赖库时会尝试从网络下载
  4. (proxies)设置Maven代理服务器:设置代理服务器,包括代理服务器的ID、协议、代理服务器的地址、端口、用户信息、密码等信息

3.6. Maven常用命令

  1. mvn tomcat:run:一键启动tomcat
  2. mvn clean:清理编译好的文件(target文件夹)
  3. mvn compile:编译主目录的文件
  4. mvn test :编译test下的文件
  5. mvn packge:打包,放在了target目录下
  6. mvn install :将项目推送到本地仓库(推jar包,war包没有什么作用)
    compile,test,package,install有执行顺序:
    执行后者会把它前面的也都执行了(这就是mvn的声明周期的概念)

4. Maven核心概念

4.1 Maven生命周期

不同生命周期的命令可以同时执行例:mvn clean package
以下只包含主要的阶段(phase):

  1. clean 生命周期:clean
  2. default 生命周期:compile,test,package , install,deploy(发布到私服上)
  3. site声明周期:site 生成项目说明文档

4.2 Maven 的坐标

4.2.1 项目坐标

pom需要为每个项目配置一个唯一的标识,这个标识就是坐标

<!-- 公司域名或组织名-->
<groupId>net.hncu</groupId>
<!-- 项目名-->
<artifactId>ssmTest</artifactId>
<!--打包方式-->
<packaging>war</packaging>
<!-- 版本-->
<version>1.0-SNAPSHOT</version>

4.2.2 依赖的坐标:

pom中可以依赖其他项目的jar包

<dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.2.7</version>
</dependency>

4.3 Maven插件和目标

Maven的强大之处来自于它的插件,Maven的所有功能几乎都是由插件完成的。Maven生命周期其实也是由Maven的各个插件完成的。

 <build>
    <plugins>
      <plugin>
        <!--插件坐标-->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <!--插件执行详情-->
        <executions>
          <execution>
            <!--绑定到compile阶段-->
            <phase>compile</phase>
            <!--执行的目标插件-->
            <goals>
              <goal>compile</goal>
            </goals>
            <!--执行相关参数-->
            <configuration>
              <source>1.8</source>
              <target>1.8</target>
              <encoding>utf-8</encoding>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

如上代码,是以Maven的编译插件为例,我们必要配置plugin的坐标,同时我们可以配置它的详情,它在哪个阶段执行、它执行什么目标、执行插件目标的参数

4.4 Maven依赖

就是对项目中jar 包的管理。可以在pom文件中定义jar包的GAV坐标,管理依赖。

<dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.2.7</version>
</dependency>

4.4.1. Maven依赖范围

依赖范围是通过scope来设置的

  • Compile 例:struts2-core
    范围:编译(compile) 、测试(Test),运行(),打包
  • Provided 例: jsp-api.jar servlet-api.jar
    范围:编译(compile)时需要,测试(test)时也需要 ,运行时不需要,打包时不需要
  • Runtime 例: jdbc
    范围:编译时不需要,测试时需要,,运行时需要,打包时需要
  • Test 例:junit.jar
    范围:编译时不需要,测试时需要,运行时不需要,打包也不需要

4.4.2. 依赖传递

如果B中使用A,C中使用B,则称B是C的直接依赖,而称A是C的间接依赖。

  • 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
  • 当第二直接依赖的范围是test的时候,依赖不会得以传递。
  • 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
  • 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;

4.4.3. 依赖冲突

  • 如果直接与间接依赖中包含有同一个坐标不同版本的资源依赖,以直接依赖的版本为准。
    即:假如项目A中包含junit 3.9,B中包含junit 4.1,B依赖A,C依赖B,C会选择最近的B中的junit4.1
  • 如果直接依赖中包含两个不同版本的包,会选择配置下方的为准。

4.4.4 解决冲突

4.4.4.1 从父类角度
可以配置optional阻止向下传递

<!--true不传递,默认false-->
<optional>true</optional>

4.4.4.2 从子类 角度
可以配置排除依赖,排除依赖包中所包含的依赖关系,不需要版本号

<exclusions
    <exclusion>
        <groupId>com.qf.maven</groupId>
        <artifactId>maven-first</artifactId>
    </exclusion>
</exclusions>

4.5 Maven的资源库

4.5.1. 本地资源库

在本机上的一个文件夹,所有Maven用的插件、jar包都在这里,当此处没有时会去远程下载

4.5.2 远程资源库

一般由某个司或团队自己维护,通过远程库可以让公司或团队都用同样的jar系统,如果没有找中央仓库

4.5.3 中央仓库(默认)

由Maven官方维护。

5. pom.xml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值