Maven相关的概念
maven 资源仓库:https://mvnrepository.com/
mybatis (教程)中文网:https://mybatis.net.cn/
什么是Maven
Maven是项目进行模型抽象,充分运用的面向对象的思想,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。
说白了: Maven是由Apache开发的一个工具用来管理java项目(依赖(jar)管理, 项目构建, 分模块开发 ).
Maven的作用
依赖管理: maven对项目的第三方构件(jar包)进行统一管理。向工程中加入jar包不要手工从其它地方拷贝,通过maven定义jar包的坐标,自动从maven仓库中去下载到工程中。
项目构建: maven提供一套对项目生命周期管理的标准,开发人员、和测试人员统一使用maven进行项目构建。项目生命周期管理:编译、测试、打包、部署、运行。
maven对工程分模块构建,提高开发效率。 (后面Maven高级会涉及)
小结
Maven是Apache开发的一个项目管理工具. 用来管理java项目的
Maven的作用
-
依赖(jar)管理
-
项目构建
-
分模块开发
Maven仓库和坐标
Maven的仓库
仓库名称 | 作用 |
---|---|
本地仓库 | 相当于缓存,工程第一次会从远程仓库(互联网)去下载jar 包,将jar包存在本地仓库(在程序员的电脑上)。第二次不需要从远程仓库去下载。先从本地仓库找,如果找不到才会去远程仓库找。 |
中央仓库 | 仓库中jar由专业团队(maven团队)统一维护。中央仓库的地址:https://mvnrepository.com/ |
远程仓库 | 在公司内部架设一台私服,其它公司架设一台仓库,对外公开。 |
Maven的坐标
Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。坐标的定义元素如下:
- groupId:项目组织唯一的标识符,实际对应JAVA的包的结构 (一般写公司的组织名称 eg:com.execise,com.alibaba)
- artifactId: 项目的名称
- version:定义项目的当前版本
例如:要引入druid,只需要在pom.xml配置文件中配置引入druid的坐标即可:
<!--druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
小结
仓库(本地仓库,中央仓库,远程仓库(私服))
-
先从本地仓库找
-
如果有, 就直接获得使用
-
如果没有, 从中央仓库找, 自动的下载到本地仓库
-
通过坐标从仓库里面找到对应的jar使用
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
Maven的安装
下载Maven
安装Maven
将Maven压缩包解压,即安装完毕
Maven目录介绍
配置环境变量
进入环境变量
配置MAVEN_HOME和Path
配置本地仓库
将软件文件夹中的Repository解压
配置本地仓库
在maven的安装目录中conf/ settings.xml文件,在这里配置本地仓库
示例代码:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 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>E:/source/04_Maven/repository_pinyougou</localRepository>
配置国内镜像
默认情况下,maven会去它自己的仓库(中央仓库)里面下载jar包,由于仓库在国外,所以下载会比较慢。一般会配置成国内的镜像,比如:阿里云的镜像
在setting.xml文件中的标签中追加以下内容即可
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
测试Maven安装成功
打开cmd本地控制台,输入mvn -version
小结
注意事项
-
Maven安装包
和仓库
都需要解压到一个没有中文和空格的目录下(建议解压到不同的目录) -
配置
-
MAVEN_HOME 配置到Maven的解压目录
-
Path 配置到bin目录
-
-
在
apache-maven-3.3.9\conf\settings.xml
配置本地仓库
IDEA集成Maven
配置Maven
配置参数(创建工程不需要联网,解决创建慢的问题) -DarchetypeCatalog=internal
配置默认Maven环境
每次创建Maven工程的时候,总是需要重新选择Maven配置信息,那是因为默认的Maven环境不是我们当前的maven环境,所以需要配置。配置流程如下图:
选择默认的配置
进入配置
配置参数(创建工程不需要联网,解决创建慢的问题) -DarchetypeCatalog=internal
重启IDEA, 就可以生效了
小结
配置默认Maven环境 目的: 为了下次创建的时候 不需要再选择Maven了, 使用的就是这个默认环境的
配置三块
-
maven_home
-
Maven的配置文件
-
本地仓库的路径
加了一个优先不依赖网络创建项目
使用IDEA创建Maven工程
创建java工程
java工程目录结构
需要main/java文件夹变成 源码的目录(存放java源码)
需要test/java文件夹变成 测试源码的目录(存放单元测试)
创建resources目录, 变成资源的目录
编写Hello World!
小结
JavaSe工程的骨架
项目的结构
Maven的常用命令
clean命令
清除编译产生的target文件夹内容,可以配合相应命令一起使用,如mvn clean
compile命令
该命令可以对src/main/java目录的下的代码进行编译
test命令
测试命令,或执行src/test/java/下所有junit的测试用例
在test/java目录下创建测试类DemoTest
执行test命令测试
控制台显示测试结果
package命令
mvn package,打包项目
-
如果是JavaSe的项目,打包成jar包
-
如果是JavaWeb的项目,打包成war包
打包后的项目会在target目录下找到
install命令
mvn install,作用:把项目打包后将打出来的包安装在本地仓库 , 仓库里面一般放的是jar包,一般打包出来就是打出来一个jar包,然后把这个jar包放到仓库里面管理起来。
安装完毕后,在本地仓库中可以找到execise_javase_demo的信息
小结
命令作用
-
clean 用来清除编译后的文件(target文件夹里面的)【一般清缓存】
-
compile 编译
-
test 执行单元测试
-
package 打包 (javaSe–>jar, javaweb–>war)
-
install 把项目打包之后安装到本地仓库
生命周期
- 当我们执行了install 也会执行compile test package
依赖管理
导入依赖
导入依赖坐标,无需手动导入jar包就可以引入jar。在pom.xml中使用标签引入依赖。
做项目/工作里面 都有整套的依赖的, 不需要背诵的.
去Maven官网找, 赋值,粘贴. http://mvnrepository.com/
导入junit的依赖
导入junit坐标依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
进行单元测试
import org.junit.Test;
public class DemoTest {
@Test
public void test1(){
System.out.println("test running...");
}
}
导入servlet的依赖
创建Servlet,但是发现报错,原因是没有导入Servlet的坐标依赖
导入Servlet的坐标依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
原有报错的Servlet恢复正常
依赖范围
-
compile 编译、测试、运行,A在编译时依赖B,并且在测试和运行时也依赖
例如:strus-core、spring-beans, C3P0,Druid。打到war包或jar包
-
provided 编译、和测试有效,A在编译和测试时需要B
例如:servlet-api就是编译和测试有用,在运行时不用(tomcat容器已提供)
不会打到war
-
runtime:测试运行有效,
例如:jdbc驱动包 ,在开发代码中针对java的jdbc接口开发,编译不用
在运行和测试时需要通过jdbc驱动包(mysql驱动)连接数据库,需要的
会打到war
-
test:只是测试有效,只在单元测试类中用
例如:junit
不会打到war
-
按照依赖强度,由强到弱来排序:(理解)
compile> provided> runtime> test
小结
坐标不需要背, 做项目时候/工作开发 都有整套的坐标. 如果是导入一些特定, 可以查阅网站,直接拷贝
作用范围
-
compile 编译、测试、打包运行部署 有效 【默认】
-
provided 编译, 测试 有效. 打包运行部署 无效
-
runtime 测试、打包运行部署 有效 编译无效
-
test 只是测试有效,只在单元测试类中用
Servlet,JSP 这类jar 需要加上provided , 因为部署到Tomcat里面. tomcat里面有, 如果没有加上provided , 可能会导致jar 冲突
单元测试的 建议加上test