IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 项目的管理工具 ----- Maven -> 正文阅读

[Java知识库]项目的管理工具 ----- Maven

Maven

Javaweb — 现在准备沉淀一下进入框架


Maven


JQuery虽然都说过时了,但是真的还是比JS高明了许多,特别是对于AJAX的简化;而JDK的动态代理则是基于反射实现了动态扩展而不改变原有的功能【但是必须要有接口】

maven是一个辅助的管理项目的工具【just 辅助】;最主要的功能–> 管理依赖(下载管理项目的jar包;Maven Repository: Search/Browse/Explore (mvnrepository.com);在这里面就可以找到;通过gruopId、artifactId、version可以唯一找到一个资源jar包);第二个便是项目的构建(编译、测试、打包、部署)

而其使用方式: 1. 通过命令行窗口使用lib命令完成比如编译命令【mvn -compile】来完成操作 2.配置开发工具使用,比如IDEA、Eclipse,非常简单快捷

Maven

在最开始写java的基础的简单的项目的时候,就会有提示,是否创建Maven,那么什么是Maven呢?

传统的项目 :

  1. 有很多模块、模块之间有关系、手工管理关系,比较繁琐
  2. 需要很多第三方功能,所以需要直到很多jar文件,需要从网络中获取各个jar,比如mysql,servlet等【jar文件中有很多的class类】
  3. 需要管理jar的版本,比如需要5.0,那就不能使用4.0的;因为版本冲突会出现问题
  4. 管理jar文件之间的依赖。比如要使用a.jar,必须使用b.jar中的类,必须要先得到b.jar,然后次啊能使用a.jar;a.jar和b.jar的关系就是依赖,就两者有关系就产生了依赖,比如a.jar依赖b.jar;项目依赖mysql驱动【因此开发项目需要对各jar包之间的依赖关系非常清楚,但这很耗费时间,所以如果能有工具帮忙就好了】

所以需要使用Maven来改进项目

  1. mavaen可以管理jar文件
  2. 自动下载jar和他的文档,源代码
  3. 管理jar直接的依赖,a.jar需要b.jar,maven会自动给下载b.jar
  4. 管理需要的jar的版本
  5. 自动编译程序和测试程序
  6. 帮助打包文件,形成jar文件、或者war文件
  7. 还能够帮助部署项目

这样开发者就只需要写功能代码即可

构建项目

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

  1. 清理 : 将之前项目的编译的文件删除,为新的编译代码做准备
  2. 编译 :把程序源代码编译为执行代码,java—>class文件【这是批量操作,javac一次只能编译一个】
  3. 测试: maven可以只从测试程序代码,验证功能是否正确【批量操作,同时测试多个测试代码,测试多个功能】
  4. 报告 : 生成测试结果的文件,测试是否通过的信息
  5. 打包: 将项目中的所有的class文件,配置文件等所有资源放到一个压缩文件中,如果都是普通的java程序,那么就是jar文件,web应用就是war文件 ---- 一个文件就是一个独立的功能了
  6. 安装 : 将5中生成的压缩文件安装到本机仓库
  7. 部署: 把项目安装好可以执行

软件工程

再介绍这个知识之前,先来提出一个概念:软件工程【刚好下学期有这个课程,到时候会单独再介绍一下的】 日常生活中,有很多的工程项目,比如桥梁工程;工程就是各个行业的从业人员通过总结的规律和方法,以最小的代价做出最大的成效。 所谓的桥梁工程就是人们通过经验和总结得出的 — 用来建造桥梁最高效的方法,这种方法是可复用的。将这种思想抽象到软件领域,就变成了软件工程

软件工程 ---- 为了实现软件的流水线式生产,设计和构建软件时能够有一种规范和工程化的方法就是软件工程

完成一个java项目需要做的工作 :

分析项目的需求、分析功能 ----->设计项目,通过哪些步骤,使用哪些技术,需要多少人,多长的时间—> 组建团队、购置设备、服务器、…… ------> 开发人员需要测试自己的代码、重复多次的工作----> 测试人员进行测试 -----> 有问题返回给开发—>重复过程直到测试代码通过

