Skip to content

Maven

maven-logo-black-on-white

Learning-Path-Hireachy

Maven简介

项目开发中的问题

  • jar 包冗余
  • 版本冲突
  • 依赖管理困难

Maven概述

Maven定义

http://maven.apache.org

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.

Maven的作用

  1. 依赖管理

Maven能够帮我们统一管理项目开发中需要的jar包

Dependency-Management

  1. 插件管理

Maven能够帮我们统一管理项目开发过程中需要的插件

Maven相关概念

Learning-Path-Part2

POM【了解】

POM

概念:Project Object Model 项目对象模型,按照面向对象的思想来管理项目,把整个项目抽象成一种对象。项目中的元素就是它的属性。可以在一个 pom.xml 配置文件中管理我们的项目。

  • 项目本身的信息
  • 当前项目打包的类型
  • 当前项目的依赖

Maven坐标【掌握】

用于明确指定依赖的 jar 包

  • groupId

    • com.future-weaver
    • 组织id
  • artifactId

    • a.sample
    • 项目id
  • version

    版本号

    项目或模块的版本号。其中常见的两种后缀:

    Alpha

    测试版本

    Beta

    测试版本

    SNAPSHOT

    快照版本

    RELEASE

    释放版本 - 稳定版

    FINAL

    释放版本 - 稳定版

小结

  • POM

    Project Object Model - 按照面向对象的思想来管理项目

  • 坐标

    • groupId

    组织id,一般是官网的倒写

    • artifactId

    工件id

    项目id

    • version

    版本号

    稳定版:

    • 一个字母都没有
    • RELEASE
    • FINAL

Maven仓库【重点】

Maven-Repository

本地仓库

本地仓库就是一个目录,这个目录被用来存储项目的所有依赖(jar 包),本地仓库供电脑上所有项目使用,Maven 所有的 jar 包都是从中央仓库下载

远程仓库

中央仓库

http://repo1.maven.org/maven2/

http://repo2.maven.org/maven2/

http://central.maven.org/maven2/

第三方仓库

http://mvnrepository.com/

建议查找依赖时使用

http://maven.aliyun.com/nexus/content/groups/public/

私服

在公司内部架设jar包的私有服务器,中央仓库中存放的是通用的jar包。公司自己开发的jar包可以放在公司内部的私服中供企业内部使用,私服仓库中也包含了大量中央仓库的jar包。访问私服仓库比访问中央仓库速度更快,更稳定。

私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。

小结

  • POM

    项目对象模型

  • Maven 坐标【重点】

    • 组织id
    • 项目id
    • 版本号
  • Maven 仓库

    • 本地仓库
    • 远程仓库
      • 中央仓库
      • 第三方仓库
      • 私服

Maven入门

  • 目标

    1. 了解Maven的安装、配置、集成
    2. 掌握Maven的基本使用

Learning-Path-Part3

Maven的下载与安装【了解】

下载

tex
官方网站:http://maven.apache.org/
下载页面:http://maven.apache.org/download.cgi

1536291144066

安装

  • 将压缩包解压至无特殊字符的文件夹内

Maven目录介绍【了解】

  • bin

    脚本目录,mvn.cmd是maven的核心可执行文件

  • boot

    第三方类加载器插件,类似于ClassLoader,用来加载类

  • conf

    配置目录,其中的settings.xml是用于配置本地仓库的核心配置文件

  • lib

    依赖的jar包

Maven环境变量配置【了解】

  • MAVEN_HOME
  • Path
  1. 计算机右键-属性

System-Information

  1. 高级系统设置

System-Property

  1. 环境变量

System-Environment

  1. 新建环境变量 MAVEN_HOME

System-Environment-Maven_Home

  1. 保存环境变量 - MAVEN_HOME

System-Environment-Maven_Home_Expression

  1. 编辑 Path 变量 - 新建 - 指定 MAVEN 的 bin 目录

System-Environment-Maven_Home_Path

Maven配置【了解】

以下三项配置,都需要编辑 Maven 的核心配置文件,即%MAVEN_HOME%\conf\settings.xml

本地仓库配置

xml
<settings>
  <!-- 1. 在settings标签下,新建localRepository标签 -->
  <!-- 2. 在localRepository标签体中,指定本地仓库所在的磁盘位置 -->
  <!-- 3. 本地仓库默认位置为${user.home}/.m2/repository -->
  <!-- 4. ${user.home}为当前用户的文件夹,建议使用 -->
  <localRepository>C:\soft\m2\repository</localRepository>
