Maven

本文详细介绍了Maven的项目管理、安装配置、HelloWorld实例、依赖管理、IDEA集成及JavaWeb项目构建,包括本地仓库设置、中央仓库镜像配置和常用命令应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.初始Maven

1.1.项目遇到的问题

  • 构建:编译代码,运行测试,打包,部署应用,运行服务器等;
  • 依赖:项目依赖大量的第三方包,第三方包又依赖另外的包,对依赖包的管理非常麻烦。

1.2.Maven定义和作用

  • Maven 翻译为“知识的积累”,“专家”,“行家”,是一个跨平台的项目管理工具;
  • Maven 主要用作基于 Java 平台的项目(Maven 本身也是 Java 编写的)的构建、依赖包管理和项目信息管理;
  • Maven 能提供一种项目的配置,配置好的项目,只需要运行一条简单的命令,就能完成重复的, 繁琐的构建动作
  • Maven 能提供一种项目的依赖配置,只要在pom.xml配置好的项目,Maven 能自动的从 Maven 的中央仓库中帮我们下载并管理项目依赖的 jar 包,并且还能自动的管理这些 jar 包依赖的其他 jar 包;并建立本地仓库下次就首先从本地下载。
  • Maven 提供了一种标准的项目目录结构,测试命名规则等项目的最佳实践方案,统一了不同项目 的学习成本(约定大于配置)。

2.Maven安装

2.1.检查JDK版本

因为 Maven 不同的版本对 JDK 是有要求的,Maven历史版本

2.2.安装 Maven

把 apache-maven-x.x.x-bin.zip 解压到目录中(目录路径最好不要有空格和中文)。

2.3.配置环境变量

  1. 配置环境变量,MAVEN_HOME,指向 maven 的根目录;

  2. 配置环境变量Path,将 %MAVEN_HOME%\bin 追加到 Path 中。

配置环境变量以后切换其他版本的时候只需要修改MAVEN_HOME对应的路径即可;配置环境变量后可在此电脑的任意位置使用maven,未配置只限于maven的bin目录

2.4.验证Maven安装是否成功

打开命令行窗口,输入入 mvn –v 执行,若执行类似如下效果即代表安装成功。

3.Maven Hello World

3.1.Maven项目结构

3.2.编译项目

把事先准备好的 Maven 项目,在命令行下输入命令试下:

  1. mvn compile:编译

    在项目文件下生成与pom.xml和src同级的target目录

  2. mvn clean:清除

    清除target目录

  3. mvn test:测试

    执行所有的单元测试代码

  4. mvn package:项目打包成jar

  5. mvn install:打包,本地仓库也放一份

4.Maven 设置

4.1.本地仓库

运行过 Maven 命令才会在你的用户目录生成一个 .m2 目录,该目录下有个目录名 repository,这个就是的本地仓库,主要存放是一些下载的 jar 文件。

本地仓库默认位置在用户目录/.m2/repository,本地仓库不建议在系统盘,最佳实践:

  • 将Maven根目录的conf/settings.xml 拷贝到 .m2 中,作为个人Maven配置文件;
  • 在 settings.xml 文件中 修改本地仓库的位置。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  -->
<!-- 本地仓库地址 -->
<localRepository>C:\Execute\maven\repository</localRepository>

4.2.配置中央仓库镜像

在有网情况下,官方中央仓库服务器在国外,所以很大可能出现下载失败的问题,所以我们配置一个中 央仓库的镜像来降低下载失败的概率。

<?xml version="1.0" encoding="utf-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <!-- 本地仓库地址 -->
    <localRepository>你本地仓库的目录位置</localRepository>
    <mirrors>
        <!-- 阿里仓库镜像 -->
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
    </mirrors>
</settings>

5.IDEA中Maven的配置

要在idea进行全局设置,而不是单个项目设置

6.搭建基于Maven构建的JavaSE项目

6.1.创建项目

6.1.1.选择建的是 Maven 项目

6.1.2.配置项目信息

6.2.pom.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.stonebridge</groupId>
    <artifactId>maven-se</artifactId>
    <version>1.0.0</version>

    <properties>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
         <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    </dependencies>

</project>

6.3.添加依赖

6.3.1.利用索引添加依赖

