Maven知识点总结

作者: 小白菜aaa | 来源:发表于2020-10-20 14:31 被阅读0次

    第一章 Maven介绍

    1.1 什么是Maven

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

    • 项目对象模型 (Project Object Model:一个maven工程都有一个pom.xml文件,通过pom.xml文件定义项目的坐标、项目依赖、项目信息、插件目标等。
    • 依赖管理系统(Dependency Management System:通过maven的依赖管理对项目所依赖的jar 包进行统一管理。
    • 一个项目生命周期(Project Lifecycle):使用maven完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven将这些过程规范为一个生命周期。
    • 一组标准集合:maven将整个项目管理过程定义一组标准,比如:通过maven构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。
    • 插件(plugin)目标(goal):maven 管理项目生命周期过程都是基于插件完成的

    1.2 Maven能解决什么问题

    能构建工程,管理jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成Web站
    注:maven构建的项目相较于普通项目,文件的大小要小很多,因为maven构建的项目没有把jar包拷贝到项目(工程)中。

    1.3 Maven的两个核心作用

    1. Maven的依赖管理:Maven把项目所需要得jar包保存在Maven仓库里面,通过在pom.xml文件中添加所需jar包的坐标,在用到这些jar包时,会根据pom.xml中jar包的坐标把jar包引入进来拿去执行
      注:maven中有索引,很大程度上提高了jar包的加载速度,所以可以认为maven仓库的jar包基本跟放在本地的工程文件中再读取出来的速度是一样的。
    2. 项目的一键构建:指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给maven进行管理,使用maven一个命令可以轻松完成整个工作。

    1.4 Maven工程的目录结构

    • src/main/java —— 存放项目的.java文件
    • src/main/resources —— 存放项目资源文件,如spring, hibernate配置文件
    • src/test/java —— 存放所有单元测试.java文件,如JUnit测试类
    • src/test/resources —— 测试资源文件
    • target —— 项目输出位置,编译后的class文件会输出到此目录
    • pom.xml——maven项目核心配置文件
      注意:如果是普通的java项目,那么就没有webapp目录。

    1.5 Maven仓库的分类

    • 本地仓库 :用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。
    • 远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。
    • 中央仓库 :在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由Maven团队自己维护,里面存储了非常全的jar包,它包含了世界上大部分流行的开源项目构件。

    第二章 Maven常用命令

    我们可以在命令提示符(cmd)中的我们的项目路径下,通过一系列的maven命令来对我们工程(项目)进行编译、测试、运行、打包、安装、部署。

    2.1 compile

    • compile是maven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下。
    • cmd进入命令状态,切换到项目所在的文件路径,执行mvn compile,查看 target目录,class文件已生成,编译完成。

    2.2 test

    • test是maven工程的测试命令,作用是执行src/test/java下的单元测试类。cmd命令: mvn test

    2.3 clean

    • clean是maven工程的清理命令,执行 clean会删除target目录及内容。cmd命令: mvn clean

    2.4 package

    • package是maven工程的打包命令,对于java工程执行package打成jar包,对于web工程打成war包。cmd命令: mvn package

    2.5 install

    • install是maven工程的安装命令,执行install将maven打成jar包或war包发布到本地仓库
    • 从运行结果中,可以看出:当后面的命令执行时,前面的操作过程也都会自动执行。

    2.6 Maven指令的生命周期

    maven对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:

    • Clean Lifecycle :清理生命周期。在进行真正的构建之前进行一些清理工作。
    • Default Lifecycle :默认生命周期。构建的核心部分,编译,测试,打包,部署等等。
    • Site Lifecycle :站点声明周期。生成项目报告,站点,发布站点。

    2.7 项目对象模型 (Project Object Model)

    一个maven工程都有一个pom.xml文件,通过pom.xml文件定义项目的坐标、项目依赖、项目信息、插件目标等。

    2.8 依赖坐标定义如下:

    <dependency>
        <!--项目名称,定义为组织名+项目名,类似包名-->
        <groupId>com.ljj</groupId>
        <!-- 模块名称 -->
        <artifactId>hello_maven</artifactId>
        <!-- 当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本 -->
        <version>0.0.1-SNAPSHOT</version>
        <!-- 依赖范围 -->
        <scope></scope>
    </dependency>
    <!-- 打包类型,有jar和war两种 -->
    <packaging >war</packaging >
    
    

    2.9 依赖范围

    • compile:编译范围,指A在编译时依赖B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
    • provided:provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用, provided依赖在编译和测试时需要,在运行时不需要,比如:servlet api被tomcat容器提供。
    • runtime:runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动包。由于运行时需要所以runtime范围的依赖会被打包。
    • test:test范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如:junit。由于运行时不需要所以test范围依赖不会被打包。
    • system:system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。

    2.10 设置jdk编译版本

    需要设置编译版本为1.8,这里需要使用maven的插件来设置,在pom.xml中加入:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    

    2.11 添加tomcat7插件

    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                      <artifactId>tomcat7-maven-plugin</artifactId>
                      <configuration>         
                        <!-- 端口号 -->
                        <port>8888</port>              
                        <!-- 访问路径 -->
                        <path>/</path>
                      </configuration>
                      <version>2.2</version>
            </plugin>
        </plugins>
    </build>
    
    

    此时点击idea最右侧Maven Projects,就可以看到我们新添加的tomcat7插件,双击tomcat7插件下tomcat7:run命令直接运行项目

    2.12 pom基本配置

    pom.xml是Maven项目的核心配置文件,位于每个工程的根目录,基本配置如下:

    <project > :文件的根节点
    <parent>:指定继承的父模
    <modelversion > : pom.xml使用的对象模型版本
    <groupId > :项目名称,一般写项目的域名
    <artifactId > :模块名称,子项目名或模块名称
    <version > :产品的版本号 .
    <packaging > :打包类型,一般有jar、war、pom 等
    <name > :项目的显示名,常用于 Maven 生成的文档。
    <description > :项目描述,常用于 Maven 生成的文档
    <properties>:设置一些属性,通常指定jar包的版本、设置编译版本
    <dependencies> :项目依赖构件配置,配置项目依赖构件的坐标
    <build> :项目构建配置,配置编译、运行插件等。
    
    

    第三章 分模块构建工程[应用]

    3.1 理解继承和聚合

    • 何为继承?
      继承是为了消除重复,如果将dao、service、web分开创建独立的工程则每个工程的pom.xml文件中的内容存在重复,比如:设置编译版本、锁定spring的版本的等,可以将这些重复的配置提取出来在父工程的pom.xml中定义
    • 何为聚合?
      项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,比如:dao、service、web三个工程最终会打一个独立的war运行。
    • 注:通常继承和聚合同时使用。简单理解,继承:创建一个parent工程将所需的依赖都配置在pom中聚合:聚合多个模块运行。

    3.2 什么是依赖传递

    添加springmvc的核心依赖的坐标,项目依赖spring-webmv.jar,而spring-webmv.jar会依赖spring-beans.jar等等,所以spring-beans.jar这些jar包也出现在了我们的maven工程中,这种现象我们称为依赖传递。

    3.3 依赖调解原则

    解决导入多个依赖时版本不一致的问题,即依赖冲突问题。

    • 第一声明者优先原则:在pom文件定义依赖,先声明的依赖为准。
    • 路径近者优先原则:直接在pom中定义spring-beans要比其他依赖传递过来的路径要近

    3.4 运行调试

    • 方法1:在ssm_web工程的pom.xml中配置tomcat插件运行
      运行ssm_web工程它会从本地仓库下载依赖的jar包,所以当ssm_web依赖的jar包内容修改了必须及时发布到本地仓库,比如:ssm_web依赖的ssm_service修改了,需要及时将ssm_service发布到本地仓库。
    • 方法2:在父工程的pom.xml中配置tomcat插件运行,自动聚合并执行
      推荐方法2,如果子工程都在本地,采用方法2则不需要子工程修改就立即发布到本地仓库,父工程会自动聚合并使用最新代码执行。
    • 注意:如果子工程和父工程中都配置了tomcat插件,运行的端口和路径以子工程为准。

    四、把第三方jar包放入本地仓库

    随便找一个jar包测试,可以先CMD进入到jar包所在位置,运行:

     mvn install:install-file -DgroupId=com.alibaba -DartifactId=fastjson -Dversion=1.1.37 -Dfile= fastjson-1.1.37.jar -D
    

    结尾

    本文到这里就结束了,感谢大家看到最后,记得点赞加关注哦,如有不对之处还请多多指正。

    相关文章

      网友评论

        本文标题:Maven知识点总结

        本文链接:https://www.haomeiwen.com/subject/wlgkmktx.html