</settings>

远程仓库配置

远程仓库的配置,可将两个地址,同时写入 settings.xml。当遇到网络环境切换时,利用 xml 注释<!-- XML Comment -->进行切换

  • 阿里云私服

    外网环境使用

xml
<settings>
  <!-- ... -->
  <mirrors>
    <!-- 1. 找到mirrors标签,新建mirror标签 -->
    <!-- 2. 在mirror标签中,指定远程仓库所在位置 -->
    <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus Aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
</settings>

默认JDK版本配置【超纲】

默认情况下,Maven 创建项目使用的 JDK 版本为 1.5。虽不影响使用,但编译项目时会报警告,建议配置默认 JDK 版本。

xml
<settings>
  <!-- ... -->
  <profiles>
    <!-- 1. 找到profiles标签,新建profile标签 -->
    <!-- 2. 在profile标签中,指定JDK版本 -->
    <profile>
      <id>jdk-17</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>17</jdk>
      </activation>
      <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>

        <!-- 编译时的编码 -->
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>

        <!-- 文件拷贝时的编码 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      </properties>
    </profile>
  </profiles>
</settings>

IDEA集成【重点】

配置本地Maven

  1. 打开 default settings

1536322921891

  1. 配置 MAVEN_HOME 和 settings.xml 的路径

1536323155528

配置默认仓库

使用 IDEA 创建 Maven 项目后,默认会去网络中下载一些配置资源。需要设置参数 archetypeCatalog。设置方法如下:将-DarchetypeCatalog=internal 设置到 Maven--Runner--VM Options 中。

1536323356026

tex
参数:-DarchetypeCatalog=internal

配置字符编码

tex
-Dfile.encoding=GBK

或:

tex
-Dfile.encoding=UTF-8

创建Java工程【重点】

使用 Maven 创建的项目可分为 3 种类型:普通java项目web项目maven的父工程。 这三种项目对象的打包方式分别是:jar,war 和 pom。本课程只涉及到普通的 java 项目和 web 项目的创建。

创建步骤

  1. File -> New -> Project

1536323729345

  1. 选择 Maven,下一步

1536323794913

  1. 填写项目的坐标信息

1536324650210

  1. 指定项目名称和路径

IDEA会把项目名中的- 去掉,添加上即可。

1536324797585

Java工程目录介绍

  • src

    • main

      • java

        编写java代码的目录

      • resources

        存放配置文件的目录

    • test

      • java

        编写java测试代码的目录

      • resources

        存储独立于测试环境的配置文件

  • pom.xml

测试

在 java 目录下创建包:com.futureweaver.maven。然后,创建一个 java 类 MavenTest,编写以下代码进行测试:

java
package com.futureweaver.maven;

public class MavenTest {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

运行程序:点击 main 方法左侧的绿色小三角,点击图标1 或者图标2 运行程序:

1536325547012

运行结果:如果控制台上能够正常打印如下信息,则说明工程创建没问题:

1536325628492

创建Web工程【重点】

利用骨架(向导)创建Web工程

image-20190607215524867

  • pom.xml
xml
<?xml version="1.0" encoding="UTF-8"?>

<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.future-weaver</groupId>
  <artifactId>maven-archtype-web</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>maven-archtype-web Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <!-- 以下的配置信息,是maven的插件信息,可以直接删除掉 -->
  <build>
    <finalName>maven-archtype-web</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
  • 手动完善 JavaWeb 的目录结构
    • src
      • main
        • java
        • resources
        • webapp
          • WEB-INF
            • web.xml
      • test
        • java
        • resources

手动创建Web工程

  1. 创建普通 java 项目

参照创建 maven 的 java 项目步骤进行创建。

  1. 配置打包方式

Web 项目的打包方式为 war,打开 Maven 项目的 pom 文件。在项目的坐标信息下添加<packaging>标签,设置打包方式。

1536373704461

【import Changes】

1552707375575

  1. 配置 pom.xml 属性
xml
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>
  1. 配置 webapp 目录和 web.xml

    1. 打开Project Structure视图

    1536373953501

    1. 新增 web.xml 文件

    按照数字图标的顺序操作

    1536373997409

    1. 设置 web.xml 的路径

    点击web.xml后会自动弹出一个窗口设置路径

    1536374162723

    1. 点击 Applay,OK

    1536374230001

    1. 创建完成

