Maven(一)maven概述

maven概述

  • 一、为什么需要maven?
    • 1. 目前我们会的一些技术
    • 2.目前的技术在开发中的问题
  • 二、maven是什么?
    • 1. 概述
    • 2. 什么是构建?
    • 3. 构建过程的几个主要环节
    • 4. 自动化构建
  • 三、maven怎么用?
    • 1. 首先部署maven的核心程序
      • 检查`JAVA_HOME`环境变量
      • 解压maven核心程序的压缩包
      • 配置MAVEN相关的环境变量
      • 验证
    • 2. 第一个maven程序
      • ① maven的几个核心概念
      • ② 约定的目录结构
      • ③ 第一个maven程序
    • 3. maven的仓库问题
    • 4. 几个常用的maven命令

一、为什么需要maven?

1. 目前我们会的一些技术

Maven 是干什么用的?即使不使用 Maven 我们仍然可以进行 B/S 结构项目的开发。从表述层、业务逻辑层到持久化层 再到数据库都有成熟的解决方案。

Maven(一)maven概述_第1张图片

2.目前的技术在开发中的问题

①一个项目就是一个工程
如果项目非常庞大,就不适合继续使用package来划分模块。最好是每一个模块对应一个工程,利于分工协作。
借助于Maven就可以将一个项目拆分成多个工程。

②项目中需要的jar包必须手动”复制”、"粘贴” 到WEB-INF/lib目录下
带来的问题是:同样的jar包文件重复出现在不同的项目工程中, 一方面浪费存储空间,另外也让工程比较臃肿。
借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程”引用”这个文件接口,并不需要真的把jar包复制过来。

③jar包需要别人替我们准备好,或到官网下载
不同技术的官网提供jar包下载的形式是五花八门的。
有些技术的官网就是通过Maven或SVN等专门的工具来提供下载的。
如果是以不规范的方式下载的jar包,那么其中的内容很可能也是不规范的。
借助于Maven可以以一种规范的方式下载jar包。因为所有知名框架或第三方工具的jar包以及按照统一的规范存放在了Maven的中央仓库中。
以规范的方式下载的jar包,内容也是可靠的。

Tips: "统一的规范"不仅是对IT开发领域非常重要,对于整个人类社会都是非常重要的。

④一个jar包依赖的其他jar包需要自己手动加入到项目中
例如,上传功能中,FileUpload组件 → IO组件。 commons-fileupload-1.3jar依赖于commons-io-2.0.1.jar
如果所有jar包之间的依赖关系都需要程序员自己非常清楚的了解,那么就会极大的增加学习成本。
Maven会自动将被依赖的jar包导入进来。

二、maven是什么?

1. 概述

Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java
开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。

Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta
项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。Maven这个单词的本意是:专家,内行。读音是['meɪv(ə)n]或['mevn]。
在这里插入图片描述

2. 什么是构建?

构建并不是创建,创建一个工程并不等于构建一个项目。要了解构建的含义我们应该由浅入深的从 以下三个层面来看:

①纯 Java 代码 大家都知道,我们 Java 是一门编译型语言,.java 扩展名的源文件需要编译成.class 扩展名的字节码 文件才能够执行。所以编写任何 Java 代码想要执行的话就必须经过编译得到对应的.class 文件。
②Web 工程 当我们需要通过浏览器访问 Java 程序时就必须将包含 Java 程序的 Web 工程编译的结果“拿”到服务 器上的指定目录下,并启动服务器才行。这个“拿”的过程我们叫部署。 我们可以将未编译的 Web 工程比喻为一只生的鸡,编译好的 Web 工程是一只煮熟的鸡,编译部署 的过程就是将鸡炖熟。 Web 工程和其编译结果的目录结构对比见下图:
Maven(一)maven概述_第2张图片
③实际项目 在实际项目中整合第三方框架,Web 工程中除了 Java 程序和 JSP 页面、图片等静态资源之外,还 包括第三方框架的 jar 包以及各种各样的配置文件。所有这些资源都必须按照正确的目录结构部署到服 务器上,项目才可以运行。 所以综上所述:构建就是以我们编写的 Java 代码、框架配置文件、国际化等其他资源文件、JSP 页 面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。 那么项目构建的全过程中都包含哪些环节呢?

3. 构建过程的几个主要环节

  • ①清理:删除以前的编译结果,为重新编译做好准备。
  • ②编译:将 Java 源程序编译为字节码文件。
  • ③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
  • ④报告:在每一次测试后以标准的格式记录和展示测试结果。
  • ⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应 war 包。
  • ⑥安装:在 Maven 环境下特指将打包的结果——jar 包或 war 包安装到本地仓库中。
  • ⑦部署:将打包的结果部署到远程仓库或将 war 包部署到服务器上运行。

4. 自动化构建

既然构建的过程这么的繁琐,这时候就需要用到我们的maven工具了。
Maven(一)maven概述_第3张图片Maven(一)maven概述_第4张图片

三、maven怎么用?

1. 首先部署maven的核心程序

检查JAVA_HOME环境变量

我们需要先配置好java的环境变量。
Maven(一)maven概述_第5张图片

