> 文章列表 > Maven笔记1

Maven笔记1

Maven笔记1

Maven概述
1、为什么要使用Maven?
    在以往的开发过程中,第三方类库依赖需要我们手动引入,因此前期需要花费大量的时间和精力,去引用相关列库。而且一旦缺少某个类库依赖的jar包,就会导致项目编译失败。为了解决这个问题Maven应运而生。
    Maven时apache旗下的一个纯java开发的开源项目。专门用作帮助开发人员构建项目和管理这些错综复杂的依赖,我们只需要告诉Maven需要用到的依赖有哪些,Maven就会自动帮我们去下载并管理好这些依赖,大大提升了开发人员的效率。
    Maven最常见的使用场景是:【Maven的作用】
        管理项目的依赖:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题。
            管理jar包
        快速构建项目:提供标准的、跨平台的自动化项目构建方式。
            Maven的构建生命周期阶段Maven提供了很多插件,插件来帮助我们完成。
        打包编译项目:
    Maven统一了开发结构:提供标准的、统一的项目结构(包括目录结构...)。
        src 【放源码】
            main 【项目主程序】
                java 【主程序的Java代码】
                resources 【主程序的配置文件】
            test 【项目测试程序】
                java 【测试程序源代码】
                resources 【测试程序配置文件】
1.1、Maven主要包括三部分:
    第一:项目对象模型(pom.xml)
        Maven是Java编写的Maven管理的东西多是靠面向对象的方式来管理的。
        所以一个项目就是一个对象,对象都有自己的属性和方法,
        每个项目对象的属性和方法都写在pom.xml文件当中。
        一个Maven项目对象一个pom.xml文件。
    第二:依赖管理(Dependency)
        依赖管理是控制和管理我们写的项目的第三方依赖库。
    第三:构建生命周期阶段:Maven构建生命周期定义了一个项目构建跟发布的过程。
        一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的
            验证 validate、编译 compile、测试 Test、打包 package
            检查 verify、安装 install、部署 deploy
        插件和构建整过程是相互对应的,一个插件对应多个构建过程,一个构建过程需要使用多个插件
            【比如:编译就是一个构建过程,构建出来的结果就放在target目录中】
        Maven为我们提供了很多插件,插件的作用就是帮助我们完成项目构建跟发布的过程。
2、Maven翻译为“专家”。Maven是apache软件基金会维护的一款自动化构建工具,
    专注服务于java平台的形目构建和依赖管理。
   类似自动化的工具还有Ant、Maven、Gradle
3、构建:项目的构建。
    构建是面向过程的,就是一些步骤,完成项目的编译、测试、运行、打包、部署等。
4、Maven是一个项目管理工具,将项目的开发和管理抽象成一个项目对象模型(POM)。
    POM:Project Object Model,项目对象模型
   项目作为对象来说:对象的属性和对象的行为都有那些呐?
    于是Maven就说:你先去写一个pom.xml的文件,我通过加载这个文件我就知道你的项目信息了。
   pom.xml
5、依赖管理
    pom.xml -->  项目对象模型(POM) <----> 依赖管理(Dependency) --> 本地仓库 --> 私服仓库  --> 中央仓库
   pom.xml:是项目对象模型的配置文件,可以说是规定了项目对象一些属性和行为
   PMO:是项目对象,Maven把整个项目看作是一个对象
   POM和Dependency:之间是双向的,
        说明我们可以使用别人写好的项目,此时别人写好的项目就是我们的项目依赖的资源
        别人也可以使用我们写好的项目,此时我们写好的项目相对于别人的项目就是资源
   本地仓库:依赖管理用到的资源在哪里呐?肯定在自己的计算机上有啊,计算机上保存依赖资源的位置叫做本地仓库
   私服仓库:比如一个公司项目组共有10个人,都用一个人电脑上的依资源吗?肯定不行,那么在这10个人的范围内,还要搭建一个东西,保存公共的信息叫做“私服”。
   中央仓库:私服中的资源来源于中央仓库。我们真正依赖管理的资源最终都是来自于中央仓库的。【依赖管理的东西是从中央仓库拿到的】