    设置完成之后,main目录下会创建webapp - WEB-INF - web.xml

    1536374298208

JavaWeb工程目录介绍

  • src

    • main

      • java

        编写java代码的目录

      • resources

        存放配置文件的目录

      • webapp

        用于存储web资源(jsp、html、js、css)的目录

        • WEB-INF

          • web.xml
    • test

      • java

        编写java测试代码的目录

      • resources

        存储独立于测试环境的配置文件

  • pom.xml

发布web项目

  1. Edit Configurations

1536374514414

  1. 添加 Local Tomcat

1536374604706

  1. 配置 Tomcat

1536374866740

  1. 启动测试

在 webapp 目录下新建 hello.html 文件

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
    <h1>Hello Maven!</h1>
</body>
</html>

启动Tomcat后,访问hello.html。如果能正确访问到hello.html。说明项目创建成功。

1536375126705

Maven深入

  • 目标

    1. 掌握POM文件的编写规则
    2. 了解Maven生命周期的概念;掌握生命周期各命令的含义

    Learning-Path-Part4

pom配置详解【重点】

pom(Project Object Model)指的是项目对象模型,用来描述当前的 maven 项目。使用 pom.xml 文件来实现。

补充

setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;而pom.xml主要描述了项目的Maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。

  • pom.xml

    xml
    <?xml version="1.0" encoding="UTF-8"?>
    <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.future-weaver.maven</groupId>
        <artifactId>maven-web2</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>
    </project>

pom文件详解

  1. <project>

pom文件的根节点

  1. <modelVersion>

声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,目前POM模型版本是4.0.0

  1. <groupId>

项目组织标识符,一般是公司域名倒过来写

  1. <artifactId>

项目标识符,即项目名

  1. <version>

项目的版本号

  1. <packaging>

maven项目的打包方式一般配置jar或者war

依赖导入【重点】

Maven 的一个核心的作用就是管理项目的依赖,引入我们所需的各种 jar 包等。为了能自动化的解析任何一个 Java 构件,Maven 必须将这些 Jar 包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。

使用IDEA工具导入

直接在 pom.xml 中,新建Dependency标签,填入artifactId,Idea 会自动联想

注意,能够自动联想的前提:

  1. 本地仓库已经存在的依赖(将资料中的 repository.zip 解压,存放至磁盘,并指定本地仓库)
  2. 依赖索引能够正常更新(参考《第六部分,附三》)

Idea-Dependency-Auto-Association-1

Idea-Dependency-Auto-Association-2

从远程仓库中获取坐标

如果我们导入的依赖本地仓库中没有,使用 IDEA 搜索就搜索不到了,我们需要从网络中查找这个依赖的坐标,然后将其添加到 pom 文件中。添加完成之后,maven 会帮我们从私服或中央仓库中下载该依赖。

搜索依赖坐标的方法:

将以下坐标复制到 pom 文件中即可:

1536473048664

pom 文件中引入依赖后,会去私服或者中央仓库中下载依赖:如果项目结构的 External Librarites 中出现刚引入的依赖,则说明依赖引入成功。

1536473173756

小结

  • 如果本地仓库当中有的话,那么直接写 artifactId,Idea 会自动联想,包括 groupId 和 version 也会自动联想

    xml
    <dependencies>
        <dependency>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
        </dependency>
    </dependencies>
  • 如果本地仓库当中没有的话,需要从网站当中进行查询

    mvnrepository.com

Maven插件【了解】

  • pom.xml

    xml
    <project ...>
        <build>
            <plugins>
                <!-- 直接在project标签里面编写一个build标签,里面再编写plugins标签,然后再插件粘贴到plugins标签里面 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <port>8080</port>
                        <path>/</path>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>

打开Maven视图

依次打开 View -> Tool Windows -> Maven Projects

1536461075676

打开 IDEA 编辑区右侧Maven Projects,会弹出如下窗口,打开窗口中的 Lifecycle 即可看到相关命令。

1536461166495

Maven官方插件

Maven 官方有两个插件列表

tex
第一个列表的GroupId为org.apache.maven.plugins,这里的插件最为成熟,具体地址为:http://maven.apache.org/plugins/index.html。

第二个列表的GroupId为org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:http://mojo.codehaus.org/plugins.html。

Tomcat插件

