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盘的资源是非常宝贵的,所以我们可以通过<localRepository>/path/to/local/repo</localRepository>

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

    <localRepository>E:\JAVA\maven_repository</localRepository>

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

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

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

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

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

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

    • 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包坐标都必须有这三个部分组成,只能比这多不能比这少

       <dependency>
          <groupid>javax.servlet.jsp</groupid>  公司组织的名称
          <artifactid>jsp-api</artifactid>  项目名
          <version>2.0</version>              版本号
         </dependency>  
    

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

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

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

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

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

使用骨架创建Maven的Java工程

  • IDEA集成Maven插件

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

      img
    2. 还需要配置一个地方是本地仓库的优先,在runner-VM Options里面填写一下代码

-DarchetypeCatalog=internal</pre>
优先使用本地仓库
  • 使用骨架创建Maven的Java工程

    1. 使用Maven的骨架 quickstart

      img
    2. 声明项目坐标(Gorupid,Artifactid,Version)

      img
    3. 再次确认当前使用的Maven环境

      这里写图片描述
    4. 项目的名称和存放目录

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

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

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

    • 和以上相同

    • 推荐不使用骨架

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

    • 使用Maven的骨架 webapp

    • 和以上相同

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

      这里写图片描述

Maven工程Servlet实例

  • Maven工程Servlet实例之指定

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

    • 通过New-Servlet创建,需要补充web.xml的路径
     <servlet-mapping>
            <servlet-name></servlet-name>
            <url-pattern></url-pattern>
      </servlet-mapping>
    

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


    img

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

  • 配置pom.xml文件 在文件中dependencies标签中添加以下代码,可以使用idea的提示,会快很多。
 <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
   </dependency>
这里写图片描述
  • 如果本地仓库没有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也出现了冲突,也要加。

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

    • junit包同理

      <scope>test</scope>
    
  • Maven工程运行环境修改

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

    • 添加依赖
      <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.1.47</version>
           <scope>runtime</scope>
       </dependency>
    
      <dependency>
           <groupId>org.mariadb.jdbc</groupId>
           <artifactId>mariadb-java-client</artifactId>
           <version>1.8.0</version>
           <scope>runtime</scope>
       </dependency>
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • 第1章 Maven 介绍 什么是 Maven 什么是 Maven Maven 的正确发音是[ˈmevən],而不是...
    强某某阅读 2,358评论 0 25
  • 1 为什么使用Maven这样的构建工具 【Why】 1.1 一个项目就是一个工程 如果项目非常...
    coder_girl阅读 489评论 0 1
  • 一、为什么使用Maven这样的构建工具【why】 ① 一个项目就是一个工程 如果项目非常庞大,就不适合使用pack...
    问题_解决_分享_讨论_最优阅读 1,235评论 0 16
  • 匹配到一个不靠谱的cp是什么样的感受,心累,让我顺利玩个游戏这么难的嘛?蓝瘦。 小哥哥竟然退学了,是什么操作。自己...
    littlegirls阅读 401评论 0 0
  • 在《完美母女关系的秘密》这本书中,封面上吸引人的一句话让我决定选择了它:做一个离开母亲也能过得很好的人,才是对母亲...
    张泊宁阅读 261评论 0 0