初识maven

1,maven简介

  简单来说,maven就是管理项目的工具。

      Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具
   Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本
 就可 以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

maven官网 http://maven.apache.org/

2,maven的安装和配置

  maven的下载 http://maven.apache.org/download.cgi

  首先确定jdk已经安装和配置

把maven解压到D盘

配置maven的环境变量 M2_HOME D:mavenapache-maven3.5.0 (我用的maven版本是3.5.0)

3,maven helloWorld 的实现

  POM文件里一些信息

  modelVersionPOM 模型版本 4.0.0 固定

  groupId:一般指某个公司或者某个组织的某个项目 比如 org.springframework

  artifactId:一般指某个具体项目的某个具体模块 比如 spring-context

  Version:项目的版本

  Maven Run as 常见命令

  Mvn compile 编译

  Mvn clean 清空

  Mvn test 测试

  Mvn package 打包

  Mvn install 把项目安装到本地仓库

  Mvn 远程仓库地址:http://mvnrepository.com/

4,maven本地仓库迁出C盘

 D:apache-maven-3.5.0-binapache-maven-3.5.0confsetting

  配置 setting 文件

<localRepository>D:maven epository</localRepository>

5,maven的核心技术

  maven配置远程仓库

  $M2_HOME/lib/maven-model-builder-3.5.0.jar

  文件 :orgapachemavenmodelpom-4.0.0.xml

   <repositories>

<repository>

<id>central</id>

<name>Central Reposity</name>

<url>https://repo.maven.apache.org/maven2 </url>

<layout>default</layout>

<snapshots>

<enabled>false</enabled>

 </snapshots>

</repository>

 </repositories>

5.2,Maven依赖特性

依赖传递:

  依赖选择(最短路径原则和最先申明原则)

  如果a->b->c  并且 a->d 那么 a会先去依赖d 才回去依赖

  最先申明原则 那个是最先声明的,就选择是那个依赖

  依赖的传递性

  a依赖b b依赖c  我们也可以说 a也依赖c

    那么执行a时 c,b的jar会自动下载下来

  2,依赖传递的排除

  现在不想在执行a的时候吧C也下载下来 我们可以使用 <exclusions>标签。

<dependencies>

    <dependency>        

<groupId>B</groupId>    

     <artifactId>B</artifactId>     

    <version>0.0.1</version>

 <exclusions>    

    <exclusion>             

  <!--被排除的依赖包坐标-->

              <groupId>C</groupId>      

         <artifactId>C</artifactId>         

      <version>0.0.1</version>          

   </exclusion>   

       </exclusions>  

   </dependency>

</dependencies>

3,依赖冲突与解决

   依赖冲突:一个项目A,通过不同依赖传递路径依赖于X,若在不同路径下传递过来的X版本不同,那么A应该导入哪个版本的X包呢?

    冲突解决方案:

    1:如果依赖路径的长度不同,则“短路优先”:

         A—>B—>C—>D—>E—>X(version 0.0.1)

         A—>F—>X(version 0.0.2)

         则A依赖于X(version 0.0.2)。

     2:依赖路径长度相同情况下,则“先声明优先”:

         A—>E—>X(version 0.0.1)

         A—>F—>X(version 0.0.2)

         则在项目A的<depencies></depencies>中,E、F那个在先则A依赖哪条路径的X。

5.4,maven的聚合和继承特性

    Maven聚合(或者称为多模块),是为了能够使用一条命令就构建多个模块

    重新建立一个maven项目  只有一个pom.xml就行,别的骨架可以不要,例如有两个模块 service 和dao

    <modules>

      <module>../user-dao</module>

         <module>../user-service</module>

    </modules>

  重新clean一下service 和dao 模块  刷新一下 target被清空

继承 新建maven user-parent 只有一个pom.xml就行 别的骨架可以不要,

  在dao service  pom文件中 在<modelVerion><modelVersion> 下面加一个 parent 标签 把新建的parent <modelVerion><modelVersion>和<packaging></packaging>之间的版本号 地址  名字 复制过去    在加一个寻找pom.xml的路径<relativePath>/parent pom文件的路径 ../user-parent/pom.xml</relativePath>  在user-dao里面可以除掉一些信息   <packaginng></packaging> 包装 只有web 是war  别的都是jar

  maven提供了一个 <dependencyManagement></dependencyManagement>依赖管理  <dependencies></dependencies>

  可以吧 两个文件中相同的配置 提取出来 放到parent pom.xml 中 例如配置 jstl  junit log4j

  可以用properties 对版本进行统一的管理 <properties><spring.version>4.1.7RELEASE<spring.version></properties>

  在下面的spring配置 中 <version></version>标签里面可以改成<version>${spring.version}</version>

  这样就方便了 版本的更新 管理

  还可以把聚合pom.xml中的  <modules>

      <module>../user-dao</module>

         <module>../user-service</module>

    </modules> 写到parent 中

聚合和继承可以放到一起

也算是方便管理吧

6,maven的依赖范围

  如果当你自己的jar包 和 系统的jar包冲突的话  可以在对应的 配置语句下面加一个<scope>provided<scope>问题就解决了 

classpath在maven里分为三种 编译classpath ,测试 classpath,运行 classpath

  Scope选项如下:

  Compile:编译依赖范围。默认就是compile。在编辑,测试 运行的时候都有效

  test : 测试依赖范围 仅仅测试有效

  provided:已提供依赖范围。编译,测试有效,运行时无效

  System 系统依赖范围(了解即可)。

  Import: 导入依赖范围(了解即可)。

    

  

  

  

原文地址:https://www.cnblogs.com/gudeyeyu/p/9349545.html