Maven工具的安装和配置

首先就是在官网下载maven,因为下载的java的版本就很新,所以这里就直接下载的最新版本,如果到时候不兼容再说,下载的网址放到这里: Maven – Download Apache Maven

第二步就是解压缩安装包了;这里将其解压到一个给中文的目录;解压之后就可以发现其约定的目录结构了;真的和tomcat有些类似,下面有bin、boot、cong、lib等文件夹 — bin目录就是程序执行的命令,最主要的就是mvn.cmd;再conf中存放的是配置文件settings;lib中iu是很多的jar文件,maven是用java编写的,所以一定要有JDK才能够正常运行

最后就是要配置环境变量: 在系统的环境中,指定一个MAVEN_HOME的名称,其值为maven的安装路径,不到bin; 之后再在系统路径中增加%MAVEN_HOME%\bin 所谓的配置环境变量的目的就是为了更加方便执行程序的bin中的命令; 如果不配置只能到对应程序的bin目录下打开cmd窗口运行,配置之后就可以直接打开cmd窗口运行,从配置java、Mysql、Tomcat、Maven都是这个目的,先建立一个对应的HOME、路径为程序安装路径,bin的上一级目录; 之后再在路径中配置%?_HOME%/bin就算配置成功了

验证是否配置成功,就在cmd窗口中输入maven的命令, mvn -v

C:\Users\OMEY-PC>mvn -v;
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: D:\Maven\apache-maven-3.8.4
Java version: 16, vendor: Oracle Corporation, runtime: D:\jdk-16
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

需要注意的是,这里一定要要有JDK的路径,不然maven是无法正常执行的

Maven core

POM 【program object model】项目对象模型

<?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.apche.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">		        <modelVersion>4.0.0</modelVersion>
</project>

可以看到这个xml文件的最高级的标签就是project --- 就是将项目给抽象成了一个模型

om.xml是Maven的核心;也就是将管理的项目看作一个模型

POM是一个文件,这个文件的名称为pom.xml;maven将一个项目当作一个模型来使用,通过这个文件可以控制maven构建项目的过程,管理jar的依赖;其中更可以配置各种标签,包括项目的坐标、JDK的版本、编译的encoding

其下由很多重要的标签

基本名称

  • modelVersion : Maven模型的版本,对于maven2和maven3来说,就是4.0.0;就是给项目设定的版本就是4.0
  • groupId : 组织ID,一般是公司域名的倒写,格式可以是域名倒写或者域名倒写+项目名 : 比如com.baidu; com.baidu.appole; per.cfeng.ICQ
  • artifactID: 项目的名称,也就是模块module的名称【最开始创建项目的时候就将一个项目看成一个module】对应的groupId下面的子项目,这也是唯一的
  • version : 项目的版本号,如果项目还在开发中,是不稳定版本,通常就在版本后带-SHAPSHOT; version使用三位数字表示; 1.1.0 ---- 代表项目迭代的版本
  • packaging : 项目打包的类型 ,可以是jar包,war包【web应用】、ear包、pom包,默认是普通的java程序jar包

依赖 : dependencies ---- 管理 和dependency — 从属,依赖, : 项目要使用的各种资源的说明,比如要使用mysql驱动

因为这个pom.xml就是项目对象模型,其中最大的标签就是project;代表就是项目

  • dependencies : 项目管理的所有的从属jar包,也就是依赖,,比如这里可以演示在pom.xml中配置一个mysql驱动 ; 以后就不需要将jar包一个一个导入到项目了,直接使用maven管理即可
<dependcies>
    <!-- 依赖, 相当于在java代码中import配置jar包 -->
	<dependency>
        <!-- 通过标识可以在互联网中唯一标识一个资源 -->
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>8.0.27</version>
	</dependency>
</dependcies>

配置属性

  • properties : 这个标签用来定义一些配置属性的,比如project.build.sourceEncoding【项目的编码方式】,可以设置为UTF-8,防止中文乱码,也可以定义相关构建版本号,便于统一升级;比如Java的版本