所谓建索引,就对本地仓库的依赖建立索引,若本地仓库存在 10 个依赖,那么在添加的时候可以搜索 得出来,很方便在 pom.xml 添加。但注意搜索得出来是本地仓库已有的前提下。而这个索引在 IDEA 开发工具会自动建好,直接使用即可。

6.3.1.1.添加dependencies元素
6.3.1.2.添加dependency元素
6.3.1.3.填选依赖名称
6.3.1.4.选择依赖的版本
6.3.1.5.填写依赖的作用域
6.3.1.6.让工具自动解析修改的内容
6.3.1.7.验证依赖添加成功

6.3.2.网站搜索拷贝添加依赖

6.4.使用 Maven 命令

在 Maven Projects 窗口,双击对应命令即可:

7.搭建基于Maven构建的JavaWeb 项目

7.1.创建项目

7.1.1.搭建基于 Maven 构建的 JavaWeb 项目

7.1.2.修改项目打包方式

必须修改:此时才能识别时基于maven的web项目

在 pom.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>org.example</groupId>
    <artifactId>maven-web</artifactId>
    <version>1.0.0</version>
    <!-- 修改项目打包方式 -->
    <packaging>war</packaging>
    
</project>

7.2.添加 web.xml

自己手动在项目的 main 目录下建 webapp/WEB-INF/web.xml 文件,拷贝如下内容:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
</web-app>

7.3.修改项目编译运行版本

在 pom.xml 配置如下:

<!--        编译的项目所有的编码集-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--        编译的jdk版本-->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>

7.4.添加依赖

在 pom.xml 文件添加如下servlet依赖:

<dependencies>
    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <!-- 配置 servlet-api 依赖 -->
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <!-- 记得一定配置 -->
        <scope>provided</scope>
    </dependency>
</dependencies>

7.5.编写 Servlet 与 JSP

@WebServlet("/hello")
public class HelloWorld extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("msg", "hello maven");
        request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(request, response);
    }
}

hello.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

7.6.配置Tomcat插件

在 pom.xml 添加Tomcat插件

<build>
    <plugins>
        <plugin>
            <!-- 本地仓库会下载一个Tomcat7
                只要执行tomcat7:run,就会执行把当前命令部署到下载的Tomcat里面-->
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <port>8000</port> <!-- 端口 -->
                <path>/</path> <!-- 上下路径 -->
                <uriEncoding>UTF-8</uriEncoding> <!-- 针对 GET 方式乱码处理 -->
            </configuration>
        </plugin>
    </plugins>
</build>

7.7.启动项目

8.概念解释

8.1.坐标

8.1.1.数学中的坐标

在空间中,使用 X、Y、Z 三个向量可以唯一的定位空间中的任意一个点。

8.1.2.Maven中的坐标

标识项目或者依赖在仓库中的位置。主要由下面构成:

  • groupId:项目名称,一般使用公司或组织域名倒写,域名具有唯一性,区分不同公司;
  • artifactId:项目中 Maven 项目/模块名称,区分同一个公司的项目;
  • version:项目版本,区分同一个项目不同时期的特点。

示例:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
</dependency>

8.2.依赖

配置项目所要依赖的 jar,在 pom.xml 使用 dependency 元素配置,通过坐标先从本地仓库找,若没 有再从远程仓库找。

8.2.1.scope

Maven 在编译,测试,运行的时候,各需要一套 classpath(比如编译的时候会有编译的 classpath, 测试的时候会有测试的 classpath)。scope 表明该依赖的项目和三个 classpath 的关系,即表示依赖 什么阶段起作用,什么阶段不起作用。

scope 主要可选值:

  • compile:默认,适用于所有阶段,会随着项目一起发布,在编译,测试,运行时都有效;
  • provided:编译和测试阶段使用;典型的如 servlet-api.jar,打包时不需要,容器来提供;
  • runtime:测试和运行阶段使用,用于接口和实现分离,典型的如 jdbc 具体驱动实现;
  • test:测试阶段使用,不会随项目发布,如 junit。

8.2.2.传递性

Maven 的依赖是具有传递性的,比如 A -> B,B -> C,那么 A 间接的依赖于 C,这就是依赖的传递性, 其中 A 对于 B 是第一直接依赖,B 对于 C 是第二直接依赖,C 为 A 的传递性依赖。依赖的传递性可以 解决依赖繁琐的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值