Maven初步学习
一.Maven简单介绍
1.1 软件构建过程
- 清理
mvn clean
- 编译
mvn compile
- 测试
mvn test
- 报告
- 打包
mvn package
- 安装
mvn install
- 部署
mvn deploy
1.2 Maven核心概念
①POM
②约定的目录结构
③坐标
④依赖管理
⑤仓库管理
⑥生命周期
⑦插件和目标
⑧继承
⑨聚合
1.3 安装Maven环境
需要先安装JDK,因为maven本身就是用java编写
下载并解压maven安装程序 传送门
配置Maven的环境变量
MAVEN_HOME=d:/apache-maven-3.3.9 或者 M2_HOME=d:/apache-maven-3.3.9
path=%MAVEN_HOME%/bin;或者%M2_HOME%/bin;
- 验证是否安装成功
mvn -v
二.Maven的核心概念详解
2.1 Maven工程约定目录结构
2.1.1 目录结构
根目录:工程名
|—src:源码
|—|---main:存放主程序
|—|---|—java:java源码文件
|—|---|—resources:存放框架的配置文件
|—|---test:存放测试程序
|—|---|—java:java源码文件
|—|---|—resources:存放框架的配置文件
|—pop.xml:maven的核心配置文件
2.1.2 设置本机存放资源的目录位置
-
修改maven的配置文件,maven安装目录/conf/settings.xml
先备份一下(CV大法) -
修改
<localRepository>
//默认是注释状态
修改为<localRepository>D:/ProgramFiles/Maven/Maven_Repository</localRepository>
2.2 POM文件
2.2.1 POM介绍
即Project Object Model项目对象模型。Maven把一个项目的结构和内容抽象成一个模型,在xml文件中进行声明,以方便进行构建和描述,pom.xml是Maven的灵魂
2.2.2 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> //Maven的版本
//以下三者是项目的唯一坐标
<groupId>com.echochao</groupId> //组织id,一般域名倒写
<artifactId>project01-echochao-maven</artifactId> //项目名称
<version>1.0-SNAPSHOT</version> //项目版本号,如果是不稳定版本带-SNAPSHOT
<packaging>jar</packaging>
//packing,项目打包类型,可以是 jar、 war、 rar、 ear、 pom,默认是 jar
<name>project01-echochao-maven</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
//配置属性,是用来定义一些配置属性的,例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF 8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
//依赖管理
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
//构建,例如设置编译插件的jdk版本
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
2.3 仓库
2.3.1 仓库的概念
存放maven使用的jar 和 我们项目使用的jar
2.3.2 仓库存放
1.Maven的插件,插件也是一些 jar,这些 jar可以完成一定的功能
2.我们自己开发项目的模块
3.第三方框架或工具的 jar包
2.3.3 仓库的类别
-
本地仓库:就是你的个人计算机上的文件夹,存放各种jar
-
远程仓库, 在互联网上的,使用网络才能使用的仓库
- 中央仓库,最权威的, 所有的开发人员都共享使用的一个集中的仓库
- 中央仓库的镜像:就是中央仓库的备份, 在各大洲,重要的城市都是镜像
- 私服,在公司内部,在局域网中使用的,不是对外使用的
2.4 生命周期
maven的生命周期就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署
2.5 常用命令
2.5.1 常见命令
-
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容器中 )。
注意:执行以上命令必须在命令行进入pom.xml所在目录!
2.5.2 命令测试
-
单元测试(测试方法):用的是junit, junit是一个专门测试的框架(工具)。junit测试的内容: 测试的是类中的方法, 每一个方法都是独立测试的。方法是测试的基本单位(单元)。
-
使用步骤
-
加入依赖,在pom.xml加入单元测试依赖
<!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
-
在maven项目中的src/test/java目录下,创建测试程序
-
推荐的创建类和方法的提示:
1.测试类的名称 是Test + 你要测试的类名
2.测试的方法名称 是:Test + 方法名称 -
例如测试HelloMaven ,
创建测试类 TestHelloMaven
@Test public void testAdd(){ 测试HelloMaven的add方法是否正确 }
-
其中testAdd叫做测试方法,它的定义规则
- 方法是public的,必须的
- 方法没有返回值, 必须的
- 方法名称是自定义的,推荐是Test + 方法名称
- 在方法的上面加入 @Test
-
-
-
mvn compile
编译main/java/目录下的java 为class文件, 同时把class拷贝到 target/classes目录下面把main/resources目录下的所有文件都拷贝到target/classes目录下
三.IDEA中Maven
3.1 设置Maven
3.2 新建项目
3.3 日常使用
四. 依赖管理
4.1 依赖的范围
compile(默认) | test | provided | |
---|---|---|---|
对主程序是否有效 | 是 | 否 | 是 |
对测试程序是否有效 | 是 | 是 | 是 |
是否参与打包 | 是 | 否 | 否 |
是否参与部署 | 是 | 否 | 否 |
五. 常见设置
5.1 全局变量
在Maven的 pom.xml文件中, 用于定义全局变量, POM中通过 ${property_name}的形式引用变量的值。
定义全局变量:
<properties> <spring.version>4.3.10.RELEASE</spring.version> </properties>
- 引用全局变量
<dependency> <groupId>org.springframework</groupId> <artifactId>spring context</artifactId> <version>${spring.version}</version> </dependency>
5.2 指定资源位置
src/main/java和 src/test/java 这两个目录中的所有 *.java文件会分别在 comile和 test comiple阶段被编译,编译结果分别放到了 target/classes和 targe/test classes目录中,但是这两个目录中的其他文件都会被忽略掉,如果需要把 src目录下的文件包放target/classes目录,作为输出的 jar一部分。需要指定资源文件位置。以下内容放到标签中。
设置代码
<build> <resources> <resource> <directory>src/main/java</directory><!--所在的目录--> <includes><!--包括目录下的.properties,.xml 文件都会扫描到--> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <!—filtering 选项 false 不启用过滤器, *.property 已经起到过滤的作用了 --> <filtering>false</filtering> </resource> </resources> </build>
报错集合
1.第一次使用 mvn compile
结合网上查阅资料,是由于文件未完全关闭导致。用notepad++查看文件时,关闭后文件还保持打开的状态,在应用内关闭后在关闭应用即可