<properties>
    <!-- 这里的{jdk_version}填入你的jdk版本,我使用的是openjkd16 -->
    <maven.compiler.target>16</maven.compiler.target>
    <maven.compiler.source>16</maven.compiler.source>
    <!--指定项目的编码方式 -->
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>

构建

  • build: 这个标签用来表示与构建相关的标签,比如设置编译插件的jdk版本,💇?♂上面使用的是properties配置的 — 就是可以配置插件,在下面的插件的地方会介绍使用build的例子

继承

  • parent : 在maven中,如果多个模块(项目)都需要声明使用相同的配置,比如groupId、artifactId、version;有相同的依赖,或者相同的组件配置,也有java类似的java继承机制,用这个标签可以声明要继承的父类工程的pom配置

聚合

  • modules : 在maven的多模块开发中,为了统一构建整个项目的所有模块,可以提供一个额外的模块,该模块的打包方式为pom,在其中使用modules聚合的其他模块,这样通过本模块就可以自动是被模块间的依赖关系构建所有的模块

约定的目录结构 【maven编写项目的常见问题】

maven项目的目录和文件的位置都是固定的,不能随意的创建— Tomcat也具有约定的目录结构,符合Servlet规范;也就是约定的目录结构就是规范,大家都是认可的 src【standard request code】标准要求代码

//比如这里创建一个工程项目Hello

Hello
|---src
|---|---main
|---|---|---java
|---|---|---resources
|---|---test
|---|---|---java
|---|---|---resources
|---pom.xml

从这个结构可以看到:工程根目录下面就是src目录和pom.xml; 在src下面有main和test目录;每个目录下面都有java和resource目录

每一个maven的项目在磁盘中就是一个文件夹(项目);下面的二级目录就是

  • src : code
    • main #防止主程序的目录 主程序的java代码和配置文件
      • java : #放置主程序包和包中的java文件
      • resources#放置主java程序使用的配置文件
    • test : # 放测试代码和文件的【可以没有】 ---- 测试在modelsim中可以看到非常常见
      • java : #放置测试程序包和包中的java文件
      • resources #放置测试java程序使用的配置文件
  • pom.xml maven的核心文件,maven项目必须有

maven执行的时候先进入pom.xml中;之后跳到main中执行主程序,再到test进行测试

使用mvn compile就可以编译项目的src下main的所有的java文件

这里可以演示一下maven管理项目的过程,这里就是使用普通的java程序

这里按照目录结构创建

<?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.apche.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>

<!-- 坐标  组织名,通常是组织名加上项目名;也就是java下面的包  第二个是模块名、工程名;第三个是版本号-->
<!--版本号的后缀意味着项目的不同阶段: - SNAPSHOT:开发中的版本 - RELEASE:正式发布版 - M1,M2:M指里程碑,表示即将发布 - RC:Release Candidate,发布候选 - GA:General Availablity,基本可用版本 -->
<groupId>cfeng</groupId>
<artifactId>maventest</artifactId>
<version>1.0-SNAPSHOT</version>
</project>

上面就是maven的核心文件pom.xml的内容;这里不过多阐释【坐标就是项目的组织名,项目名称,项目的版本】

之后按照约定的目录结构来创建文件夹,创建好之后使用cmd的tree命令来查看文件的结构

PS D:\Maven> tree Hello
D:\MAVEN\HELLO
└─src
    ├─main
    │  ├─java
    │  └─resources
    └─test
        ├─java
        └─resources

这里在main的java目录中创建一个java文件

package cfeng;

public class HelloMaven{
	
	public int add(int n1, int n2) {
		return n1 + n2;
	}

	public static void main(String[] args) {
		HelloMaven hello = new HelloMaven();
		int res = hello.add(10,20);
		System.out.println("10 + 20 = " + res);
	}
} 

然后使用maven命令mvn compile来编译main中所有的java文件;执行后可以发现