6、Maven除了做依赖管理,还可以做项目构建。
    构建生命周期阶段:这个东西在运行的时候,自己是没有功能的,Maven提前做好了一些插件。
        使用这些“插件”可以完成“构建生命周期阶段”构建的这些操作。
    一个构建过程包含这若干个插件,一个插件对应若干个构建过程。【干a工作可能用到插件x,干b工作也可能用到插件,a工作还可能对应y插件(一个工作可能对应多个插件,一个插件也可能完成多个工作)】
    插件是干什么的呐?他最终会给我们产生构建出来的结果,比如说:可能是一个jar包,也可能是一块源代码(源代码虽然是自己写的,但是插件可以帮助我们管理将源代码放到对应的一个位置,或者拷贝出来等操作)。
    一个项目中一个插件通常是不能完成任务的,所以他有多个插件组合在一起,这些插件组合在一起就可以完成不同的事,产出不同的东西。
7、Maven中“项目对象模型”、“依赖管理”、“构建生命周期阶段”,是我们对项目操作过程中对应的内容。
   Maven中的插件:实际上Maven已经棒我们做好了。
   Manen做好了很多个插件,帮我们来完成项目的“构建生命周期阶段”的工作。
8、Maven安装路径:
    bin:下面都是可执行文件
    boot:翻译为“启动”。该目录下的“plexus-classworlds-2.6.0.jar”是Maven的类加载器。【也就是说Maven他要自己管理一套java的运行程序,因为Maven本身是用java做的,所以说他有他自己独立的类加载器(用于加载Maven本身)】
    conf:下面都是配置文件
        logging:目录下面是日志文件
        settings.xml:就是Maven的核心配置文件
    lib:Mavne运行所依赖的jar包(类库)。【maven运行也需要jar包,因为maven使用java写的,Maven做好的东西也都是以jar包的形式存在的】
9、Maven属于绿色版软件解压就可以使用。

Maven的基础概念    (仓库)
1、仓库:用于存储资源,包含何种jar包
    我们计算机在工作的时候,如果需要使用到jar包,那么jar包在哪里呐?
    我们的计算机买回来默认肯定是没有jar包的,那么这样的jar包其实是在云端的一台计算机上保存着的。【那么这台计算机叫做中央服务器,那么对应存储jar包的位置叫做中央仓库】    
    中央仓库现在是谁在维护?Maven自己的开发团队维护着中央仓库,里面放着全世界基本上是99%的jar包,另外1%是一些带有版权的不对外共享,让在中央仓库就相当于直接全面开源了,谁都可以用【例如Oracle的驱动jar包】。【Maven自动下载jar包就是从中央仓库中下载的】
    下载下来的jar包就放在“本地仓库”中。【当我们通过计算机从本地仓库拿东西的时候如果本地仓库中有直接拿到,如果没有那么Maven自动从中央仓库下载】
2、为什么要有私服?
    全世界有这么多开发人员,每个人都有自己的本地仓库,如果每个人需要jar包都去访问中央仓库,那么中央仓库的压力巨大,而且速度很慢。
    如果在“本地仓库”和“中央仓库”之间放一个“私服仓库”,“本地仓库”需要使用jar包的时候去访问“私服仓库”,然后“私服仓库”去“中央仓库”中获取,
    第二个人在需要使用相同的jar包的时候,发现“本地仓库”中没有,然后去“私服仓库”中获取,发现“私服仓库中已经有了,就直接从“私服仓库”中获取了,
    就不用去访问“中央仓库”了,减少了“中央仓库”的压力。
3、“本地仓库”:叫做本地仓库,因为在自己计算机上。
   “私服仓库”和“中央仓库”:叫做远程仓库,因为不在自己计算机上。
4、仓库:用于存储资源,包含各种jar包。
    仓库的分类:
        本地仓库:自己电脑上存储资源的仓库,可以连接远程仓库获取资源。
        远程仓库:非本机电脑上的仓库,可以为本地仓库提供资源。
            中央仓库:Maven团队维护,存储所有资源的仓库。【99%的jar包】
            私服仓库:部门/公司范围内存储资源的仓库,从中央仓库获取资源。
        私服的作用:    
            用于保存具有版权的资源,包含购买或自主研发的jar包【不在中央仓库中的另外1%的jar包】
                中央仓库中的jar包都是开源的,不能存储具有版权的资源
            一定范围内共享资源,仅对内部开放,不对外部共享。
            提高“本地仓库”访问速度。
            减小“中央仓库”的负载压力。
