当前位置 博文首页 > 控球强迫症:Maven学习笔记

    控球强迫症:Maven学习笔记

    作者:控球强迫症 时间:2021-06-05 18:22

    1.Maven概念

    Maven 是目前最流行的自动化构建工具,Maven是一款在大型项目开发过程中不可或缺的重要工具。

    1. maven可以管理jar文件
    2. 自动下载jar和他的文档,源代码
    3. 管理jar直接的依赖, a.jar需要b.jar , maven会自动下载b.jar
    4. 管理你需要的jar版本
    5. 帮你编译程序,把java编译为class
    6. 帮你测试你的代码是否正确。
    7. 帮你打包文件,形成jar文件,或者war文件
    8. 帮你部署项目

    其中5.6.7.8属于Maven项目构建的过程,所以Maven不仅可以完成jar包的管理,还能完成项目的构建。

    2.Maven项目构建

    项目构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。maven支持的构建包括有:

    • 清理:把之前项目编译的东西删除,为新的编译代码做准备。
    • 编译: 把java文件编译为class文件,Maven的编译功能是批量的,可以同时把成千上万的文件编译为class。与命令javac不同,javac一次编译一个文件。
    • 测试:maven可以执行测试程序代码,验证你的功能是否正确。同时也是批量操作,即maven可以同时执行多个测试代码,同时测试很多功能。
    • 报告:生成测试结果的文件, 通过报告查看测试是否通过。
    • 打包:如果测试通过,就可以对项目进行打包。打包的含义就是 把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。通常java程序,压缩文件是jar扩展名的。对于web应用,压缩文件扩展名是.war。
    • 安装:在Maven环境下把“打包”生成的jar、war文件安装到本地仓库。
    • 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行

    部署一般采用手动完成,前6个步骤都是通过Maven进行实现。

    3.Maven的核心概念

    • POM:Maven的核心,它是一个文件,名称通常为pom.xml,开发人员通过管理pom.xml可以完成控制maven构建项目的过程以及jar包依赖的管理。

    • 约定的目录结构 : maven项目的目录和文件的位置都是规定的。

    • 坐标 : 是一个唯一的字符串,用来表示资源的。

    • 依赖管理 : 管理项目中可以使用的jar文件。

    • 仓库管理(了解) :资源存放的具体位置。

    • 生命周期 (了解) : maven工具构建项目的过程,就是生命周期。即Maven项目构建的7个步骤就代表Maven的生命周期。

    • 插件和目标(了解):执行maven构建的时候用的工具是插件

    • 继承(后期讲解)

    • 聚合(后期讲解)

    可以使用maven的命令完成相关操作,同时也可以在idea中直接使用maven,代替命令。

    Maven的构建直接看视频即可。

    4.Maven的核心概念详述

    4.1 Maven工程约定的目录结构

    mvn compile:编译src/main/java下的所有java文件,生成class文件,正确执行mvn compile命令的结果是在项目的根目录(Hello)下生成target目录,maven对java文件进行编译,将编译完成的class文件放在target/classes

    4.2 pom文件

    pom在maven中是一个pom.xml文件,该文件是maven的灵魂,maven的项目构建以及管理依赖的功能都是通过编写该文件实现的。

    4.2.1 pom.xml文件的组成

    (1) 坐标

    唯一值, 在互联网中唯一标识一个项目的。坐标由三部分构成

    <groupId>公司域名的倒写</groupId>
    <artifactId>自定义项目名称</artifactId>
    <version>自定版本号</version>
    

    (2) packaging

    打包后压缩文件的扩展名,默认是jar ,web应用是war

    (3) 依赖

    dependenciesdependency ,相当于是 java代码中import

    你的项目中要使用的各种资源说明, 比我的项目要使用mysql驱动
    <dependencies>
    	<dependency>
    		<groupId>mysql</groupId>
    		<artifactId>mysql-connector-java</artifactId>
    		<version>5.1.9</version>
    	 </dependency>
    </dependencies>
    
    先在本地仓库中找mysql文件夹(groupId对应的文件夹),找到后在mysql文件夹中找mysql-connector-java文件夹(artifactId对应的文件夹),最后在mysql-connector-java文件夹中找5.1.9版本对应的文件夹(version对应的文件夹),然后把对应的jar包引入我们的项目中,如果有任意一步没找到对应文件夹,则从中央仓库拉取。
    
    Maven的一个重要作用就是管理jar包,为了一个项目可以构建或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些jar就被称为依赖,使用标签dependency来配置。而这种依赖的配置正是通过坐标来定位的,由此我们也不难看出,maven把所有的 jar 包也都视为项目存在了。
    

    (4) properties

    properties 是用来定义一些配置属性的 , 例 如 project.build.sourceEncoding(项目构建源码编码方式),可以设置为 UTF-8,防止中文乱码。同时也可以设置项目的运行的Java版本。

    <properties>
    	<java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    

    (5) build

    build表示与构建相关的配置,例如设置编译插件的 jdk 版本

    <build>
         配置插件
         <plugins> 
             配置具体的插件
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId> 
                 插件的名称
                 <artifactId>maven-compiler-plugin</artifactId> 
                 插件的版本
                 <version>3.8.1</version> 
                 配置插件的具体信息
                 <configuration> 
                     告诉Maven 我们写的代码需要在jdk1.8下编译
                     <source>1.8</source> 
                     告诉Maven 我们写的代码需要在jdk1.8下运行
                     <target>1.8</target> 
                 </configuration> 
             </plugin> 
         </plugins> 
    </build>
    

    (6) parent

    在 Maven 中,如果多个模块都需要声明相同的配置,例如:groupId、 version、有相同的依赖、或者相同的组件配置等,也有类似 Java 的继承机 制,用 parent 声明要继承的父工程的 pom 配置。

    (7) modules

    在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一 个额外的模块,该模块打包方式为 pom,并且在其中使用 modules 聚合的 其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有 模块,叫 Maven 的聚合。

    4.3 Maven的生命周期和插件

    • Maven的生命周期指的就是maven构建项目的过程,包括清理、编译、测试、报告、打包、安装、部署这几个阶段。这几个阶段都可以通过Maven相对应的命令进行完成。

    • Maven的插件:在Maven执行命令的过程中,真正完成命令对应功能的就是这些插件。这些插件就是一些jar文件。

    4.4 Maven单元测试

    (1)加入依赖,在pom.xml加入单元测试依赖

    <!-- 单元测试 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    

    (2)在maven项目中的src/test/java目录下,创建测试程序。

    推荐的创建类和方法:
    1.测试类的名称:Test + 你要测试的类名(注意类名Test必须大写,否则报错)
    2.测试的方法名称:Test + 方法名称
    
    例如你要测试Hello类中的add方法,则创建测试类TestHello
    @Test
    public void Testadd(){
        测试HelloMaven的add方法是否正确
    }
    其中testAdd叫做测试方法,它的定义规则
    1.方法是public的,必须的
    2.方法没有返回值, 必须的
    3.方法名称是自定义的,推荐是Test + 方法名称
    4.在方法的上面加入 @Test
    

    4.5 Maven常用命令

    Maven可以独立使用,通过以下的命令就可以单独完成maven的生命周期的执行

    • mvn clean:清理(会删除原来编译和测试的目录,即 target 目录,但是已经 install 到仓库里的包不会删除) ,该命令由maven-clean-plugin插件实现。
    • mvn compile:编译主程序(会在当前目录下生成一个 target,里边存放编译主程序之后生成的字节码文件) ,该命令由maven-compiler-plugin插件实现。
    • mvn test-compile:编译测试程序(会在当前目录下生成一个 target,里边存放编译测试程序之后生成的字节码文件)
    • mvn test:测试(会生成一个目录surefire-reports,保存测试结果)
    • mvn package:打包主程序(会编译、编译测试、测试、并且按照 pom.xml 配置把主程序打包生成 jar 包或者 war 包) (该命令生成的jar包只包含src/main目录下的所有文件,test不包含。)
    • mvn install:安装主程序(会把本工程打包,并且按照本工程的坐标保存到本地仓库中)
    • mvn deploy:部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中。 还会自动把项目部署到 web 容器中)。

    注意:执行以上命令必须在命令行进入 pom.xml 所在目录,同时比如你执行mvn test,Maven会自动从上往下帮你执行,因此你不必在执行mvn test-compile等命令。

    5.Maven在IDEA中的使用

    5.1 Maven在IDEA中的配置

    idea中内置了maven ,一般不使用内置的, 因为用内置修改maven的设置不方便。使用自己安装的maven, 需要覆盖idea中的默认的设置。让idea指定maven安装位置等信息
    
    (1)配置当前工程的设置, 
    file--settings ---Build, Excution,Deployment--Build Tools--Maven 
        Maven Home directory: maven的安装目录
        User Settings File :  就是maven安装目录conf/setting.xml配置文件
        Local Repository :    本机仓库的目录位置
    
    --Build Tools--Maven--Runner  
    	VM Option: -DarchetypeCatalog=internal
    	JRE: 你项目的jdk
    
    maven项目创建时,会联网下载模版文件,模版文件比较大, 使用-DarchetypeCatalog=internal,不用下载, 创建maven项目速度快。
    
    (2)配置以后新建工程的设置, file--other settings--Settings for New Project
    

    5.2 使用Maven模板创建项目

    • maven-archetype-quickstart : 普通的java项目
    • maven-archetype-webapp : web工程

    6.Maven依赖的范围

    Maven中的依赖范围利用<scope></scope>标签表示。scope的值有 compile, test, provided ,默认是compile

    scope:表示依赖使用的范围,也就是在maven构建项目的相应阶段中起作用。maven构建项目的过程即生命周期,包括编译,测试,打包,安装,部署过程(阶段)。

    例如junit的依赖范围是 test,表示junit只在测试阶段使用。
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    
    provided的含义在于:在编译、测试阶段需要提供相关的jar包,而在安装部署过程则不需要提供。
    
    bk
    下一篇:没有了