活久见!64 张图带你 Maven 实战通关(一)

简介: 看完本篇文章后相信你对 Maven 的理解能更进一步

Maven 概述


看完本篇文章后相信你对 Maven 的理解能更进一步

常规项目开发存在的问题


通常 Web 项目 开发只会创建一个工程,然后所有的 jar 包都会存放到 WEB-INF/lib 目录下,如下图所示:

10.png

上面的目录结构存在以下问题

  • 一个项目就是一个 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 压缩包解压的位置

11.png


「将 MAVEN_HOME 添加到 path 目录下」

选择 path---编辑---新建---将 %MAVEN_HOME%\bin  添加进去,然后点击确定就可以了

12.png


查看环境变量是否配置成功


打开命令提示符,快捷键 windows + R.输入 mvn -v

如果出现如下 maven 的版本信息,那么就配置成功

13.png


在 eclipse 中集成 Maven 插件


在 eclipse 指定 Maven 插件的位置 : Window->Preferences->Maven->Installations

14.png

指定 conf/settings.xml 的位置,进而指定 Maven 本地仓库的位置

15.png

修改 settings.xml 如下标签的位置即可:自定义路径

16.png



Maven 工程目录介绍


上面我们配置并安装好了 Maven,那么现在我们就来介绍一下如何用 eclipse 创建一个 Maven 工程,然后介绍 Maven 工程的目录结构。


eclipse 创建 Maven 工程


「第一步:File-->New--->Maven Project」

17.png


「第二步:勾上 Create a simple project ,然后点击 next」

18.png


「第三步:填写 Group Id 和 Artifact Id」

groupidartifactId 被统称为坐标 是为了保证项目唯一性而提出的,如果你要把你项目弄到 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  19.png


Maven Java 工程目录结构


我们根据上面的步骤,创建出如下的 maven 工程:

20.png

对每个目录结构的解析如下:

21.png

为什么 maven 工程的目录结构要这样呢?

  • Maven 要负责项目的自动化构建,以编译为例,Maven 要想自动进行编译,那么它必须知道 Java 的源文件保存在哪里,这样约定之后,不用我们手动指定位置,Maven 能知道位置,从而帮我们完成自动编译。
  • 遵循 约定>>>配置>>>编码。即能进行配置的不要去编码指定,能事先约定规则的不要去进行配置。这样既减轻了劳动力,也能防止出错。

「pom.xml 文件」

Project Object Model 项目对象模型,Maven 的核心配置文件,pom.xml,与构建过程相关的一切设置都在这个文件中进行配置。

这个文件非常重要,我们后面会详细讲解。


常用的 Maven 命令



创建 Maven 工程


22.png

在 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>

为什么要这样写,我们后面会详细讲解。


相关文章
|
4月前
|
XML 前端开发 Java
SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
这篇文章是SpringMVC框架的入门教程,详细指导了如何在IDEA中使用Maven和Tomcat创建SpringMVC工程,包括添加依赖、配置web.xml、编写控制器、创建配置文件、配置Tomcat服务器以及进行基本的测试,展示了一个简单的Hello SpringMVC示例。
SpringMVC入门到实战------2、SpringMVC创建实例Hello SpringMVC(maven+tomcat)
|
7月前
|
XML Java Shell
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)(一)
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)
226 1
|
7月前
|
XML Java Maven
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)(二)
【深入浅出Maven开发实战】「入门教程系列」带你零基础学习和开发使用Maven开发工具实战指南(实战技术总结)
127 0
|
6月前
|
存储 搜索推荐 Java
rodert教你学Maven-实战这一篇就够了(上)
rodert教你学Maven-实战这一篇就够了
55 1
 rodert教你学Maven-实战这一篇就够了(上)
|
6月前
|
Java Linux 网络安全
在Linux上搭建Maven仓库的实战教程
在Linux上搭建Maven仓库的实战教程
384 0
|
6月前
|
存储 Java 测试技术
rodert教你学Maven-实战这一篇就够了(下)
rodert教你学Maven-实战这一篇就够了
43 0
|
7月前
|
Java Maven
Maven实战 Item4 -- Maven核心概念_maven junit version(1)
Maven实战 Item4 -- Maven核心概念_maven junit version(1)
|
7月前
|
前端开发 JavaScript Java
Maven实战 Item3 -- Maven项目构建2_构建一个maven2 3项目
Maven实战 Item3 -- Maven项目构建2_构建一个maven2 3项目
|
7月前
|
JavaScript 安全 前端开发
Maven实战 Item2 -- Maven项目构建(手动)_term2 配置maven(2)
Maven实战 Item2 -- Maven项目构建(手动)_term2 配置maven(2)
|
7月前
|
前端开发 Java Maven
Maven实战 Item2 -- Maven项目构建(手动)_term2 配置maven(1)
Maven实战 Item2 -- Maven项目构建(手动)_term2 配置maven(1)