Maven总结

声明:部分图片来自百战程序员

目录

Maven的作用

Maven的运行原理

Maven工程的类型和结构

Maven工程类型

Maven工程结构

仓库类型

Settings配置文件

安装maven

把maven配置到idea里

maven里的一些标签需要知道这里面需要放什么。groupId,artifactId,version是什么,版本号对应的数字代码什么

jar包的依赖范围

maven的继承

创建聚合项目


重点:web工程的jsp页面默认是访问webapp目录下的页面

我们可以通过几点来对Maven进行总结

Maven的作用

一键构建

我们的项目往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程,这些过程称之为构建。通过Maven工具,可以使用 简单的命令轻松完成构建工作。

依赖管理

传统的Web项目中,我们必须将工程所依赖的jar包复制到工程中,导致了工程的变得很大。如果一个公司具有相同架构的项目有十个,那么就需要将这一份jar包复制到十个不同的工程中,非常浪费资源。

 

Maven的运行原理

传统Web项目中大部分磁盘空间是被jar包占据,而Maven项目中一定没有jar包,那没有jar包的项目是怎么运行的呢?

Maven总结_第1张图片

maven工程中不直接将jar包导入到工程中,而是有一个专门存放jar包的仓库,仓库中的每个jar包都有自己的坐标。maven工程中只要配置jar包坐标即可,运行项目需要使用jar包时,根据坐标即可从maven仓库中拿到jar包即可运行。

 

Maven工程的类型和结构

Maven工程类型

  • POM工程
    POM工程是逻辑工程,Maven并不会对该类型工程做打包处理,这些工程往往不包含具体的业务,而是用来整合其他工程的。
  • JAR工程
    普通Java工程,在打包时会将项目打成jar包。
  • WAR工程
    JAVA Web工程,在打包时会将项目打成war包。

Maven工程结构

接下来我们通过一个WAR工程学习Maven工程的结构

文件目录结构:

Maven总结_第2张图片

  • src:源代码
  • target:编译生成的文件
  • pom.xml:Maven工程配置文件,如坐标信息等。

项目结构:

Maven总结_第3张图片

仓库类型

本地仓库

本地仓库指用户计算机中的文件夹。用来存储从远程仓库或中央仓库下载的jar包,只有下载到本地仓库的jar包才能使用,项目使用jar包时优先从本地仓库查找。

 

远程仓库

远程仓库一般指私服,它是架设在局域网的仓库服务,可以从中央仓库下载资源,供局域网使用,从而减少每个程序员都从中央仓库下载浪费的带宽。

如果项目需要的jar包本地仓库没有,则会去远程仓库下载,下载到本地仓库即可使用。

远程仓库不是必须配置的,如果本地仓库没有jar包,也没有配置远程仓库,则会直接从中央仓库下载。

 

中央仓库

中央仓库是互联网上的服务器,是Maven提供的最大的仓库,里面拥有最全的jar包资源。

如果项目需要的jar包,本地仓库和远程仓库都没有,则会去中央仓库下载,下载到本地仓库使用。

Maven中央仓库访问页面: https://mvnrepository.com/

中央仓库访问速度较慢,我们一般都会配置镜像代理中央仓库的下载请求,如阿里镜像、华为镜像等。

 

Settings配置文件

配置本地仓库

中添加如下标签:

F://repository

配置镜像

由于中央仓库访问速度较慢,可以配置镜像代理中央仓库的下载请求。在下的中添加如下标签即可配置镜像:


  
  nexus-aliyun
  
  central
  
  Nexus aliyun
  
http://maven.aliyun.com/nexus/content/groups/public

配置JDK版本

 

创建maven项目的时候,默认使用的JDK是1.5版本,验证语法、编译、运行时都会按照JDK1.5操作,所以很多小伙伴经常在运行的时候汇报版本太低异常。我本机安装的JDK是JDK11,可以配置maven按照JDK11创建项目。

下的中添加如下标签即可配置JDK版本:


  jdk11
  
    true
    11
  
  
    11
    11
    11
  

安装maven