5、

Maven的基础概念    (坐标)    
1、Maven可以做资源管理:在“中央仓库”中放着大量的资源。从Maven仓库创建第一个资源进来,这里边的资源就开始逐渐增加,数量由少到多,资源越来越多,那么在查找资源的时候怎样去查?
    Maven中的坐标用于描述仓库中资源的位置。
    通过这个网址可以查看,在Maven仓库中这就是放资源的,从这个网址上可以手动下载所需要的jar包资源,可以放到本地仓库中待使用。
    https://repo1.maven.org/maven2/
    【这就是中央仓库的地址,可以从这里下载我们需要的资源】
2、Maven坐标的主要组成:
    groupId:定义当前Maven项目隶属于那个组织(通常是域名倒叙,例如:org.mybatis,百度公司的域名是“baidu.com”,倒叙就是“com.baidu”)
    artifactId:定义当前Maven项目名称(通常是模块名称,例如CRM)
        工件id:项目名。
            工件是:项目开发过程中的一个产品部件。【工件就是产品部件的意思】
    version:定义当前项目版本号。
    了解:packaging:定义改项目的打包方式
    总结:组织id,项目id,版本号
3、坐标具体格式怎么些呐?
    https://mvnrepository.com/
        打开网址,直接搜索我们需要的资源,点进去,复制坐标。添加到我们项目中,就可以使用了。
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency> //依赖的jar包,直接从本地仓库中获取,本地没有从私服仓库中获取(Maven自动完成)
            <groupId>junit</groupId> //组织(组织ID)
            <artifactId>junit</artifactId> //项目名(产品ID)
            <version>4.12</version>  //版本号
            <scope>test</scope> //使用范围
        </dependency>  
4、Maven坐标的作用:
    使用唯一标识,唯一性定位资源的位置,通过该标识可以将资源的识别与下载工作交由机器完成。【坐标就是在仓库中定位资源】
5、Maven的坐标就起一个作用,就是在仓库中帮你找到这个资源,坐标不是给程序员用的,而是给maven工具用的,Maven工具会按照你给的这个坐标去查找这个资源、下载这个资源、使用这个资源。
6、Maven配置本地仓库的方式:【下载东西从“远程仓库”下载到“本地仓库”】
    1.打开“MAVEN_HOME(maven安装的根目录)”,中的conf下面的settings.xml文件。
    2.本地仓库默认位置是:Default: ${user.home}/.m2/repository; “${user.home}”代表c盘用户的根目录下
    3.settings.xml文件的第53行“<localRepository>本地仓库路径</localRepository>”复制出来
        “本地仓库路径”的位置填写上新的路径,
        后面Maven在下载东西的话,就下载到了本地仓库新配置的这里。
7、远程仓库配置:【下载东西从远程仓库下载】
    Maven默认连接的仓库的位置是:https://repo1.maven.org/maven2/【中央仓库】
    因为这个服务器在国外,下载速度非常慢。
    因此我们就需要把远程仓库(服务器)的位置修改成国内的阿里的镜像仓库(服务器)。
    也是在settings.xml中配置
    <!--配置具体仓库下的镜像-->
    <mirror>
      <!--此镜像的唯一标识符,用来区分不通过的mirror元素-->
      <id>nexus-aliyun</id>  
      <!--对那种仓库进行镜像,简单的说就是替代那个仓库-->
      <mirrorOf>central</mirrorOf>
      <!--镜像名称-->
      <name>Nexus aliyun</name>
      <!--镜像URL-->
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
8、小结:
    配置本地仓库:资源下到哪里
    配置远程仓库:资源从哪里来

手工制作第一个Maven项目
1、步骤
    1.创建一个空文件夹“project”.
    2.在“project”文件夹中再创建一个“project-java”文件夹【project-java才是要做的maven工程】
    3.在“project-java”文件夹中再创建一个“src”文件夹。
    4.在“src”文件夹内部有两个文件夹:分别是“main”和“test”。
        “main”:用来写程序的
        “test”:用来写测试程序的
    5.在“main”中再创建两个文件夹分别是:“java”和“resources”
        “java”:用来写java源程序的
        “resources”:用来写配置文件的
    6.在“test”中再创建两个文件夹分别是:“java”和“resources”
        “java”:用来写java源程序的
        “resources”:用来写配置文件的
