Maven基础介绍

本文详细介绍了Maven的基础概念,如什么是Maven、为什么要使用、核心组件如pom.xml和坐标系统,以及如何在IDEA中集成Maven进行项目管理和自动化构建。涵盖了依赖管理、生命周期插件和单元测试等内容。

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

目录

一、Maven初步介绍

1、什么是Maven?

2、为什么使用Maven?

3、Maven 中的概念

4、安装Maven步骤

二、Maven 的核心概念

1、Maven 约定的目录结构

2、pom 文件 

3、坐标

4、依赖 dependency

 5、仓库

6、maven 的生命周期,插件,命令

7、自定义配置插件

8、单元测试(Junit)

三、Maven 和 IDEA 的集成

1、IDEA集成 maven

2、基于maven 普通 java项目

3、基于maven创建web工程

4、idea 中 的maven 工具窗口

 5、导入其他模块

四、依赖管理 

五、Maven常用设置

1、指的是 标签里面的设置。

2、全局变量

3、 资源插件


一、Maven初步介绍

1、什么是Maven?

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理。
构建过程中的各个环节:清理、编译、测试、报告、打包、安装、部署。

Maven 可以整合多个项目之间的引用关系,我们可以根据业务和分层需要任意拆分一个项目;Maven 提供规范的管理各个常用 jar 包及其各个版本,并且可以自动下载和引入项目中;

Maven 可以根据指定版本自动解决 jar 包版本兼容问题;

Maven 可以把 jar 包所依赖的其它 jar 包自动下载并引入项目。

2、为什么使用Maven?

在没使用Maven之前,我们之前做一个项目的问题:

(1)我们在开发阶段需要很多个jar包,需要我们自己手动管理。不管是各种依赖还是版本问题,都需要我们自己手动去完成。

(2)一个很大的工程是有很多模块的,几千几万的类都是很常见的,靠我们自己编译,测试是非常麻烦的

(3)在开发完成后,还需要进行测试,改BUG。不断的进行测试。

(4)测试完还需要打包,将项目部署的服务器上。

所以我们需要Maven帮助我们去做这些事情,能让我们更专注的去编写代码:

(1)项目的自动构建,帮助开发人员做项目代码的编译,测试, 打包,安装,部署等工作。

(2)管理依赖(管理项目中使用的各种jar包)。

        依赖:项目中需要使用的其他资源, 常见的是jar 。 比如项目要使用mysql驱动。我们就说项目依赖mysql驱动。

3、Maven 中的概念

①POM

②约定的目录结构

③坐标

④依赖管理

⑤仓库管理

⑥生命周期

⑦插件和目标

⑧继承

⑨聚合

4、安装Maven步骤

(1)确定JAVA_HOME 指定jdk的安装目录, 如果没有JAVA_HOME, 需要在windows的环境变量中创建JAVA_HOME, 它的值是jdk的安装目录

(2)解压缩 apache-maven-3.3.9-bin.zip ,把解压后的文件放到一个目录中。

目录的路径不要有中文, 不要有空格。

(3)把maven安装目录中下的bin的路径添加到path中

 打开 cmd 命令行输入:mvn -v

 出现以上内容表示配置好了。

二、Maven 的核心概念

1、Maven 约定的目录结构

Maven项目使用的大多数人遵循的目录结构。叫做约定的目录结构。

一个  maven 项目就是一个文件。比如一个项目叫:Hello项目

 Hello 项目文件夹
    \src
        \main                     叫做主程序目录(完成项目功能的代码和配置文件)
             \java                 源代码(包和相关的类定义)
             \resources        配置文件
         \test                      放置测试程序代码的(开发人员自己写的测试代码)
             \java                 测试代码的(junit)
             \resources       测试程序需要的配置文件
    \pom.xml                  maven的配置文件, 核心文件

maven的使用方式:

1)maven可以独立使用: 创建项目,编译代码,测试程序,打包,部署等等

2)maven和idea一起使用:通过idea借助maven,实现编码,测试,打包等等

 演示第一种方式创建一个maven项目:

