Maven 是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),反映在配置中,就是一个 pom.xml 文件。是一组标准集合,一个项目的生命周期、一个依赖管理系统,另外还包括定义在项目生命周期阶段的插件(plugin)以及目标(goal)。
当我们使用 Maven 的使用,通过一个自定义的项目对象模型,pom.xml 来详细描述我们自己的项目。
Maven 中的有两大核心:
Maven 是 Java 项目,因此必须先安装 JDK。
Maven 中有一些常见的命令,如果使用 Eclipse 需要手动敲命令,如果使用 IDEA 的话,可以不用命令,直接点点点就可以了。
| 常用命令 | 中文含义 | 说明 |
|---|---|---|
| mvn clean | 清理 | 这个命令可以用来清理已经编译好的文件 |
| mvn compile | 编译 | 将 Java 代码编译成 Class 文件 |
| mvn test | 测试 | 项目测试 |
| mvn package | 打包 | 根据用户的配置,将项目打成 jar 包或者 war 包 |
| mvn install | 安装 | 手动向本地仓库安装一个 jar |
| mvn deploy | 上传 | 将 jar 上传到私服 |
可以直接通过命令来构建一个 Maven 项目,不过在实际开发中,一般使用 Eclipse 或者 IDEA 就可以直接创建 Maven 项目了。
创建命令:
mvn archetype:generate -DgroupId=org.javaboy -DartifactId=firstapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Maven 项目,如果需要使用第三方的控件,都是通过依赖管理来完成的。这里用到的一个东西就是 pom.xml 文件,概念叫做项目对象模型(POM,Project Object Model),我们在 pom.xml 中定义了 Maven 项目的形式,所以,pom.xml 相当于是 Maven 项目的一个地图。就类似于 web.xml 文件用来描述三大 web 组件一样。
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
dependencies>
在 dependencies 标签中,添加项目需要的 jar 所对应的 maven 坐标。
一个 dependency 标签表示一个坐标
团体、公司、组织机构等等的唯一标识。团体标识的约定是它以创建这个项目的组织名称的逆向域名(例如 org.javaboy)开头。一个 Maven 坐标必须要包含 groupId。一些典型的 groupId 如 apache 的 groupId 是 org.apache.
artifactId 相当于在一个组织中项目的唯一标识符。
一个项目的版本。一个项目的话,可能会有多个版本。如果是正在开发的项目,我们可以给版本号加上一个 SNAPSHOT,表示这是一个快照版(新建项目的默认版本号就是快照版)
表示依赖范围。
我们添加了很多依赖,但是不同依赖的使用范围是不一样的。最典型的有两个,一个是数据库驱动,另一个是单元测试。
数据库驱动,在使用的过程中,我们自己写代码,写的是 JDBC 代码,只有在项目运行时,才需要执行 MySQL 驱动中的代码。所以,MySQL 驱动这个依赖在添加到项目中之后,可以设置它的 scope 为 runtime,编译的时候不生效。
单元测试,只在测试的时候生效,所以可以设置它的 scope 为 test,这样,当项目打包发布时,单元测试的依赖就不会跟着发布。
也可以手动控制。手动控制主要是通过排除依赖来实现,如下:
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.1.9.RELEASEversion>
<exclusions>
<exclusion>
<groupId>org.springframeworkgroupId>
<artifactId>spring-coreartifactId>
exclusion>
exclusions>
dependency>
这个表示从 spring-context 中排除 spring-core 依赖。