Maven核心概念

一、Maven工程约定的目录结构【掌握】

  • 约定是大家都遵循的一个规则,约定可以破坏,但没必要

  • 每一个maven项目在磁盘中都是一个文件夹

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LIRrIlsB-1608561410581)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201221164750307.png)]

Hello:根目录,也就是工程名

src:源代码

main:主程序

java:主程序的 java 源码

resources:主程序的配置文件


test:测试程序

java:测试程序的 java 源码

resources:测试程序的配置文件

pom.xml:Maven 工程的核心配置文件。

  • 一般情况下,我们习惯上采取的措施是:约定>配置>编码

maven 的 pom.xml 记录的关于构建项目的各个方面的设置,maven 从 pom.xml 文件开始,按照助约定的工程目录编译,测试,打包,部署,发布项目。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dQ4dPYBO-1608561410584)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201221170232661.png)]

二、mvn compile 编译src/main目录下的所有java文件

1、为什么要下载

maven工具执行的操作需要很多插件(java类型—jar文件)完成的

2、下载什么东西

jar文件—插件—插件是完成某些功能

3、下载的东西存到哪里

默认仓库:(本机仓库)

C:\Users\用户名.m2\repository

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tiihvpcy-1608561410587)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201221172341743.png)]

  • 执行mvn compile,结果是在项目的根目录下会生成一个target文件夹(结果目录),maven编译的java程序,最后的class文件都放在target目录中
按照如下步骤,实现第一个 maven 项目,以 maven 推荐的约定方式创建目录,类文件。
    1.某个目录中创建文件夹 Hello
    2.在 Hello 中创建子目录 src
    3.拷贝 pom.xml 到 Hello 目录和 src 是同级放置的。
    4.进入 src 目录,创建 main, test 目录
    5.进入 main 目录,创建 java,resources 目录。
    6.进入 java 目录,创建目录 com/bjpowernode/
    6.在 com/bjpowernode/目录下创建 HelloMaven.java 文件,定义 int addNumber(int n1,n2){ return n1+n2};
    定义 public static void main(String args[]) { System.out.prinltn(“Hello Manven”); //也可以调用 addNumber()方法 }
    7.进入到 Hello 目录在,执行 mvn compile
    8.进入到 target/classes 目录执行通过命令行执行 java com.bjpowernode.HelloMaven

4、设置本机存放资源的目录位置(设置本机仓库)

①修改maven的配置文件,maven安装目录/conf/settings.xml(先备份settings.xml)

②修改localRepository指定你的目录(不要使用中文目录)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ArBk2xPp-1608561410592)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201221180554340.png)]

三、仓库

1、仓库是什么

仓库是存放东西的,存放maven使用的jar和项目使用的jar

—maven使用的插件(各种jar)

—我们项目的jar(第三方工具)

2、仓库的分类

①本地仓库:个人计算机上的文件夹,来存放各种jar

②远程仓库:在互联网上的,需要使用网络才能访问

1)中央仓库:最权威的,所有开发人员都共享使用的一个集中仓库

http://repo.maven.apache.org:中央仓库地址

2)中央仓库的镜像:中央仓库的备份,在各大洲,重要的城市都会有镜像

3)私服:在公司内部,在局域网中使用,不是对外使用的

3、仓库的使用

  • maven仓库的使用不需要认为参与。

访问顺序:

如果开发人员需要使用mysql驱动—>maven首先查本地仓库—>私服—>镜像—>中央仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5HEUjfRQ-1608561410595)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201221185507425.png)]

四、pom文件(maven的灵魂)【掌握】

pom:项目对象模型

1、坐标:三个元素【掌握】

必须有且是唯一值,在互联网中唯一标识一个项目的

  • modelVersion 标签:

Maven 模型的版本,对于 Maven2 和 Maven3 来说,它只能是 4.0.0

  • groupId标签

组织 id,一般是公司域名的倒写。 格式可以为:

①域名倒写。 例如 com.baidu

②域名倒写+项目名。例如 com.baidu.appolo

  • artifactId标签

