【Maven 基础知识01】
一、什么是Maven
是一款服务于Java平台的自动化构建工具
二、构建
1、已“java源文件” “配置文件” “JSP” “HTML”作为原材料,去生产一个可以运行的项目的过程就叫构建
(分为三步:编译-->部署-->搭建)
编译:Java源文件(.java文件)-->编译--> class文件 -->JVM执行
部署:一个BS项目最终运行的并不是动态web工程本身,而是这个Web工程“编译后的结果”
2、构建过程中的各个环节
清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
编译;将Java源程序编译成class字节码文件
测试:自动测试,自动调用junit程序
报告:测试程序执行的结果
打包:动态web工程打war包,Java工程打jar包
安装:Maven特定的概念—将打包得到的文件复制到“仓库”中指定位置
部署:将动态web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
三、安装maven核心程序
1、检查JAVA_HOME的环境变量
echo $JAVA_HOME$
/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home$
2、解压maven的核心程序压缩包(注意:放到一个非中文的无空格的路径下)
3、配置Maven相关的环境变量
|-- 配置MAVEN_HOME或M2_HOME
|-- 配置path
(已Mac系统举例,window系统和配置Java的环境变量一样)
1)打开终端输入命令 vim ~/.bash_profile (编辑环境变量配置文件) 2)在环境变量文件中加上如下的配置⬅️export MAVEN_HOME=后面的路径是用自己路径啊!!这是重点 export M2_HOME=/Users/wufq/lidong/apache-maven-3.6.1 export PATH=$PATH:$M2_HOME/bin PS:(可以将文件直接拖拽至终端内文件路径便可显示出来) 3)输入 :wq退出并保存当前文件 4)输入 source .bash_profile,按下Enter键使bash_profile生效。 5)输入 mvn -v,结果显示maven版本即表明配置成功
4、Maven的核心内容
|— 约定的目录结构
为什么要约定这样的目录结构?
已编译为例:maven想要自动进行编译,那么他必须知道Java源文件放在那。也就是说只有按照人家这个目录结构才能找到
|— POM文件
以junit单元测试举例来说明pom文件以及main主程序目录和test目录的作用
1)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"> <modelVersion>4.0.0</modelVersion> <groupId>com.cswu.services</groupId> <artifactId>Chiken</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency> </dependencies> </project>
2)main主目录文件代码
/** * @Author wufq * @Date 2021/1/18 14:23 */ public class ChikenService { public String Hello(String name){ return "Hello:"+name; } }
3)test目录文件代码运用junit来测试main主目录的代码
import org.junit.Test; import static junit.framework.TestCase.assertEquals; /** * @Author wufq * @Date 2021/1/18 16:02 */ public class TestChiken { @Test public void testChiken(){ ChikenService cs = new ChikenService(); String result=cs.Hello("小明"); assertEquals("Hello:小明",result); //assert:断言 } }
通过以上代码的操作可以看出,test目录的测试代码所依赖的Junit包来源于pox文件的引用,同时也表明test测试程序可以对main主程序进行单元测试
文件目录如下图:
|— 坐标
就是用下面三个向量在仓库中唯一定位一个maven工程
1)groupId :公司或组织域名倒序+项目名
<groupId>com.cswu.service</groupId>
2)artifactId:模块名
<artifactId>helloFrides</artifactId>
3)version:版本名
<version>1.0-SNAPSHOT</version>
|— 依赖(最核心)
B工程要用到A工程的内容,B工程就需要依赖A工程的坐标,具体是在B工程的pom文件内引入A的坐标
1)Maven解析依赖信息时会到本地仓库中查找被依赖的jar包
对于我们自己开发的maven工程,使用mvn install命令安装后就可以进入仓库
2)scope依赖的取值范围,分为三个
compile范围依赖:
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:参与
test范围依赖:
对主程序是否有效:无效
对测试程序是否有效:有效
是否参与打包:不参与
典型例子:junit
privided范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与
典型例子:servlet-api.jar
|— 仓库
仓库的分类:
1)本地库:当前电脑部署的仓库,为本地的maven工程提供服务
2)远程库:
私服:架设在当前局域网下,为局域网内的maven工程提供服务
中央仓库:架设在Internet上,为全世界的maven工程提供服务
中央仓库镜像:为中央仓库分担流量
|— 生命周期/插件/目标
各个构建环节执行的顺序
|— 继承
|— 聚合
5、常用Maven命令
1)执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录(与构建过程相关:编译、测试、打包...)
2)常用命令
mvn clean 清理target目录下的之前打好的jar包或者是war包
mvn compile:编译主程序
mvn test-compile:编译测试程序
mvn test:执行程序
mvn package:打包
mvn install:安装
mvn site:生成站点
mvn clean install -DskipTests :跳过测试类编译打包,只会打main程序的包,不会打test程序的包
执行mvn install,会执行前面一系列的动作包括 compile , package , test 等
平时可以用mvn install,而不进行chean节省时间(如果你觉得节省时间多的话),但最保险还是用 mvn clean install 生成最新的jar包或其他包
不想用mvn clean又想保证jar包最新,建议添加 -Djar.forceCreation
参数 -->mvn package -Djar.forceCreation
(这个参数应该是强制创建jar包,所以结果target中的jar包内容被覆盖了,产生了新的jar包。)
==================================
指定package的时候打成一个war包,改成jar,就会被打成jar包。
<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"> ... <packaging>war</packaging> ... </project>