maven是apache的开源项目,所以如果想要下载maven的话,那么可以直接去apache的官网寻找下载
Apache DownloadsHome page of The Apache Software Foundationhttps://maven.apache.org/download.cgi%E5%8D%B3%E5%8F%AF%E5%AE%8C%E6%88%90%E4%B8%8B%E8%BD%BD

配置环境变量

由于Maven是由Java语言开发的,运行时依赖Java环境,所以要在计算机的环境变量中配置JAVA_HOME

Maven总结_第4张图片

为了更方便的使用Maven命令,需要在环境变量中配置MAVEN_HOME和Path

Maven总结_第5张图片

 

Maven总结_第6张图片

查看版本

打开CMD命令窗口,输入mvn -v,显示Maven版本和Java版本,证明安装成功

Maven总结_第7张图片

 

把maven配置到idea里

idea的设置(Settings)中配置maven插件

Maven home directory就是maven的根目录

User settings file就是Maven的配置文件,它位于maven根目录下conf目录下

Local repository就是本地仓库

Maven总结_第8张图片

 

maven里的一些标签,需要知道这里面需要放什么。groupId,artifactId,version是什么,版本号对应的数字代码什么

parent标签代表父工程(相当于java的继承,但是只能单继承),

dependencies标签代表依赖(相当于java的继承,可通过依赖模拟出多继承),

plugins标签代表插件

groupId:是项目src目录下main目录下java目录下的项目结构,实际对应JAVA的包的结构

Maven总结_第9张图片

 ArtifactId:是项目的名称

Maven总结_第10张图片

Version :是项目的版本号

1.0-SNAPSHOT 。其中1.0是版本号,SNAPSHOT版本代表不稳定、尚处于开发中的版本。而衍生的有Release版本则代表稳定的版本

 

jar包的依赖范围

访问servlet后,发现报500异常,这是为什么呢?

Maven总结_第11张图片

这是由于项目中引入了Servlet和Jsp的jar包,而在项目运行时,Tomcat要使用它自带的Servlet和Jsp的jar包,这样就造成了jar包冲突。但如果项目不引入Servlet和Jsp的jar包,则根本无法通过编译。

此时可以设置依赖的作用范围解决该问题,设置Servlet和Jsp的jar包只在编译期起作用,运行时不起作用,这样不仅可以通过编译,还能在运行时避免jar包冲突。

通过在中添加,可以设置依赖的作用范围,有以下取值:



  javax.servlet.jsp

  jsp-api

  2.2

  provided





  javax.servlet

  javax.servlet-api

  3.0.1

  provided

所以对于Servlet和Jsp依赖,我们添加依赖范围为provided即可。

  • compile
    默认范围。表示该依赖在编译和运行时生效,项目打包时也会将该依赖打包进去。
  • provided
    使用此依赖范围的Maven依赖,编译和测试时有效,但在运行时无效。典型的例子是servlet-api,在运行时Web容器已经提供依赖,就不需要Maven重复地引入一遍。
  • runtime
    runtime范围表明编译时不需要生效,而只在运行时生效。典型的例子是JDBC驱动包,编译时只需要JDK的JDBC接口即可,只有运行项目时才需要具体的JDBC驱动。
  • test
    test范围表明使用此依赖范围的依赖,只在编译和运行测试代码的时生效,程序的正常运行不需要此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。
  • system
    如果有些你依赖的jar包没有Maven坐标的,它完全不在Maven体系中,这时候你可以把它下载到本地硬盘,然后通过system来引用。(不推荐使用)

 

maven的继承

Maven聚合开发_继承关系

Maven中的继承是针对于父工程和子工程。父工程定义的依赖和插件子工程可以直接使用。注意父工程类型一定为POM类型工程

 

多继承

Maven中对于继承采用的也是单继承,也就是说一个子项目只能有一个父项目。但我们可以在配置多继承。写法如下:



  

    

    

      com.itbaizhan

      parent_a

      1.0-SNAPSHOT

      pom

      

      import

    

    

    

      com.itbaizhan

      parent_b

      1.0-SNAPSHOT

      pom

      import

    

  

创建聚合项目

Maven总结_第12张图片

 

 

你可能感兴趣的:(maven,java,intellij-idea,开发语言,jar)