开发环境:
Java JDK 1.8.0
Maven 3.6.3
很多人会有这样的疑问。面对众多工程都会用到maven,它究竟是干什么的?怎么用?为什么到我这里一编译总是报错呢?
简单的来说Maven是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),用来运行在生命周期阶段中插件目标的逻辑。
那么我们应该从何处入手呢?假设我们实现如下类,需要引用一个mysql的jdbc的jar,应该如何操作?
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
public class ConnectionTest {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/university", "USER", "PASS");
}
}
一般做法,去mysql官网搜索 mysql-connector.jar, 然后下载,引用到工程里。这样就可以 import com.mysql.jdbc.Connection;
如果这样做,就没maven什么事儿了。
大家可以发现这样做缺点很多,首先你得找到jar,然后下载,还得引到工程里。然而这一切,都可以交给maven.
1. 安装maven环境。
maven安装的文章很多,就不细说了。装好后记得添加环境变量。
另外最初接触maven建议用命令行方式编译。不要用IDE自带的maven功能。
否则以后你只是记住了点了一下绿色按钮,后面发生了什么,调了哪些命令还是不清楚。
2.配置本地repository
安装好maven后会在相应conf文件夹下找到配置文件,如
D:\Program Files\apache-maven-3.6.3\conf\settings.xml
其中 <localRepository>/path/to/local/repo</localRepository>
默认这个地方是注掉的,说明你的repository是默认路径${user.home}/.m2/repository,建议修改到别的盘符。
因为如果repository很大会占用系统盘空间。
3.去远程仓库找到你想要的jar
进入maven官网,https://search.maven.org/ 搜索你想要的jar,如: mysql connector。
点击版本号,你就会在右边得到如下xml
<dependency>
<groupId>com.github.bj-tydic</groupId>
<artifactId>async-mysql-connector</artifactId>
<version>1.7</version>
</dependency>
其中 groupId是组织名称
artifactId是定义项目模块
version是项目版本
在工程根目录新建pom.xml, 在相应位置配置好刚才的dependency,整体pom文件如下:
<?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>org.example</groupId>
<artifactId>mst3</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.github.bj-tydic</groupId>
<artifactId>async-mysql-connector</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
</project>
4.用maven编译工程
然后激动人心的时刻到了。如果你maven环境配置正确,cd到工程根目录,输入命令:
mvn clean compile -U
注:
clean 先清空target目录
compile 编译工程
-U 是强制检查版本的意思,-U并不是每次都会拉最新的,只有在时间戳落后于私库上的jar的时候才会下载最新。
就可以完成工程的编译。比如如下日志:
Downloading from central: https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/5.1.42/mysql-connector-java-5.1.42.pom
它会指到默认的maven仓库下载对应版本的jar,并引到工程里。
编译完成后,你就会在你的工程下面看到这个jar包了,当然引用jar包就不会报错了。
5.知识点扩展
-
版本库:我们已知类型有三种仓库。
本地仓库,就是你本地 .m2\repository
远程仓库,很多公司都会在内网部署自己的仓库,或者公网上的镜像。
方法是在pom.xml 中dependencies同级别加入如下配置
<repositories>
<repository>
<id>maven-net-cn</id>
<name>Maven China Mirror</name>
<url>http://maven.net.cn/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
镜像,寻找更快的公网地址
在maven配置文件settings.xml中加入
一般国内来讲,连阿里云的镜像还是很快的。配置完后他就会覆盖原来的默认地址 https://repo.maven.apache.org
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
-
Maven命令
除了上文用到的 mvn compile, 还有
mvn clean 清空target目录
mvn package 打包
mvn test 运行单元测试
其实这里大多讲的事依赖管理(Dependency Management System),也是项目用的最多的部分。 理解了依赖管理,maven你已经能理解一半了。
祝大家好运!