Maven

1. Maven基础概念和配置

Maven是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

1.1 Maven能解决的问题

  1. 依赖管理
  2. 编译代码
  3. 单元测试
  4. 打包项目

1.2 安装与配置

1.2.1 官网下载Maven

官网下载链接

点击apache-maven-3.6.1-bin.zip下载

title

1.2.2 解压

title

1.2.3 配置环境变量

注意:安装maven之前,确保电脑中已安装JDK,如安装Maven3则必须是JDK1.7以上。

新建一个系统变量,变量名:MAVEN_HOME,变量值为你解压的文件路径,例我的路径是:D:\Maven\apache-maven-3.6.1

title

添加到系统路径中:

title

完成后打开cmd输入mvn -v,显示版本信息则配置正确。

title

1.3 本地仓库配置

仓库分三类:本地仓库,远程仓库[私服],中央仓库。

  • 本地仓库:用于存储从远程仓库或中央仓库下载的插件和jar包,项目使用的一些插件或jar包。优先从本地仓库查找,默认本地仓库位置在${user.home}/.m2/repository${user.home}表示windows用户目录。

mavenconf文件夹下的settings.xml文件中配置本地仓库。

title

  • 远程仓库:又叫私服仓库,如果私服仓库存在,且在本地仓库所需的插件或jar包没有的情况下,会从当前仓库下载。
  • 中央仓库:在maven软件中内置一个远程仓库地址http://repo1.maven.org/maven2。它是中央仓库(Central Repository),服务于整个互联网,由Maven官方团队维护,里面存储了非常全面的jar包,包含了世界上大部分主流的开源项目构件。

2. Maven工程的认识

2.1 Maven工程的目录结构

  • 工程目录结构:

title
作为一个Maven工程,它的src目录和pom.xml是必备的。

  • target:项目输出位置,编译后的class文件会输出到此目录。
  • pom.xmlmaven项目核心配置文件。

  • src目录结构:

title

  • 标准src目录结构:

    • src/main/java:存放项目的.java文件。
    • src/main/resources:存放项目资源文件,如spring,hibernate配置文件。
    • src/test/java:存放所有单元测试.java文件,如Junit测试类。
    • src/test/resources:测试资源文件。
  • 运行项目:进入maven工程目录(当前目录有pom.xml),打开cmd,运行mvn tomcat:run命令即可。

3. Maven常用命令

我们可以在cmd中通过一系列的maven命令来对我们的maven工程进行编译、测试、运行、打包、安装、部署。

3.1 compile

compilemaven工程的编译命令,作用是将src/main/java下的文件编译为class文件输出到target目录下。

3.2 test

testmaven工程的测试命令,执行mvn test命令,会执行src/test/java下的单元测试类。

3.3 clean

cleanmaven工程的清理命令,执行mvn clean命令会删除target目录及内容。

3.4 package

packagemaven工程的打包命令,对于java工程执行该命令会打包成jar包,web工程则会打包成war包。

3.5 install

installmaven工程的安装命令,执行该命令会将maven打包成jar包或war包发布到本地仓库。

3.6 Maven指令的生命周期

maven对项目构建过程分为三套相互独立的生命周期,请注意是三套相互独立的。

这三套生命周期分别是:

  1. Clean Lifecycle:在进行真正的构建之前进行一些清理工作。
  2. Default Lifecycle:构建的核心部分,进行编译、测试、打包、部署等等。
  3. Site Lifecycle:生成项目报告、站点,发布站点。

3.7 maven的概念模型

Maven包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

title

  • 项目对象模型:一个maven工程都有一个pom.xml文件,通过该文件定义项目的坐标、项目依赖、项目信息、插件目标等。

  • 依赖管理系统:通过maven的依赖管理对项目所依赖的jar包进行统一管理。

    • 如:项目依赖junit4.9,通过在pom.xml中定义junit4.9的依赖即使用junit4.9,如下所示junit4.9的依赖定义:
    <dependencies>
        <!-- 此项目运行使用junit,所以此项目依赖junit -->
        <dependency>
            <!-- junit的项目名称 -->
            <groupId>junit</groupId>
            <!-- junit的模块名称 -->
            <artifactId>junit</artifactId>
            <!-- junit版本 -->
            <version>4.9</version>
            <!-- 依赖范围:单元测试时使用junit -->
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  • 一个项目生命周期:使用maven完成项目的构建,项目构建包括:清理、编译、测试、部署等过程。maven将这些过程规范为一个生命周期,如下所示:

title

  • 一组标准集合:maven将整个项目管理过程定义一组标准,比如:通过maven构建工程有标准的目录结构,标准的生命周期阶段、依赖管理和标准的坐标定义等。
  • 插件(plugin)目标(goal):maven管理项目生命周期过程都是基于插件完成的。

4. IDEA开发maven项目

4.1 IDEA的maven配置

打开-->File-->Settings,搜索maven,配置如下内容:

title

4.2 在IDEA中创建一个mavenweb工程

新建工程,选择IDEA提供好的maven的web工程模板

title

点击Next填写项目信息

title

点击Next,配置相关属性,此处不做改动。

title

再点击Next选择项目所在目录,最后点击Finish,等待项目构建。显示如下信息则构建成功。

title

最终目录结构并不完整,需手动补齐。手动添加src/main/java目录,将java目录设置为Sources Root

4.2.1 创建一个Servlet

package com.zero.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/hello.jsp").forward(request,response);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

4.2.2 配置pom.xml

此时编译器会提示servlet相关包不存在,需要在pom.xml中添加坐标。添加jar包坐标时,还可指定该jar包的作用范围。

<dependencies>
<!--    放置项目运行所依赖的jar包-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

依赖范围表:

依赖范围 编译时有效 测试时有效 运行时有效
compile Y Y Y spring-core
test - Y - Junit
provided Y Y - servlet-api
runtime - Y Y JDBC驱动
system Y Y - 本地的,Maven仓库之外的类库

scope范围依赖小结:

  • 默认引入的jar包使用compile[默认范围,可不写,编译、测试、运行都有效]
  • servlet-api、jsp-api使用provided[编译、测试有效,运行时无效,防止和tomcat下jar包冲突]
  • JDBC驱动包使用runtime[测试、运行有效]
  • Junit使用test[仅测试有效]

依赖范围由强到弱的顺序是:compile>provided>runtime>test

4.2.3 运行

点击M图标,输入tomcat7:run运行maven项目。

title

4.2.4 配置断点调试

在项目配置中添加maven项目,设置操作命令。

title
点击小虫子,即可启动debug模式。

title

5. 总结

5.1 maven仓库

  1. maven仓库的类型有哪些?
  2. maven工程查找仓库的流程是什么?
  3. 本地仓库如何配置?

5.2 常用的maven命令

  • compile:编译
  • clean:清理
  • test:测试
  • package:打包
  • install:安装

5.3 坐标定义

pom.xml中定义坐标,内容包括:groupId、artifactld、version,示例如下:

<!--项目名称,定义为组织名+项目名,类似包名-->
<groupId>com.zero.maven</groupId>
<!--模块名称-->
<artifactId>maven-first</artifactId>
<!--当前项目版本号,snapshot为快照版本即非正式版本,release为正式发布版本-->
<version>1.0-SNAPSHOT</version>
<!--打包类型-->
<packaging>war</packaging>
    <!--
        jar:执行package会打包成jar包
         war:执行package会打包成war包
        pom:用于maven工程的继承,通常父工程设置为pom
    -->

5.4 pom基本配置

pom.xmlMaven项目的核心配置文件,位于每个工程的根目录,基本配置如下:

<project>文件的根节点</project>
<modelversion>pom.xml使用的对象模型版本</modelversion>
<groupId>项目名称,一般写项目的域名</groupId>
<artifactld>模块名称或子项目名</artifactld>
<version>产品的版本号</version>
<packaging>打包类型,有jar、war、pom等</packaging>
<name>项目的显示名,常用于Maven生成的文档</name>
<description>项目描述,常用于Maven生成的文档</description>
<dependencies>项目依赖构件配置,配置项目依赖构件的坐标</dependencies>
<build>项目构建配置,配置编译、运行插件等</build>

  转载请注明: Zero的博客 Maven

 上一篇
旅游网项目01 旅游网项目01
1. 前言为了巩固web基础知识,提升综合运用能力,故编写此项目,以做练习。 今日内容为登录注册内容。 2. 技术选型2.1 Web层 Servlet:前端控制器 html:视图 Filter:过滤器 BeanUtils:数据封装 Jac
2019-07-21
下一篇 
Redis数据库 Redis数据库
RedisRedis是一款高性能的NOSQL系列的非关系型数据库,完全开源免费的数据库,key-value型数据库,遵守BSD协议。 1. 基本概念1.1 什么是NOSQLNoSQL(NoSQL = Not Only SQL),意即“不仅
2019-07-14
  目录