项目的版本号。如果项目还在开发中,是不稳定版本,
通常在版本后带-SNAPSHOT
version 使用三位数字标识,例如 1.1.0

https://mvnrepository.com/:搜索使用的中央仓库,使用groupId或artifactId作为搜索条件

groupId 、artifactId 、version 三个元素生成了一个Maven项目的基本坐标;
在众多的maven项目中可以唯一定位到某一个项目。坐标也决定着将来项目在仓库中的路径及名称。

2、packaging

项目打包的类型,可以使 jar、war、rar、ear、pom。

默认是 jar,web应用是war


3、dependencies 与dependency【依赖】【掌握】

  • dependencies 和 dependency

相当于java中的 import

项目中要使用资源的各种说明,比如项目需要使用mysql驱动

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>8.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

4、properties【配置属性】

properties 是 用 来 定 义 一 些 配 置 属 性 的 ,

例 如project.build.sourceEncoding(项目构建源码编码方式),

可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级

    <properties>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
        <junit.version>5.6.2</junit.version>
    </properties>

5、build【构建】

Maven在进行项目的构建时,配置信息,例如指定编译java代码使用的jdk的版本

五、坐标【gav】【掌握】

Maven 把任何一个插件都作为仓库中的一个项目进行管理,用一组(三个)向量组成的坐标来表示。坐标在仓库中可以唯一定位一个 Maven 项目。

  • groupId:组织名,通常是公司或组织域名倒序+项目名
  • artifactId:模块名,通常是工程名
  • version:版本号

groupId、artifactId 和 version 决定项目在仓库中的路径,artifactId 和 version 决定 jar 包的名称

六、依赖【dependency】【掌握】

  • 一个 Maven 项目正常运行需要其它项目的支持,Maven 会根据坐标自动到本地仓库中进行查找。对于程序员自己的 Maven 项目需要进行安装,才能保存到仓库中

  • 不用 maven 的时候所有的 jar 都不是你的,需要去各个地方下载拷贝,用了 maven 所有的 jar 包都是你的,想要谁,叫谁的名字就行。maven 帮你下载。

七、Maven 的生命周期、命令与插件

  • maven的生命周期:

就是maven构建项目的过程,清洁、编译、测试、报告、打包、安装、部署

  • maven的命令:

maven独立使用,通过命令,完成maven生命周期的执行。

maven可以通过命令,来完成项目的清理、编译、测试等

  • maven的插件:

maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类


1、单元测试:用的是junit,junit是一个专门测试的框架(工具)

  • junit测试的内容

测试的是类中的方法,每一个方法都可以是独立测试,方法是测试的基本单位(单元)。

  • 作用

maven借助单元测试,批量的测试你类中的大量方法是否符合预期

  • 使用的步骤

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

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

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

推荐的创建类和方法的提示:

①测试类的名称 是:Test+你要测试的类名

②测试方法的名称 是:Test+方法名称

例如你要测试HelloMaven

—创建测试类TestHelloMaven

@Test
public void testAdd(){
	//测试HelloMaven的add方法是否正确
}

其中testAdd()叫做测试方法,它的定义规则:

①方法是public(必须的)

②方法没有返回值(必须的)

③方法的名称是自定义的(推荐是Test+方法名称)

④在方法上面加注解@Test

2、常用命令

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

3、插件

  • 插件可以在自己的项目中设置,最常使用的是 maven 编译插件。
  • 设置项目使用的 jdk 版本时通过编译插件指定。pom.xml 文件< build >标签来设置
<!--控制配置 maven构建项目的参数设置,设置jdk的版本-->
<build>
    <!--配置插件-->
    <plugins>
        <!--配置具体的插件-->
        <plugin>
            <!--插件名称-->
            <groupId>org.apache.maven.plugins</groupId>
            <!--插件版本-->
            <artifactId>maven-war-plugin</artifactId>
            <!--插件版本-->
            <version>3.3.0</version>
        </plugin>
    </plugins>
</build>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fR3CiIQ1-1608561410597)(C:\Users\PePe\AppData\Roaming\Typora\typora-user-images\image-20201221223046284.png)]

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