[INFO] Scanning for projects...
[INFO]
[INFO] --------------------------< cfeng:maventest >---------------------------
[INFO] Building maventest 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/maven-resources-plugin-2.6.pom (8.1 kB at 6.5 kB/s)
……………………………………

这里最主要就是一个下载过程,第一次编译会下载很久,Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.6/

  • 为什么要进行下载呢?

因为maven是用java编写的,其中就有很多功能插件,需要进行下载才能正常使用;其实就是下载了很多jar文件;这些文件都是下载到本地仓库,这个本地仓库的默认地址是{user_HOME}/.me.repository【repository 仓库】----这里可以修改本地仓库的位置

  • 从哪里下载呢?

https://repo.maven.apache.org : 中央仓库地址,所有的人都会使用这个地址

这里可能出错的地方就是忘记在pom.xml中写JDK的版本

[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project maventest: Compilation failure: Compilation failure:
[ERROR] 不再支持源选项 5。请使用 7 或更高版本。
[ERROR] 不再支持目标选项 5。请使用 7 或更高版本。
[ERROR] -> [Help 1]

这个时候就需要使用 java -version查看JDK的版本,之后再pom.xml中配置version

<properties>
    <!-- 这里的{jdk_version}填入你的jdk版本,我使用的是openjkd16 -->
    <maven.compiler.target>16</maven.compiler.target>
    <maven.compiler.source>16</maven.compiler.source>
</properties>

之后再次编译就可以成功了

D:\Maven\Hello> mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------------< cfeng:maventest >---------------------------
[INFO] Building maventest 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maventest ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maventest ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\Maven\Hello\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.276 s
[INFO] Finished at: 2022-01-03T19:32:56+08:00
[INFO] ------------------------------------------------------------------------

可以看到这就编译成功了,并且耗时很短;但是这里还有一句警告: [WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent! ----- 解决的办法还是再pom.xml中加上标签

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

这样就可以no errors,no warnings

Compiling 1 source file to D:\Maven\Hello\target\classes ------> 将java中的java文件编译所放的位置;也就是生成了一个target文件夹在Hello下面【结果目录】

既然已经编译生成了class文件,那么就可以在classes目录处打开cmd窗口运行代码

PS D:\Maven\Hello\target\classes> java cfeng.HelloMaven
10 + 20 = 30

坐标gay

gay 就是三个标签的总写,groupId,artifactId,version,项目在仓库的位置是用坐标决定的,artifactId和version指明了jar包的名称;三者一起指明了在仓库中的路径

坐标是一个唯一的字符串,用来表示资源 【 不是URI】

在上面的pom.xml中配置的基本信息中: groupId、artifactId、version 就被称为坐标,通过这个三个标签的值就就可以在互联网中唯一标识 一个项目

<groupId>cfeng</groupId>
<artifactId>maventest</artifactId>
<version>1.0-SNAPSHOT</version>

依赖管理【dependencies(管理)----> dependency(依赖从属)】

可以管理项目中可以使用的jar文件; 一个Maven项目的正常运行需要其他项目的支持,maven会根据坐标到本地仓库查找,对于programmer自己的项目要安装才能保存到仓库

不用maven的时候所有的jar都不是可用的,需要从各地进行下载;直接写上坐标,maven会自动帮助下载

<!-- maven引入依赖的方式 -->
 <!-- mysql依赖 -->
    <dependency>
        <!-- 通过标识可以在互联网中唯一标识一个资源 -->
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>8.0.27</version>
	</dependency>
<!--junit单元测试依赖 -->
<dependency>
	<groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
</dependency>

一定要正确书写,不能直接写dependency;需要父标签dependencies;不然会报错 : Unrecognised tag: ‘dependency’

仓库管理

资源存放的位置,就是项目构建中要完成装仓的过程

仓库 : repository是存放东西的,存放maven使用的jar(插件) 和 我们项目使用的jar(第三方驱动:mysql驱动、jackson工具)

Maven有几个重要的仓库

  • 本地仓库: 个人计算机上的文件夹,存放各种jar,就是maven下载的资源等在本机中存放的位置,这个位置默认的是C盘的.me文件下的repository中;但是C盘太小,这个地址是可以修改的,在Maven的conf文件夹下的settings.xml中就可以修改【但是修改要注意备份,因为这种修改是危险操作,事先进行备份】
<!--配置本地仓库 -->  
<!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
<localRepository>D:/Maven/repository</localRepository>
<!-- localRepository就可以指定本地仓库的路径,之间就是本地的路径-->

移动仓库后,重新编译就会再次下载资源【jar包】

  • 远程仓库:在互联网上的,使用网络才能够使用的仓库
    • 中央仓库: 最权威的,所有的开发人员都共享使用的一个集中的仓库: https://repo.maven.apache.org;所有人都会访问,压力大
    • 中央仓库的镜像mirror : 中央仓库的备份,在各大洲、重要的城市都是镜像,先到mirror中 ,找不到菜到中央仓库中寻找
    • 私服 : 在公司内部,在局域网中使用的,不对外使用

仓库的使用:

maven仓库的使用不由programmer参与, 比如开发人员需要使用mysql驱动------> maven就查找本地仓库---->私服---->中央仓库的镜像mirror---->中央仓库; 如果本地仓库没有的,下载之后都会存在于本地仓库【所以仓库会越装越多】

搜索使用的中央仓库Maven Repository: Search/Browse/Explore (mvnrepository.com); 在这里面就可以通过groupId、artifactId作为搜索条件进行搜索、比如搜索mysql的驱动: 搜索之后就可以搜到之前使用的连接器jar包,有各种版本供选择

生命周期

maven项目构建项目的过程: 包括清理、编译、测试、报告、打包、安装、部署

对项目的构建是建立在生命周期的模型上的,它明确定义项目生命周期的各个截断,对于每一个阶段提供相对应的命令;对于programmer来说,无论进行哪个阶段的构建,直接执行相应的命令即可,无需担心前一阶段是否构建,Maven会自动构建

执行某一阶段的命令,会将前面的阶段的命令都执行; 比如测试阶段,就会执行清理、编译【compile和test-compile】

…Maven常用的命令

maven可以单独使用,通过命令,可以完成maven生命周期的执行,完成项目的清理,编译,测试等maven功能的主体就是构建项目,常用的命令有

这些命令都是直接在项目的根目录处使用,也就是包含pom.xml的位置使用

PS D:\Maven\Hello> dir

    目录: D:\Maven\Hello

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          2022/1/3     11:52                src
d-----          2022/1/3     20:31                target
-a----          2022/1/4      9:52           1256 pom.xml
使用cmd命令dir可以看到pom.xml
  • mvn clean : 清理,删除原来编译和测试的目录,也就是target目录,但是已经install到仓库的jar不会删除
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ maventest ---  清理使用的插件,这个功能依赖的就是maven-clean-plugin --- 执行操作后会删除target目录【不是简单放到回收站中】
  • mvn compile : 编译主程序【会在当前目录(项目的根目录)下生成一个target,里面存放着编译主程序之后生成的字节码文件】 main/java
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from central: https://repo.maven.apache.org/maven2/junit/junit/4.13.2/junit-4.13.2.pom    如果本地仓库中没有插件,就会在中央仓库中进行下载,这里就下载了junit

[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maventest ---
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maventest ---  编译所使用的插件 maven-compiler-plugin---编译程序将字节码放到classes   maven-resources-plugin----会将main的resources下的文件拷贝到target的classes下面
  • mvn test-complie : 编译测试程序,会在当前目录下生成一个target,里面存放着编译测试程序之后生成的字节码文件 test/java
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maventest ---
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maventest ---
[INFO] Compiling 1 source file to D:\Maven\Hello\target\test-classes
可以看到test-compile是将编译产生的字节码放到taget下面的test-classes,和主程序的classes相区别
  • mvn test : 测试 【会生成一个目录surefire-reports,保存测试结果】
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maventest ---

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running cfeng.TestHelloMaven
Maven的单元测试,专门测试方法  ------ 这是执行了刚刚test代码中的输出语句【test文件都是void且public】
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.077 sec
            ---》这里表明成功了1个,失败了0个
Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
  • mvn package : 打包主程序 会编译、编译测试、测试、并且按照pom.xml的配置主程序打包生成jar包或者war包
打包的时候观察可以发现执行了之前的编译和测试的步骤

[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ maventest ---  这就是打包所使用的插件

[INFO] Building jar: D:\Maven\Hello\target\maventest-1.0-SNAPSHOT.jar  打包生成了一个jar文件放到了文件夹target下面,方便进行部署

生成的jar包只有src/main目录下的所有的文件,【不包含test下面的文件】
  • mvn install : 安装主程序 会把本工程打包,并且按照本工程的坐标保存到本地仓库中【自己开发项目之间也是存在依赖关系】 ---- 会将这个jar包给放到本地仓库中,这样其他的部门就可以使用; 生成会有前面的gruopId的文件夹【一个.就是一级文件夹】 ---- 在新的项目中就可以通过坐标引用资源了

  • mvn deploy : 部署主程序 把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中,还会自动将项目部署到web容器中

插件

执行maven构建的时候使用的工具就是插件

maven命令执行的时候,真正完成功能的就是插件,所谓的插件就是一些jar文件【一些java类】;maven的项目构建等的命令执行就是依靠的这些插件;比如maven-compiler-plugin; maven-clean-plugin

插件可以在项目中进行设置,最常使用的是maven的插件,设置项目使用jdk版本时通过编译插件指定。在pom.xml文件< build>中设置

<build>
	<plugins>
    	<gruopId>org.apache.maven.plugins</gruopId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
        	<source>1.8</source>  <!--JDK的版本 -->
            <target>1.8</target>
        </configuration>
    </plugins>
</build>

继承和聚合

继承: 在maven中,如果多个模块(项目)都需要声明使用相同的配置,比如groupId、artifactId、version;有相同的依赖,或者相同的组件配置,也有java类似的java继承机制,用这个标签可以声明要继承的父类工程的pom配置

聚合: 在maven的多模块开发中,为了统一构建整个项目的所有模块,可以提供一个额外的模块,该模块的打包方式为pom,在其中使用modules聚合的其他模块,这样通过本模块就可以自动是被模块间的依赖关系构建所有的模块

单元测试框架Junit【测试方法】

junit就是一个专门测试的框架,测试的内容 : 测试的是类中的方法,每一个方法都是独立测试的,方法是测试的基本单位

Maven可以借助借助单元测试插件【工具】批量测试大量方法是否符合预期

使用的步骤:

  1. 在pom.xml中加入单元测试的依赖
  2. 在maven的项目中的src/test/java目录下,创建测试程序 — 推荐的创建类和方法的提示 — 测试的名称: Test + 要测试的类名; 测试的方法的名称: Test + 方法名称【比如要测试HelloMaven】
 TestHelloMaven
     @Test
     public void testAdd(){
     //测试方法是否正确
 }

//testAdd是测试方法,它的定义规则
1. 在方法上面加上@Test
2. 方法没有返回值,必须是void
3. 方法必须是public4. 方法命名就是test + 方法名

这里就将依赖加入到pom中

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

接下来在test/java下面同样新建包,编写测试代码

package cfeng;
import org.junit.Assert;
import org.junit.Test;

public class TestHelloMaven {

	@Test
	public void  testAdd(){
		System.out.println("Maven的单元测试,专门测试方法");
		HelloMaven hello = new HelloMaven();
		int result = hello.add(10,20);
		//验证10 + 20 是否为30,junit提供的方法,专门用来对比结果
		//该方法第一个是期望值,第二个是实际值
		Assert.assertEquals(30,result);
	}//如果两个值相等就是正确的,如果不相等,就抛出异常
}

之后使用maven的命令进行测试代码的编译和运行,在上方的maven命令处已经分享过,这里不赘述📕

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:16:53  更:2022-01-04 13:19:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:16:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码