Maven基础-20.02.25

基本概念

  • 什么是Maven

    定义:Maven是一个项目管理工具,它包含了一个项目对象模型(POM: Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统费(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑.

  • Maven能解决什么问题

    1. 凡是开发项目,就需要导入jar包,而大型的工程,需要导入几十个乃至上百个,项目越大需要导入的jar包越多,而jar包多了,就会遇到各种让人抓狂的jar包冲突,版本冲突

    2. 我们写好的java文件,只认识0和1的白痴电脑是读不懂的,需要将它编译成二进制字节码.但是现在这项工作可以由各种集成开发工具帮我们完成,Eclipse,IDEA等可以将代码即时编译,而Maven也可以

    3. 凡是写代码就会有BUG,为了避免最后问题越来越多,我们在写代码的时候就需要进行单元测试,那也意味着我们的单元测试也会越来越多,如果按照以前的做法,即使单元测试再多,我们也需要一个一个的去测试,但是如果交给Maven来管理我们的项目,他就会把指定目录下的单元测试一次完成,并且告诉你哪些是正确的,哪些是有异常的

    4. 代码写出来是需要卖的,而我们在写完项目之后是需要打包的,而我们使用Eclipse,IDEA都需要手动打包,而使用Maven进行打包,只需要一个命令即可完成

    5. 可见在项目开发到最后运行到线上,整个过程中,Maven都可以帮我们解决问题

  • Maven依赖管理的概念

    传统web工程 : jar包在项目中

    maven开发的项目 : jar包不在项目中,而统一放在jar包仓库中(maven工程运行编译项目时,会通过jar包的坐标去jar包仓库中找到对应的jar包)

    使用maven大大的节省了磁盘的空间(实现了代码可重用)

    依赖管理 : maven工程的管理过程

  • 项目的一键构建

    • 什么是构建?

      • 指的是项目从编译、测试、运行、打包、安装、部署整个过程都交给Maven进行管理,这个过程称为构建
    • 一键构建

      • 指的是整个构建过程,使用Maven一个命令可以轻松完成整个工作
    • 例子 : 我们之前使用本地安装的Tomcat对项目编译、测试、运行、打包、安装、部署任何一步操作都是在构建项目,而Maven的一键构建是使用自身集成的Tomcat插件来完成

    • pom.xml : 存放着jar包的坐标

Maven的安装和仓库种类

  • Maven的安装

    • Apache-maven-3.5.2 下载地址 : http://archive.apache.org/dist/maven/maven-3/

    • 需要解压到一个没有中文的路径下(E:\JAVA\apache-maven-3.5.3-bin\apache-maven-3.5.3)

      • bin : mvn命令用来构建项目

      • boot : Maven自身运行所需要的类加载器

      • conf : settings.xml是Maven主要的配置文件

      • lib : 拥有Maven自身运行所需要的jar包(类似有Tomcat插件)

    • 配置环境变量MAVEN_HOME : E:\JAVA\apache-maven-3.5.3-bin\apache-maven-3.5.3\bin

  • 仓库的种类和彼此的关系

    1. 本地仓库 : Maven会默认在我们的c盘创建本地仓库,打开settings.xml(Default: ${user.home}/.m2/repository),通过jar包的坐标找我们需要的jar包

    2. 中央仓库 : 如果我们电脑可以联网,本地仓库没有jar包,Maven会通过jar包的坐标去中央仓库下载jar包,如果没有联网就会报错(放置了几乎所有开源的jar包)

    3. 远程仓库(私服) : 在公司中,为了在不联网的情况下可以开发,也为了公司内部所需要的jar包可以放在一个统一的地方,我们会在创建一个远程仓库(私服),只需要确保自己的电脑和远程仓库在一个局域网,即可下载jar包,如果远程仓库中没有,它会从中央仓库进行下载,也可以通过本地上传的方式获取jar包

    C盘的资源是非常宝贵的,所以我们可以通过/path/to/local/repo

    这段代码重新指定本地仓库

    E:\JAVA\maven_repository

Maven的标准目录结构和常用命令

  • Maven标准目录结构
    目录 核心代码部分
     src/main/resources 配置文件部分
     src/test/java目录 测试代码部分
     src/test/resources 测试配置文件
     src/main/webapp 页面资源,js,css,图片等等(建立web项目时)
  • Maven常用命令

    • mvn clean : 将编译好的文件删掉(将target目录删除)

    • mvn compile : 编译(在target目录中生成classes文件)

    • mvn test : 测试(在target目录中生成test-classes文件,也生成了classes文件)

    • mvn package : 打包(在target目录中将项目打包,也生成了test-classes文件,classes文件),pom.xml文件中war指定打包的格式

    • mvn install : 安装(做到了以上操作,并且将这个jar包放入了本地仓库)

Maven的生命周期和概念模型图

  • Maven生命周期

    • 默认生命周期

      1. 编译(compile)

      2. 测试(test)

      3. 打包(package)

      4. 安装(install)

      5. 发布(deploy)

      当我们执行到后面的命令时,前面的命令也就已经执行过一遍了

    • 清理生命周期

      1. 清除(clean) : 清除项目编译信息

      在我们编译项目之前,把之前项目编译的文件统统删除掉,是我们对项目进行构建的一个准备工作

    • 站点生命周期 : 实际代码中用的并不多

  • Maven概念模型图 (两大核心功能)

    27Y@NOX]2IV%G$(4YK3T.png)

    • 项目对象模型(POM) : pom.xml 中存放着

      1. 项目自身信息

      2. 项目运行所依赖的jar包信息

      3. 项目运行环境信息,比如:jdk,tomcat信息

    • 依赖管理模型(Dependency) : 放置着jar包的坐标,任何一个jar包坐标都必须有这三个部分组成,只能比这多不能比这少

       
          javax.servlet.jsp  公司组织的名称
          jsp-api  项目名
          2.0              版本号
           
    

    以上整体就是Maven的第一个核心功能依赖管理,顾名思义项目对jar包的管理过程

    • Build lifecycie & phases : 构建生命周期

      • Maven分三套生命周期,最常见的是默认生命周期 compile,test,package,install,deploy

      • 每次构建项目Maven底层都会有一个插件在工作, 每一个构建项目的命令对应了Maven底层的一个插件

      以上整体就是Maven第二个的核心功能一键构建

使用骨架创建Maven的Java工程

  • IDEA集成Maven插件

    1. 打开软件,点击configure-project default-settings。配置maven目录。

      Maven基础-20.02.25_第1张图片
      Maven基础-20.02.25_第2张图片
      img
    2. 还需要配置一个地方是本地仓库的优先,在runner-VM Options里面填写一下代码

-DarchetypeCatalog=internal
Maven基础-20.02.25_第3张图片
优先使用本地仓库
  • 使用骨架创建Maven的Java工程

    1. 使用Maven的骨架 quickstart

      Maven基础-20.02.25_第4张图片
      img
    2. 声明项目坐标(Gorupid,Artifactid,Version)

      Maven基础-20.02.25_第5张图片
      img
    3. 再次确认当前使用的Maven环境

      Maven基础-20.02.25_第6张图片
      这里写图片描述
    4. 项目的名称和存放目录

      Maven基础-20.02.25_第7张图片
      这里写图片描述
    5. Maven默认不会帮我们把main目录创建完整,需要我们自己手动书写目录结构

  • 不使用骨架创建Maven的Java工程

    • 不使用Maven骨架,不点击Create

    • 和以上相同

    • 推荐不使用骨架

  • 使用骨架创建Maven的Web工程

    • 使用Maven的骨架 webapp

    • 和以上相同

    • 需要自行建立一个java目录,用于存放java代码。注意的是要将其设置为源文件夹。

      Maven基础-20.02.25_第8张图片
      这里写图片描述

Maven工程Servlet实例

  • Maven工程Servlet实例之指定

    • IDEA对每个目录所放置的文件格式是非常严格的,可以通过工程资源分配Project Settings-Modules进行对目录资源创建的指定
  • Maven工程Servlet实例之导入项

    • 通过New-Servlet创建,需要补充web.xml的路径
     
            
            
      
    

    在java目录中新建包,创建一个servlet类,会出现报错信息。


    Maven基础-20.02.25_第9张图片
    img

报错原因是没有导入servlet-api的jar包,maven工程中需要我们去填写坐标进行导包。

  • 配置pom.xml文件 在文件中dependencies标签中添加以下代码,可以使用idea的提示,会快很多。
 
      javax.servlet
      servlet-api
      2.5
   
Maven基础-20.02.25_第10张图片
这里写图片描述
  • 如果本地仓库没有jar包,那么我们只能从网络上下载(Maven中央仓库),搜索需要的jar包,复制jar包坐标至pom.xml文件中即可,建议本地仓库放置一些经常用的jar包,防止影响开发效率

  • 启动项目 : 点击IDEA右侧Maven Projects-Lifecycle,双击生命周期即可,双击Execute Maven Goal填写tomcat:run执行,访问日志中的路径即可,但是会报错,解决问题如下

  • Maven工程Servlet实例之jar包冲突

    • 我们打开tomcat-lib会发现,其中包含jsp-api,servlet-api,与我们之前在pom.xml文件中配置的信息相冲突

    • 我们想要让它在编译的时候起作用,就要给这两个jar包定义一个作用域

    • 此时会出现异常,是因为jar包冲突了。我们只需要在导入serlvet-api包的时候加上一句代码就可以了。同理,可如果jsp也出现了冲突,也要加。

       provided
    
    • 导入这段代码会使jar包在编译时起作用,真正项目运行的时候会使用tomcat插件中的jar包

    • junit包同理

      test
    
  • Maven工程运行环境修改

    • 定制模板Settings-live-点击+创建组custom-选中组+添加模板-Define选中XML
        tomcat7插件
         
          org.apache.tomcat.maven
          tomcat7-maven-plugin
          2.2
          
          8888
          
          
         ​
         jdk插件
         
          org.apache.tomcat.plugins
          maven-compiler-plugin
          
          1.8
          1.8
          UTF-8
          
          
    
  • Maven的Java工程取mysql数据库

    • 添加依赖
      
           mysql
           mysql-connector-java
           5.1.47
           runtime
       
    
      
           org.mariadb.jdbc
           mariadb-java-client
           1.8.0
           runtime
       
    

你可能感兴趣的:(Maven基础-20.02.25)