Maven 概述
看完本篇文章后相信你对 Maven 的理解能更进一步
常规项目开发存在的问题
通常 Web 项目
开发只会创建一个工程,然后所有的 jar 包都会存放到 WEB-INF/lib
目录下,如下图所示:
上面的目录结构存在以下问题
- 一个项目就是一个
web 工程
。如果项目比较庞大,那么利用包名 package 来划分模块,显然容易造成混淆而且不利于分工合作; - 项目中需要的 jar 包必须手动复制,粘贴到 WEB-INF/lib 目录下。这会导致每创建一个新的工程就需要将 jar 包重复复制到 lib 目录下,从而造成工作区存在大量重复的文件;
- jar 需要我们手动去官网上或者其他途径下载;
- 一个 jar 包依赖的其他 jar 包,需要自己手动加入到项目中,而且很有可能我们漏掉了某个依赖关系,导致项目运行报错。
那么如何解决这些问题呢?我们的主角 Maven 应运而生了。
什么是 Maven
Maven 读音是 [ˈmevən],也就是霉文
,而不是读马文
。它是一个项目管理和综合工具,Maven 使用标准的目录结构和默认构建生命周期。提供了开发人员构建一个完整的生命周期框架,开发团队可以自动完成该项目的基础设施建设。相信如果对 Maven 没有任何了解的,看了这段话等于没看,不过没关系,后面我们将会逐渐揭开 Maven 的神秘面纱。什么是 Maven,你只需要知道这玩意能简化和标准化项目建设过程。
Maven 的历史
Maven的 最初设计,以简化Jakarta Turbine 项目的建设进程。有几个项目,每个项目包含了稍微不同的 Ant 构建文件。JAR 中检查到 CVS。Apache 组织开发的 Maven 可以建立多个项目,发布项目信息,项目部署。
Maven 的目标
Maven主要目标是提供开发人员
- 项目是可重复使用,易维护,更容易理解的一个综合模型。
- 插件或交互的工具,这种声明性的模式。
❝Maven 项目的结构和内容是在一个 XML 文件中声明,pom.xml 的项目对象模型(POM),这是整个 Maven 系统的基本单元。
❞
Maven 的理念是 「约定优于配置!!!」
开发人员不需要创建构建过程本身,不必知道提到的每一个配置的详细信息。Maven 提供了合理的默认行为的项目。创建一个 Maven 项目时,Maven 创建默认的项目结构。开发者只需要把相应的文件和她需要在 pom.xml 中定义即可。
Maven 的安装和配置
Maven 下载
官网下载地址:http://maven.apache.org/download.cgi
配置 Maven 环境变量
将下载的 maven 压缩包解压到电脑的某个盘符,我这里是 D:\JavaTools\apache-maven-3.3.9
「右键---计算机属性----高级系统设置---高级---环境变量---系统变量----新建」
变量名:MAVEN_HOME
变量值:D:\JavaTools\apache-maven-3.3.9
❝这个值是 maven 压缩包解压的位置
❞
「将 MAVEN_HOME 添加到 path 目录下」
选择 path---编辑---新建---将 %MAVEN_HOME%\bin 添加进去,然后点击确定就可以了
查看环境变量是否配置成功
打开命令提示符,快捷键 windows + R.输入 mvn -v
如果出现如下 maven 的版本信息,那么就配置成功
在 eclipse 中集成 Maven 插件
在 eclipse 指定 Maven 插件的位置 : Window->Preferences->Maven->Installations
指定 conf/settings.xml 的位置,进而指定 Maven 本地仓库的位置
修改 settings.xml 如下标签的位置即可:自定义路径
Maven 工程目录介绍
上面我们配置并安装好了 Maven,那么现在我们就来介绍一下如何用 eclipse 创建一个 Maven 工程,然后介绍 Maven 工程的目录结构。
eclipse 创建 Maven 工程
「第一步:File-->New--->Maven Project」
「第二步:勾上 Create a simple project ,然后点击 next」
「第三步:填写 Group Id 和 Artifact Id」
groupid
和 artifactId
被统称为坐标
是为了保证项目唯一性而提出的,如果你要把你项目弄到 maven 本地仓库去,你想要找到你的项目就必须根据这两个 id
去查找。
groupId 一般分为多个段,这里只说两段
第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。举个apache公司的tomcat项目例子:这个项目的groupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artigactId是tomcat。
ArtifactID 就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。比如我创建一个项目,我一般会将 groupId 设置为 com.ys,com 表示域,ys 是我个人姓名缩写,「Artifact Id」设置为 hellomaven,表示你这个项目的名称是 hellomaven,依照这个设置,你的包结构最好是 com.ys.hellomaven 打头的,如果有个StudentDao,它的全路径就是 com.ys.hellomaven.dao.StudentDao
Maven Java 工程目录结构
我们根据上面的步骤,创建出如下的 maven 工程:
对每个目录结构的解析如下:
为什么 maven 工程的目录结构要这样呢?
- Maven 要负责项目的自动化构建,以编译为例,Maven 要想自动进行编译,那么它必须知道 Java 的源文件保存在哪里,这样约定之后,不用我们手动指定位置,Maven 能知道位置,从而帮我们完成自动编译。
- 遵循 约定>>>配置>>>编码。即能进行配置的不要去编码指定,能事先约定规则的不要去进行配置。这样既减轻了劳动力,也能防止出错。
「pom.xml 文件」
Project Object Model 项目对象模型,Maven 的核心配置文件,pom.xml,与构建过程相关的一切设置都在这个文件中进行配置。
❝这个文件非常重要,我们后面会详细讲解。
❞
常用的 Maven 命令
创建 Maven 工程
在 src/main/java 新建包 com.ys.maven,然后在这个包中创建类 HelloMaven.java
package com.ys.maven; public class HelloMaven { //传入一个字符串并返回 public String Hello(String name){ return name; } }
在 src/test/java 新建包 com.ys.maven,然后在这个包中创建类 HelloTest.java
package com.ys.maven; import junit.framework.Assert; import org.junit.Test; public class HelloTest { @Test public void testHello(){ HelloMaven he = new HelloMaven(); String name = he.Hello("Tom"); //判断 Hello 传入的参数是否是 "maven" Assert.assertEquals("maven", name); } }
pom.xml 文件如下:
<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.ys</groupId> <artifactId>hellomaven</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency> </dependencies> </project>
为什么要这样写,我们后面会详细讲解。