  1. 配置 Tomcat7 插件
xml
<!-- Tomcat7插件 -->
<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <port>8080</port>
    <path>/</path>
  </configuration>
</plugin>
  1. 在 Maven 菜单窗口,以 Tomcat 插件方式,运行项目

Maven-Tomcat-Plugins-run

Maven生命周期【重点】

项目从开发的开始到项目的开发结束的整个过程

mvn clean

清除,删除target目录

mvn test

运行所有的单元测试

注意:

  1. 要测度的是哪一个类,它所对应的单元测试的名字,后边加一个'Test'后缀
  2. 要测试的是哪一个方法,方法名首字母变大写,前缀加上'test'
  3. 单元测试的代码,包名与被测试类的包名一致

比如:

类名叫做HelloServlet,方法名叫做doGetdoPost

那么,单元测试的类名叫做HelloServletTest

所对应的单元测试方法叫做testDoGettestDoPost

mvn compile

生成target目录

mvn package

打包,打包方式取决于pom.xml当中的<packaging>选项

mvn install【安装到本地仓库当中】

安装,将打包好的文件,安装到本地仓库当中

  • 将 ValidateCode.jar 安装到本地仓库

    bash
    mvn install:install-file -DgroupId=cn.dsna.util.images -DartifactId=ValidateCode -Dversion=1.0 -Dfile=ValidateCode.jar -Dpackaging=jar -DgeneratePom=true

mvn site【了解】

生成项目站点文档

mvn deploy【了解】【安装到远程仓库当中】

将最终的包复制到远程仓库,供其他开发人员或maven项目使用

小结

  • clean

    删除target目录

  • test

    运行项目当中的所有单元测试

    注意:

    1. 类名后缀Test
    2. 测试方法前缀test
  • compile

    生成target目录,把java程序编译成class字节码文件

  • package

    打包-先编译再测试最后打包

  • install

    安装 到本地仓库-先编译再测试再打包最后安装

Maven依赖范围【难点】

三种不同的类路径

classpath

常用依赖范围

provided依赖范围

scope-provided

test依赖范围

scope-test

runtime依赖范围

scope-runtime

依赖范围说明编译classpath测试classpath运行时classpath
compile默认的范围,编译、测试、运行都有效YYY
provided
【重点】
编译、测试时有效,运行的时候不会被加入YY-
runtime
【了解】
在测试、运行时有效-YY
test
【掌握】
只在测试时有效-Y-

system系统依赖范围。该依赖与 provided 依赖范围完全一致。但是,使用 system 范围的依赖时必须通过 systemPath 元素显式地指定依赖文件的路径。由于此依赖不是通过 Maven 仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。systemPath 元素可以引用环境变量。

例如:oracle 的驱动包,从中央仓库无法下载,需要先下载到本地,再通过本地路径引入。先下载 orace 的包到本地:

1536480416113

然后在 pom 文件中导入依赖:

xml
<dependency>
  <groupId>oracle</groupId>
  <artifactId>ojdbc</artifactId>
  <version>1.0</version>
  <scope>system</scope>
  <systemPath>D:/software/maven/apache-maven-3.5.2/repository/ojdbc6.jar</systemPath>
</dependency>

依赖范围配置

xml
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>4.3.9.RELEASE</version>
  <!--compile是默认的依赖范围,可以不用写出来-->
  <scope>compile</scope>
</dependency>

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>jakarta.servlet</groupId>
  <artifactId>jakarta.servlet-api</artifactId>
  <version>6.0.0</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>com.mysql</groupId>
  <artifactId>mysql-connector-j</artifactId>
  <version>8.2.0</version>
  <scope>runtime</scope>
</dependency>

<dependency>
  <groupId>oracle</groupId>
  <artifactId>ojdbc</artifactId>
  <version>1.0</version>
  <scope>system</scope>
  <systemPath>D:/software/maven/apache-maven-3.5.2/repository/ojdbc6.jar</systemPath>
</dependency>

依赖版本统一维护【了解】

如果 pom 文件中引入的依赖太多,各种依赖又有不同的版本,为了统一维护版本。我们可以将依赖的版本号抽取出来进行统一管理。抽取方法如下:

第一步 :在 pom.xml 中使用<propeties>属性定义 jar 包的版本

xml
<properties>
  <spring.version>4.2.4.RELEASE</spring.version>
  <struts.version>2.3.8</struts.version>
</properties>

第二步 :在依赖的<version>中使用${}引入前面定义好的版本

xml
<properties>
  <spring.version>4.2.4.RELEASE</spring.version>
  <struts.version>2.3.8</struts.version>
</properties>

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
  </dependency>
  <dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-spring-plugin</artifactId>
    <version>${struts.version}</version>
  </dependency>
</dependencies>

小结

