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>
    
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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

友情链接更多精彩内容