zoukankan      html  css  js  c++  java
  • 初识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: 导入依赖范围(了解即可)。

        

      

      

      

  • 相关阅读:
    搭建GitLab+Jenkins持续集成环境图文教程
    Linux学习教程,Linux入门教程(超详细)
    Python基础教程,Python入门教程(非常详细)
    我的Dojo中有一个Mojo(如何编写Maven插件)
    Nginx与安全有关的几个配置
    Tomcat安全设置
    MFC 重绘CButton 支持透明背景的png
    Qt中 QTreeView、QTableView单元项进行重命名
    C++将int与size_t进行比较的陷阱
    C++ using的用法
  • 原文地址:https://www.cnblogs.com/gudeyeyu/p/9349545.html
Copyright © 2011-2022 走看看