2、目录结构:
    project-java【项目】
        src【源代码】
            main【主程序】
                java【java源程序】
                resources【配置文件】
            test【测试程序】
                java【java源代码】
                resources【配置文件】
3、Maven项目构建命令
    Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔
    mvn compile #编译  【编译完成的项目,输出到与src同级目录的target目录下】
    mvn clean #清理  【执行清理指令,会将target目录删除】
    mvn test #测试 【测试指令生成的测试报告输出到target目录下的“surefire-reports”目录中】
    mvn package #打包 【Maven会把我们自己写的项目打包放到target目录下】
    mvn install #安装到本地仓库  【Maven会把我们自己写的项目安装到本地仓库中】
    执行这些命令都必须在Maven项目的根目录下。就是pom.xml所在的目录。
4、pom.xml文件中写什么?
    <?xml version="1.0" encoding="UTF-8"?>
    <project 
        xmlns="http://maven.apache.org/POM/4.0.0" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <!-- Maven对象模型的版本号,Maven对象就是项目,就是POM文件遵循的版本号-->
      <modelVersion>4.0.0</modelVersion>
        <!--本项目的坐标-->
        <groupId>com.itheima</groupId>
        <artifactId>project-java</artifactId>
        <version>1.0</version>
        <!--项目的打包形式,默认是jar包-->
        <packaging>jar</packaging>
        
      <!--依赖的资源的坐标-->
      <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
      </dependencies>
    </project>
    
junit
1、junit是单元测试。
2、单元测试是针对最小的功能单元编写测试代码。
    java程序的最小的功能单元是方法。
    单元测试就是针对单个Java方法进行测试的。
3、比如我们编写了一个方法,可以再main方法中测试这个方法的运行结果是否正确。为什么要有junit?  
    使用main方法测试的缺点:
        main方法只能有一个,不能把测试代码和逻辑分离。
        没有打印出测试的结果和期望的结果。
    所以需要有一种框架(junit),帮助我们编写测试。 
4、单元测试的好处?
    单元测试可以保证单个方法运行正常。
    如果修改了代码,只需要确保其对应的单元测试通过。
    测试代码本身就可以作为示例代码。
    可以自动化运行所有测试并获得报告。

再IDEA中使用Maven开发第一个项目
1、步骤
  1.首先创建一个新的工程。
  2.打开“Project Structure”,选中project这里是整个项目的设置,也是再这个项目中添加模块的默认设置。先设置sdk为我们自己电脑上安装的jdk。
  3.然后打开“Settings”,搜索“maven”,设置maven的根目录,和maven的核心配置文件的目录。
  4.在空工程中新建一个模块。
  5.在Archetype中设置使用的Maven模板。
    创建java项目使用的模板:[直接输入quickstart搜索]
        org.apache.maven.archetypes:maven-archetype-quickstart.
    创建web项目使用的模板:[直接输入webapp搜索]
        org.apache.cocoon:cocoon-22-archetype-webapp
    在Advanced Settings”中设置本模块的坐标。
        version:
            RELEASE代表完成版
            SNAPSHOT代表开发版
2、运行web项目添加tomcat插件:
    在mvnrepository.com中搜索“tomcat maven”
    搜索结束之后找:“org.apache.tomcat.maven”包点击它
    然后点击“Apache Tomcat Maven Plugin :: Tomcat 7.x”这个就是tomcat插件
    选择插件的版本:复制坐标,放到项目的“pom.xml”文件中
      <build>
        <!--设置插件,这个是所有的插件-->
        <plugins>
          <!--具体配置的插件-->
          <plugin>
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>
          </plugin>
        </plugins>
      </build>
    然后刷新maven,项目的plugins下面就会多一个插件tomcat7,双击该插件,然后点击run运行web项目。
    然后运行成功之后,他就会给我们一个地址“http://localhost:8080/项目名”默认是这样的格式
    我们直接在浏览器上输入地址,就可以得到运行结果。