zoukankan      html  css  js  c++  java
  • Maven基本概念和操作

    最近在学Java,找来一个开源项目练手,它是用 Spring Boot 搭建的框架,于是去学 Spring Boot,然而 Spring Boot 需要有 Spring 框架和 Maven 的使用经验,于是就来学 Maven 并作了一点笔记,预计过段时间会学习并整理 Spring 框架的笔记


    1 WHY

    之前看过别人说,学一样东西,首先要知道为什么要用这个东西,在没有这个东西之前,行业是怎样运转工作的,而这个东西的出现解决了哪些痛点,有什么优势,这样才能深入理解学习

    • 借助于Maven可以将一个项目拆分成多个工程,便于管理、分工
    • 借助于Maven可以将jar包仅仅保存在仓库中,有需要使用的工程引用这个文件接口,不再需要真的把jar包复制过来
    • 借助于Maven可以以一种规范的方式下载jar包,因为所有知名框架或第三方工具的jar包都按照统一规范存放在了Maven的中央仓库,不再需要自己一个个去寻找下载
    • 借助于Maven可以自动导入一个jar包所依赖的其他jar包

    2 WHAT

    • Maven是一个服务于Java平台的 自动化构建 工具(Make → Ant → Maven → Gradle)

    • 构建的概念:以java源文件、框架配置文件、JSP、HTML、图片等资源为原材料,去生产一个可以运行的项目的过程,包括编译、部署、搭建

    • 编译:Java源文件 → 编译 → Class字节码文件 → 交给JVM去执行

    • 部署:项目最终运行的并不是web工程本身,而是这个web工程编译的结果,部署就是将编译结果拿到服务器上的指定目录下的过程,动态web工程 → 编译、部署 → 编译结果

    • 构建过程中的各个环节:
    1. 清理:将以前编译得到的旧的Class字节码文件删除,为下一次编译做准备
    2. 编译:将Java源程序编译成Class字节码文件
    3. 测试:自动测试,自动调用Junit程序
    4. 报告:测试程序执行的结果
    5. 打包:动态web工程打WAR包,Java工程打JAR包
    6. 安装:Maven特定的概念,将打包得到的文件复制到仓库中的指定位置
    7. 部署:将WAR包复制到servlet容器的指定目录下,使其可以运行

    2.1 Maven的核心概念

    2.1.1 约定的目录结构

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ProjectName                     根目录:工程名
    |---src src目录:源码
    |---|---main main目录:存放主程序
    |---|---|---java java目录:存放Java源文件
    |---|---|---resources resources目录:存放框架或其他工具的配置文件
    |---|---test test目录:存放测试程序
    |---|---|---java
    |---|---|---resources
    |---pom.xml pom.xml 文件:Maven工程的核心配置文件

    2.1.2 POM

    • Project Object Model 项目对象模型,pom.xml 是Maven工程的核心配置文件

    2.1.3 坐标

    • 使用下面三个向量在仓库中唯一定位一个Maven工程:(Maven仓库也是这样定位)
      groupid:公司或组织域名倒序 + 项目名
      artifactid:模块名
      version:版本

    2.1.4 依赖 dependency

    • Maven解析依赖信息时会去仓库寻找依赖的JAR包,对于自己开发的Maven工程,要想使用依赖,需要先将其加入到本地仓库,方法:在工程pom.xml所在目录下,使用 mvn install 命令

    • 依赖的范围scope主要有三种:compile,test,provided,区别如下:

    依赖范围 scope 对主程序是否有效 对测试程序是否有效 是否参与打包 是否参与部署 典型例子
    compile 有效 有效 参与 参与 spring-core
    test 无效 有效 不参与 不参与 junit
    provided 有效 有效 不参与 不参与 servlet-api.jar
    1
    2
    3
    4
    5
    6
    7
    8
    <dependencies>
    <dependency>
    <groupId>junit</groupId> 大专栏  Maven基本概念和操作;
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    • 依赖的传递性:导入某个依赖,它所依赖的父依赖也会跟着传递过来,因此可以传递的依赖不必在每个工程中重复声明,在最底层的工程中依赖一次即可;注意:非compile范围的依赖不能传递,要想使用就要重复声明

    • 依赖的排除:不想导入传递过来的父依赖,可使用下面的语句将其排除,插在dependency之内

    1
    2
    3
    4
    5
    6
    <exclusions>
    <exclusion>
    <groupId></groupId>
    <artifactId></artifactId>
    </exclusion>
    </exclusions>
    • 统一管理依赖的版本:使用 <properties></properties> 标签配合自定义标签

    2.1.5 仓库 repository

    • 默认本地仓库地址 C:Usersusername.m2repository
    • 本地仓库中没有的,会去远程仓库下载(私服、中央仓库、中央仓库镜像)
    • 仓库中存放的是Maven工程,包括各种插件、第三方框架或工具的JAR包、自己开发的Maven工程

    2.1.6 生命周期 lifecycle、插件 plugin

    • 生命周期是指各个构建环节的执行顺序
    • 生命周期各个阶段的具体任务是由插件完成的,各个阶段与插件的目标对应
    • 不论现在要执行生命周期的哪一个阶段,都是从这个生命周期最初的位置开始执行

    2.1.7 继承

    • 以junit为例:junit处于test范围,由于test范围的依赖不能传递,分散在各个工程中,很容易造成版本不一致,给协同开发带来问题,因此需要对各个工程对junit依赖的版本进行统一管理
    • 解决思路:将junit依赖版本统一提取到父工程中,在子工程中声明依赖时不指定版本,以父工程中的设定为准,便于修改

    2.1.8 聚合

    • 一键安装各个模块工程

    3 HOW

    3.1 常用的Maven命令(cmd命令行)

    • 注意:执行命令时必须要进入pom.xml所在目录
    1
    2
    3
    4
    5
    6
    7
    mvn clean:清理  
    mvn compile:编译主程序
    mvn test-compile:编译测试程序
    mvn test:执行测试
    mvn package:打包
    mvn install:安装
    mvn site:生成站点

    3.2 Maven 在 IntelliJ IDEA 中的使用

    这部分要是详细写能写单独一篇,很多细致的操作我还没用到也还没学,在此先记录一下用Maven创建web工程的初始步骤,虽然看上去简单,但对于我一个新手,还是摸索了好久

    1. 新建一个工程
    1. 选择Maven,勾选create from archetype,选择maven-archetype-webapp
    1. 输入groupid和artifactid,然后next-next-finish
    1. BUILD SUCCESS之后,开始配置Tomcat:点击右上角Add configuration,在弹出窗口中点击左上角的“+”号,选择Tomcat server - local,填写Name,Application server,open browser,看到下方Warning后点击Warning右侧的Fix,选择war exploded,最后点OK,则Tomcat配置完毕
  • 相关阅读:
    【H5】ie8如何兼容html5标签(hack)
    mysql数据库:分表、多表关联、外键约束、级联操作
    mysql数据库:mysql初识
    mysql数据库:数据类型、存储引擎、约束、
    并发编程:协程TCP、非阻塞IO、多路复用、
    并发编程:同步异步、队列、协程与实现方式
    并发编程: GIL锁、GIL与互斥锁区别、进程池与线程池的区别
    并发编程:生产消费模型、死锁与Rlock、线程、守护线程、信号量、锁
    并发编程:守护进程、互斥锁、案例、进程间通讯
    并发编程:进程、多道、进程执行顺序与常用属性
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12361221.html
Copyright © 2011-2022 走看看