  • Maven 坐标

  • Maven 仓库

  • 依赖导入

  • 生命周期

  • Maven 依赖范围

综合练习

需求:将《企业通讯录管理系统》改成 maven 的 web 项目

要求:配置本地 tomcat 启动

创建maven的web项目

  1. 创建 maven 的 web 项目,并配置 webapp 和web.xml;

1536501232886

  1. 修改 pom 文件中打包方式为 war;

1536501327478

复制用户管理系统代码到本项目

  1. 复制静态页面到 webapp 目录下

1536501505609

  1. 复制 java 代码到src/main/java目录中:

  2. 将原项目 src 目录下的配置文件全部复制到 maven 项目的 resources 目录中

1536501750887

对照原项目jar包导入依赖

xml
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

<dependency>
    <groupId>commons-beanutils</groupId>
    <artifactId>commons-beanutils</artifactId>
    <version>1.9.4</version>
</dependency>

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.16</version>
</dependency>

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
</dependency>

<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>3.0.0</version>
</dependency>

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>3.0.1</version>
</dependency>

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.2.0</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>6.0.4</version>
</dependency>

给依赖添加作用域

  1. junit: test
  2. servlet: provided;
  3. mysql 驱动: runtime;

配置Tomcat启动

1536504191050

配置编译插件

配置编译插件

xml
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

Idea模板

  1. 进入 Idea 欢迎页面(如果已开启某个项目,点击菜单栏-File-Close Project)
  2. 左侧导航栏,选择Customize,选择All Settings...
  3. 左侧导航栏,选择Editor->File And Code Templates
  4. 右侧视图,选择Other选项卡
  5. 右侧窗口中的左侧导航栏,选择Maven->Maven Project.xml
  6. 下拉到底部,将以下文本,CV 到</project>上侧
xml
<?xml version="1.0" encoding="UTF-8"?>
<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>

#if (${HAS_PARENT})
    <parent>
        <groupId>${PARENT_GROUP_ID}</groupId>
        <artifactId>${PARENT_ARTIFACT_ID}</artifactId>
        <version>${PARENT_VERSION}</version>
#if (${HAS_RELATIVE_PATH})
        <relativePath>${PARENT_RELATIVE_PATH}</relativePath>
#end
    </parent>

#end
    <groupId>${GROUP_ID}</groupId>
    <artifactId>${ARTIFACT_ID}</artifactId>
    <version>${VERSION}</version>

    <dependencies>
        ${END}
        <!-- junit -->
        <!-- c3p0 -->
        <!-- druid -->
        <!-- spring-jdbc -->
        <!-- commons-beanutils -->
        <!-- commons-io -->
        <!-- fastjson -->
        <!-- jackson-databind -->
        <!-- jakarta.servlet-api -->
        <!-- mysql-connector-j -->
        <!-- jakarta.servlet.jsp.jstl-api -->
        <!-- jakarta.servlet.jsp.jstl -->
    </dependencies>
</project>

学习目标总结

  • 能够独立安装和配置 maven
  • 能够解释 maven 仓库
  • 会使用 maven 构建项目的生命周期
  • 能够描述 maven 的生命周期
  • 能够在 maven 工程中添加依赖

附一 清理maven仓库

初始情况下,我们的本地仓库是没有任何 jar 包的,此时会从远程仓库去下载(如果没有配置,就直接从中央仓库去下载),可能由于网络的原因,jar 包下载不完全,这些不完整的 jar 包都是以 lastUpdated 结尾。此时,maven 不会再重新帮你下载,需要你删除这些以 lastUpdated 结尾的文件。如果本地仓库中有很多这样的以 lastUpadted 结尾的文件,可以执行如下脚本来删除

  • Windows
bash
set REPOSITORY_PATH=G:\maven\apache-maven-3.5.2\repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完毕
pause
  • Unix
bash
find /app/maven/localRepository -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;

附二 更新依赖索引

有时候给 idea 配置完 maven 仓库信息后,在 idea 中依然搜索不到仓库中的 jar 包。这是因为仓库中的 jar 包索引尚未更新到 idea 中。这个时候我们就需要更新 idea 中 maven 的索引了,具体做法如下:

打开设置----搜索 maven----Repositories----选中本地仓库-----点击 Update

1537786634456