解压maven核心程序的压缩包

Maven(一)maven概述_第6张图片
解压——Maven(一)maven概述_第7张图片

配置MAVEN相关的环境变量

① 配置MAVEN_HOME或者是M2_HOME
Maven(一)maven概述_第8张图片
② 配置path
Maven(一)maven概述_第9张图片

验证

运行mvn -v命令查看maven版本。
Maven(一)maven概述_第10张图片

2. 第一个maven程序

① maven的几个核心概念

在此之前呢,我们有必要知道maven中的核心概念,分别为
①约定的目录结构(重要)
②POM(重要)
③坐标(重要)
④依赖(非常重要)
⑤仓库
⑥生命周期/插件/目标
⑦继承
⑧聚合

接下来我们会在不断的实践中介绍这几个核心概念。

② 约定的目录结构

约定的目录结构对于 Maven 实现自动化构建而言是必不可少的一环,就拿自动编译来说,Maven 必须 能找到 Java 源文件,下一步才能编译,而编译之后也必须有一个准确的位置保持编译得到的字节码文件。

我们在开发中如果需要让第三方工具或框架知道我们自己创建的资源在哪,那么基本上就是两种方式:

  1. 通过配置的形式明确告诉它
  2. 基于第三方工具或框架的约定 Maven 对工程目录结构的要求就属于后面的一种。
    Maven(一)maven概述_第11张图片
    现在 JavaEE 开发领域普遍认同一个观点:约定>配置>编码。意思就是能用配置解决的问题就不编码, 能基于约定的就不进行配置。而 Maven 正是因为指定了特定文件保存的目录才能够对我们的 Java 工程进行 自动化构建。

③ 第一个maven程序

按照上面对目录结构的约定,我们建立第一个maven程序。

  1. 首先新建一个目录,目录名就是工程的名字:
    Maven(一)maven概述_第12张图片

  2. 在目录下新建一个src文件夹,作为我们的源码目录。
    Maven(一)maven概述_第13张图片

  3. 我们在HelloMaven下新建一个pom.xml文件。
    Maven(一)maven概述_第14张图片
    内容如下:

    
    <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.0modelVersion>
    	
    	<groupId>com.veeja.mavengroupId>
    	<artifactId>HelloMavenartifactId>
    	<version>0.0.1-SNAPSHOTversion>
    	
    	<name>HelloMavenname>
    	
    	<dependencies>
    		<dependency>
    			<groupId>junitgroupId>
    			<artifactId>junitartifactId>
    			<version>4.0version>
    			<scope>testscope>
    		dependency>
    	dependencies>
    project>
    
  4. 接下来我们新建main和test文件夹以及它们里面的文件夹。
    Maven(一)maven概述_第15张图片

  5. 编写主程序代码
    在src/main/java/com/veeja/maven目录下新建文件HelloMaven.java,内容如下:

    package com.veeja.maven;
    public class HelloMaven {
           
    	public String sayHello(String name){
           
    		return "Hello "+name+"!";
    	}
    }
    
  6. 编写测试代码
    在/src/test/java/com/veeja/maven目录下新建测试文件HelloTest.java

    package com.veeja.maven;	
    import org.junit.Test;
    import static junit.framework.Assert.*;
    public class HelloTest {
           
    	@Test
    	public void testHello(){
           
    		HelloMaven helloMaven = new HelloMaven();
    		String results = helloMaven.sayHello("veeja");
    		assertEquals("Hello veeja!",results);	
    }
    

3. maven的仓库问题

这里要额外补充一点知识:
①Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身并不包含在Maven的核心程序中。
②当我们执行的Maven命令需要用到某些插件时, Maven核心程序会首先到本地仓库中查找。
③本地仓库的默认位置: [系统中当前用户的家目录]\.m2\repository
④Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央仓库下载。
⑤如果此时无法连接外网,则构建失败。
⑥修改默认本地仓库的位置可以让Maven核心程序到我们事先准备好的目录下查找插件
找到Maven解压目录\conf\settings.xml,找到localRepository标签,
Maven(一)maven概述_第16张图片
把它从注释里取出来,将标签体内容修改为已经准备好了的maven仓库目录中,
例如:

<localRepository>E:\Program Files\apache-maven-3.2.2\RepMavenlocalRepository>

4. 几个常用的maven命令

接下来我们针对上面创建的HelloMaven程序,我们运行几个基本的maven命令:
注意,执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录。

首先是mvn compile:编译主程序。
Maven(一)maven概述_第17张图片
这个命令会创建一个target文件夹,在里面生成一个classes文件夹,以及相应的class文件。

还有mvn test-compile,编译测试程序。
Maven(一)maven概述_第18张图片
这个命令也会在target文件夹里面生成一个test-classes文件夹,生成对应的class文件。

还有mvn package:打包。
Maven(一)maven概述_第19张图片
这个会生成一系列的东西在我们的文件夹下。

最后是mvn clean:清理,会把我们构建产生的一系列文件,删除掉。
Maven(一)maven概述_第20张图片


END.

你可能感兴趣的:(Maven,maven,java)