(1)根据以上目录结构创建目录。

(2)在 /main/java 目录下创建一个Hello java小程序。

(2)在cmd命令行,在 src 的目录下,执行:mvn compile 命令。

在执行过程中,可以看到这样一串地址,这个地址就是 maven的中央仓库,他自动从仓库中下载所需要的 jar 包。

 显示编译成功。并且会生成一个  target 目录:会把编译好的字节码文件放到 /target/classes 目录下。

 以上步骤好了之后,cmd 命令行执行:java  类名  执行。

2、pom 文件 

pom :即 Project Object Model 项目对象模型。一个项目对应一个 pom.xml 文件

Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中 进行声明,以方便进行构建和描述,pom.xml 是 Maven 的灵魂。所以,maven 环境搭建好之后,所有的学习和 操作都是关于 pom.xml 的。

 下面解析 pom 文件:

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

<!--project 是一个根标签,后面是约束文件-->
<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">

   <!--表示 pom 模型的版本-->
  <modelVersion>4.0.0</modelVersion>

   <!--坐标-->
  <groupId>com.bjpwoernode.maven</groupId>
  <artifactId>ch01-maven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--打包类型-->
  <packaging></packaging>


</project>

3、坐标

坐标组成: <groupId>  <artifactId>  <version> 

坐标的作用:其实和数学中的坐标是一样的,用来确定某一个资源,每一个资源都会有一个坐标。这个坐标是唯一的,简称 gav 

 <groupId>  :组织名称,代码,公司,团体或者单位的表示,一般是域名的倒写如果项目比较大,也可以:域名倒写+项目名

<artifactId> :项目名称,如果groupId有项目名,那么artifactId就是子项目名。

<version> :版本,项目的版本号。推荐三位数字组成(自定义的,俩位,一位都行),例如:主版本号,此版本号,小版本号SNAPSHOT:表示不稳定版本。

<packaging>:项目打包的类型, 有jar ,war, ear, pom等等 默认是jar。web项目打包类型时 war 。

项目使用gav:

1.每个maven项目,都需要有一个自己的gav

2.管理依赖,需要使用其他的jar ,也需要使用gav作为标识。

搜索坐标的地址: https://mvnrepository.com/

4、依赖 dependency

依赖:项目中需要使用的 jar 包。 

需要使用maven表示依赖,管理依赖。 通过使用dependencygav一起完成依赖的使用

需要在pom.xml文件中,使用dependencies dependency, 还有gav 完成依赖的说明。

格式:


<dependencies>
  
    <!-- 日志 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    
    <!-- mysql驱动 -->
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.16</version>
    </dependency>

</dependencies> 

maven使用gav作为标识,从互联网下载依赖的jar。 下载到你的本机上。  由maven管理项目使用的这些jar

 5、仓库

我们所需要的 jar 包都是 maven 管理的,那么有的 jar 包是非常大的,我们下载的 maven 才几兆,几十兆,那么多的 jar 包他是从哪里来的呢? 

Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。 Maven 核心程序仅仅定义了自动化构建项目的生命周期,但具体的构建工作是由特定的构件完成的。而且为了提高构建 的效率和构件复用, maven把所有的构件统一存储在某一个位置,这个位置就叫做仓库

 仓库分为:

(1)本地仓库:

        本地仓库又叫本机仓库,存放在你计算机的某一个位置:

                        C:\Users\用户名\.m2\repository

本地仓库的位置是可以修改的,在maven安装路径 /conf/setting.xml  文件中。 

 在 localRepository 标签里写上自己修改的路径即可。 

*****注意:如果本地仓库中出现下面这样的字母,说明jar包无法使用,不管有没有jar包。如果确定jar包的版本,项目名,组织名称都对的话,需要重新刷新 pom.xml 文件,重新导入。

 

(2)远程仓库:需要通过联网访问的

        1)中央仓库: 一个ftp服务器, 存放了所有的资源。

        2)中央仓库的镜像: 就是中央仓库的拷贝。 在各大主要城市都有镜像。

        3)私服:在局域网中使用的。 私服就是自己的仓库服务器。 在公司内部使用的。

 

