当前位置: 首页 > news >正文

Maven(一)-- 基础知识

一、Maven的基本概念

  Maven(翻译为"专家","内行")是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。

  1.项目构建

  项目构建过程包括【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个步骤,这六个步骤就是一个项目的完整构建过程。理想的项目构建是高度自动化,跨平台,可重用的组件,标准化的,使用maven就可以帮我们完成上述所说的项目构建过程。

  2.依赖管理

  3.使用Maven的好处

  1) Maven中使用约定,约定java源代码代码必须放在哪个目录下,编译好的java代码又必须放到哪个目录下,这些目录都有明确的约定。

  2) Maven的每一个动作都拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程

  3) 只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情。 

  4) 使用Maven可以进行项目高度自动化构建,依赖管理(这是使用Maven最大的好处),仓库管理。

二、Maven的简单使用

  1.Maven项目的目录约定

  |----src
    | |----main
      | | |----java ——存放项目的.java文件
      | | |----resources ——存放项目资源文件,如spring, hibernate配置文件
    | |----test
      | | |----java ——存放所有测试.java文件,如JUnit测试类
      | | |----resources ——存放项目资源文件,如spring, hibernate配置文件
  |----target ——项目输出位置
  |----pom.xml ----用于标识该项目是一个Maven项目

  2.Pom.xml配置

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!--所有的Maven项目都必须配置这四个配置项-->
     <modelVersion>4.0.0</modelVersion>
     <!--groupId指的是项目名的项目组,默认就是包名-->
     <groupId>com.dongnao.jack</groupId>
     <!--artifactId指的是项目中的某一个模块,默认命名方式是"项目名-模块名"-->
     <artifactId>mavenProjeck</artifactId>
     <!--version指的是版本,这里使用的是Maven的快照版本-->
     <version>SNAPSHOT-0.0.1</version>

     <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>compile/test/provided/runtime</scope>
        </dependency>
     </dependencies>
</project>

  3.maven命令

  mvn compile

  mvn test

  mvn package:一条龙服务,包括编译、测试、打包。但是并没有把包同步到仓库

  mvn install:一条龙服务,包括编译、测试、打包。并且把包同步到仓库

  mvn clean 

三、maven的概念模型

  

四、Maven的仓库布局

  根据maven坐标定义每个构建在仓库中唯一存储路径

    路径为:groupId/ artifactId/version/ artifactId-version.packaging

    http://search.maven.org  从中央仓库中搜索jar包

  创库分类

    本地仓库,默认在/.m2/repository/,每个用户只有一个本地仓库

    远程仓库

    中央仓库:http://repo1.maven.org/maven2   central

    私服:是一种特殊的远程仓库,架设在局域网内的仓库

    镜像:用来替代中央仓库,速度一般都比中央仓库快。 Mirror,一般都是国内,例如:阿里的maven镜像

五、Maven三大生命周期

  生命周期Maven有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:

  1) Clean在进行真正的构建之前进行一些清理工作。 

  2) Default构建的核心部分,编译,测试,打包,部署等等。 

  3) Site生成项目报告,站点,发布站点。

六、Maven坐标

  Maven坐标主要组成:

  • groupId:定义maven的项目,可以用包名
  • artifactId:定义项目中的一个模块,一般都是工程名
  • version:版本
  • packaging:定义打包方式

  坐标的作用:用来唯一标识一个构件,在依赖里面根据坐标来找需要的构件。

七、Maven依赖

  根据maven坐标找依赖的构件

  dependency依赖中scope范围

  1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效。

  2.test:测试依赖范围。只对于测试classpath有效,只对测试代码有效

  3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api,打包的时候这个包不会打进去

  4.runtime:运行时提供。例如:jdbc驱动

  Compile、runtime打包会打进去,test、provided打包不会打进去。

  依赖冲突解决:

 1.路径最近者优先   CBA,C依赖B,B依赖A,会先用B的jar包

     2.路径相同,第一声明者优先:CB,CA,必须看B,A在C中哪一个先声明

八、Maven聚合和继承

主要是可以起到公共配置文件的抽取作用,jar包的统一管理

注意:

    1.dependencyManagement中定义的依赖子module不会共享

    2.dependencies中定义的依赖子module可以共享

    3、jar包的统一管理,把jar抽取到parent中

   继承:

  <parent>

    <groupId>com.sz.buss</groupId>

    <artifactId>parent</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <relativePath>../parent</relativePath>

  </parent>

  聚合:

  <modules>

    <module>hello1Maven</module>

    <module>maven1</module>

  </modules>

九、Maven web项目

  自动部署到tomcat下面并运行

<build>
    <finalName>web</finalName>
    <plugins>
          <plugin>
              <groupId>org.codehaus.cargo</groupId>
              <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.2.3</version>
                <configuration>
                    <container>
                        <containerId>tomcat5x</containerId>
                        <home>D:/Program Files/Apache Software Foundation/Tomcat 5.0</home>
                    </container>
                    <configuration>
                        <type>existing</type>
                        <home>D:/Program Files/Apache Software Foundation/Tomcat 5.0</home>
                    </configuration>
                </configuration>
                <executions>  
                  <execution>  
                      <id>cargo-run</id>  
                      <phase>install</phase>  
                      <goals>  
                          <goal>run</goal>  
                      </goals>  
                  </execution>  
              </executions>
          </plugin>
      </plugins>
  </build>

 

相关文章:

  • Atitit 数据库视图与表的wrap与层级查询规范
  • 【Foreign】咏叹 [模拟退火]
  • css的伪类选择器的使用
  • 待字闺中之快排单向链表;leetcode之Sort List
  • 打造比Dictionary还要快2倍以上的字查找类
  • nginx调优操作之nginx隐藏其版本号
  • 图片视频制作方法
  • Rsyslog日志服务搭建
  • 2017年北京下半年软考网上报名时间和网址
  • 各大搜索引擎智能提示API(jsonp实现跨域自动补全建议)
  • SpringMVC传入参数
  • Vue SSR 从入门到 Case Study
  • Android学习笔记进阶20 之得到图片的缩略图
  • 解决面板里没有network manager图标的问题 ,也就是在桌面环境下,没有那个网络图标...
  • python类的继承、封装和多态
  • 网络传输文件的问题
  • @jsonView过滤属性
  • 【EOS】Cleos基础
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Android 控件背景颜色处理
  • input的行数自动增减
  • Java 网络编程(2):UDP 的使用
  • magento 货币换算
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • springboot_database项目介绍
  • Vue 动态创建 component
  • 从零开始在ubuntu上搭建node开发环境
  • 电商搜索引擎的架构设计和性能优化
  • 回顾2016
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 说说动画卡顿的解决方案
  • 算法之不定期更新(一)(2018-04-12)
  • 微服务核心架构梳理
  • 我感觉这是史上最牛的防sql注入方法类
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • scrapy中间件源码分析及常用中间件大全
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 昨天1024程序员节,我故意写了个死循环~
  • #HarmonyOS:Web组件的使用
  • (windows2012共享文件夹和防火墙设置
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (算法)Game
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)Sql Server 保留几位小数的两种做法
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET NPOI导出Excel详解
  • .net Stream篇(六)