6、maven 的生命周期,插件,命令

maven的生命周期: 项目构建的各个阶段。 包括 清理, 编译, 测试,报告,打包,安装,部署

插件:要完成构建项目的各个阶段,要使用maven的命令, 执行命令的功能是通过插件完成的。插件就是jar,一些类。

命令: 执行maven功能是 由命令发出的。 比如 mvn compile

(1)mvn  clean  清理命令。删除以前生成的数据,删除 target 目录。

 maven使用的插件  maven-clean-plugin ,版本:2.5

(2)mvn  compile 编译命令。执行的代码编译,把 src/main/java 目录下所有的 java 代码编译为 class 文件,也就是字节码文件,同时把 class 文件拷贝到 target/classes 目录下,classes就是类路径。

  maven使用的插件: maven-compiler-plugin,版本:3.1  编译代码的插件

                                  maven-resources-plugin  版本:2.6   资源插件,处理文件的,将 resources 中为文件拷贝到 classes 中 

(3)mvn test-compile  编译命令,编译 target/test/java 中的代码,将它翻译为class文件,同时拷贝到  target/test-classes 目录下。

  maven使用的插件: maven-compiler-plugin,版本:3.1  编译代码的插件

                                  maven-resources-plugin  版本:2.6   资源插件,处理文件的,将 resources 中为文件拷贝到 classes 中 

(4)mvn test   测试命令, 作用执行 test-classes目录的程序, 测试src/main/java目录中的主程序代码是否符合要求。他会自动编译测试 target/test/java 中的代码。

插件: maven-surefire-plugin 版本 2.12.4

(5)mvn package 打包。作用是把项目中的资源class文件和配置文件都放到一个压缩文件中, 默认压缩文件是jar类型的。 web应用是war类型。

插件:maven-jar-plugin 版本 2.4。

执行打包处理。 生成一个 jar(war) 扩展的文件,文件名:项目名+版本号+扩展名  , 放在target目录下.

 打包的文件包含的是 src/main 目录中的所有的生成的class和配置文件和test无关。 

(6)mvn install  安装,将打包成的 jar(war) 包,存放到本地仓库中。如何查看安装的具体位置:插件:maven-jar-plugin 版本 2.4。

  <groupId>yangzhaoguang</groupId>
  <artifactId>maven_demo03</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

安装的具体位置和你项目中 pom.xml 文件中的 groupId 有关,如果有 " . " 分割,就是一个具体的文件夹。artifactId 是你的 jar(war) 包名字。

拿上边坐标为例,的安装路径为:

本地仓库\yangzhaoguang\maven_demo03\1.0-SNAPSHOT\maven_demo03-1.0-SNAPSHOT.war

以上命令必须在 pom.xml 文件所在目录中!!

7、自定义配置插件

插件的配置需要在 pom.xml 文件 <build> 标签里面。 <plugins> 里可以配置多个插件,每一个 <plugin> 标签里就是一个插件。

<!-- 设置构建项目相关的内容 -->
<build>
  <plugins>
    <!-- 设置插件 -->
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-compiler-plugin</artifactId>
		<version>3.8.1</version>
		<configuration>
			<source>1.8</source> <!-- 指定编译代码的jdk版本 -->
			<target>1.8</target> <!-- 运行java程序使用的jdk版本-->
		</configuration>
	</plugin>
  </plugins>
</build> 

8、单元测试(Junit)

用于开发人员自测的一个功能。一个方法就是一个单元。每个方法都能测试。

使用Junit:

(1)在 pom.xml 加入依赖

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

(2) src/test/java 下编写测试类

单元测试使用的建议:

        1.测试类的定义, 名称一般是Test+要测试的类名称

        2.测试类它的包名和要测试的类包名一样。

        3.在类中定义方法,要测试代码。

                方法的定义:public void 方法名 () {}

4.在测试类中的方法,可以单独执行。 测试类也可以单独执行

5.在方法的上面加入@Test

 

三、Maven 和 IDEA 的集成

1、IDEA集成 maven

Files ----> setting  

VM Option :  -DarchetypeCatalog=internal

 设不设置都可以,如果不设置,创建新项目时需要重新设置maven

 

2、基于maven 普通 java项目

 

 设置 组织名称,项目名,版本号。

 配置基本信息,如果没问题就不需要修改了。

在创建项目时,你的IDEA右下角出现以下提示,点击 Enable Auto-Import 。他的意思是你的pom.xml 文件发生变化时,会自动更新。 

 

 等一段时间后,控制台会显示:BUILD SUCCESS ,表示创建成功。

创建完,我们的目录结构是没有 resources 文件夹的的,这个我们自己可以创建。

          

 但是 创建完还不行,普通的文件夹是没法用的,需要将普通文件夹变为 带有 Root 的文件夹。

 

3、基于maven创建web工程

 其余和创建普通java项目一样。

我们看 webapp 的目录结构:

 默认的目录结构是没有 java和resources目录的,如果需要我们可以自己创建。

在<dependencies> 标签中加入Servlet 和 jsp 依赖:

其实从 pom.xml 加入依赖和从Tomcat中引入jar其实是一样的,方法不同而已。

组织名称,项目名,版本号可以去 mvnRepository.com  找。

    <!--加入Servlet依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>
    <!--加入jsp依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>


4、idea 中 的maven 工具窗口

 

 5、导入其他模块

 

四、依赖管理 

 依赖范围:<scope> 标签

依赖范围表示:这个依赖(jar和里面的类)在项目构建的哪个阶段起作用。

scope标签的属性值:

compile :参与构建项目的所有阶段。默认就是 compile

test:测试,在测试阶段使用,比如:mvn test 

provided:提供者,项目在部署到服务器时,不需要提供这个依赖的jar,而是由服务器来提供这个依赖的jar包。比如:servlet,jsp  jar包

 

五、Maven常用设置

1、指的是 <properties> 标签里面的设置。

<properties>
<maven.compiler.source>1.8</maven.compiler.source> 源码编译 jdk 版本
<maven.compiler.target>1.8</maven.compiler.target> 运行代码的 jdk 版本
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 项目
构建使用的编码,避免中文乱码
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 生成报告的编码
</properties>

2、全局变量

在properties定义标签,这个标签就是一个变量, 变量名可以自己取,标签的文本就是变量的值。

可以使用全局变量表示 多个依赖使用的版本号。

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>  <!--编译时的JDK版本-->
    <maven.compiler.target>1.8</maven.compiler.target>  <!--运行时的JDK版本-->
    <!--自定义的全局变量-->
    <junit.version>4.11</junit.version>
    <servlet.version>3.1.0</servlet.version>

  </properties>

使用全局变量:${变量名}

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope> <!--Junit依赖只在测试阶段起作用,并不会参与打包-->
    </dependency>
    <!--加入Servlet依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>${servlet.version}</version>
      <scope>provided</scope>
    </dependency>

3、 资源插件

Maven 处理的配置文件信息的默认规则 :

①:maven会把src/main/resources目录中的文件, 拷贝到target/classes目录下

②:maven只处理 src/main/java 目录中的 .java文件,把这些java文件编译为class,拷贝到 target/classes 目录中。 不处理其他文件。

 

那么如果我们想将src/main/java目录下的其他文件编译到 target/classes目录下怎么办,使用 资源插件:

    <build>
        <!--设置资源插件-->
        <resources>
            <resource>
                <!--指定目录范围-->
                <directory>src/main/java</directory>
                <includes>
                    <!--表示src/main/java目录下的 text,xml 文件都会被编译到 target/classes目    
                         录下-->
                    <include>**/*.xml</include>
                    <include>**/*.text</include>
                </includes>
                <!--不使用默认拦截器,自己配置-->
                <filtering>false</filtering>
            </resource>
        </resources>

    </build>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲨瓜2号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值