欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 三天急速通关JavaWeb基础知识:Day 3 依赖管理项目构建工具Maven

三天急速通关JavaWeb基础知识:Day 3 依赖管理项目构建工具Maven

2025/10/14 20:01:12 来源:https://blog.csdn.net/qq_42828479/article/details/145399537  浏览:    关键词:三天急速通关JavaWeb基础知识:Day 3 依赖管理项目构建工具Maven

三天急速通关JavaWeb基础知识:Day 3 依赖管理项目构建工具Maven

  • 0 文章说明
  • 1 介绍
  • 2 安装与配置
    • 2.1 安装
    • 2.2 手动配置
  • 3 创建Maven工程
  • 4 Maven构建工程
  • 5 Maven依赖管理
  • 6 Maven工程Build构建配置
  • 7 Maven依赖传递与依赖冲突
    • 7.1 依赖传递
    • 7.1 依赖冲突
  • 8 Maven工程继承和聚合
    • 8.1 工程继承
    • 8.2 工程聚合
  • 9 总结

0 文章说明

学习完Java基础知识,有一定前端基础,三天急速通关尚硅谷的JavaWeb教程,整理知识体系框架,并用Kimi,DeepSeek,Copliot辅助学习,第三天学习依赖管理项目构建工具之Maven。本文所提供的信息和内容仅供参考,作者和发布者不保证其准确性和完整性。

1 介绍

Maven是一个开源的项目管理和构建自动化工具,主要用于Java项目的构建、依赖管理和文档生成,核心是基于POMProject Object Model,项目对象模型)的概念,通过一个统一的生命周期和配置文件(pom.xml),来管理项目的构建过程。

  • 问题:
    • 当依赖的Jar包越来越多,关系越来越复杂,手动导入肯定不可行。
    • 项目编写完源代码之后是无法直接放在服务器上部署的,通过IDEA构建之后可以部署,如果脱离IDEA就需要用到专门的构建工具。
  • 解决方案:
    • Maven在通过简单编写配置文件pom.xml之后就能自动下载所需依赖库以及依赖需要的依赖,并且保证版本没有冲突、完成依赖版本管理。
    • Maven可以管理项目的编译、测试、打包、部署等构建过程,并且开发者可以对构建过程进行扩展和定制,通过插件机制主动触发构建的各个过程。

2 安装与配置

2.1 安装

  • 版本组合
    目前开发环境的版本,注意正确配置JAVA_HOMEMAVEN_HOME等环境变量:
    工具版本
    Maven3.9.1
    JDK17.0.2
    IDEA2024.1.7
  • Maven目录结构
    bin:运行脚本
    bootplexus-classworlds类加载器框架
    conf:核心配置文件
    lib:运行时所需要的Java类库

2.2 手动配置

通过修改maven/conf/settings.xml配置文件,来修改maven的一些默认配置

  • 配置本地仓库的保存路径
      <!-- localRepository| The path to the local repository maven will use to store artifacts.|| Default: ${user.home}/.m2/repository--><localRepository>H:\Maven--PC\apache-maven-3.9.1\repo</localRepository>
    
  • 配置中央仓库镜像
    <!-- 放入mirrors标签 -->
    </mirror><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
    </mirror>
    
  • 指定JDK编译版本
    <!-- 放入profiles标签 -->
    <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></properties>
    </profile>
    
  • 关联IDEA
    IDEA -> Settings -> Build, Execution, Deployment -> Maven -> 手动选择自己安装Maven,覆盖settings.xml路径,覆盖repository路径。
    在这里插入图片描述

3 创建Maven工程

  • GAVP
    创建Maven工程时,会配置一些属性,即GAVPGroupIDArtifactIDVersionPackaging),这些属性相当于给这个工程取了个独一无二的名字,以便Maven能识别,便于后面项目之间进行相互依赖的管理。

    • GroupID
      格式:顶级域名.{公司/BU }.业务线.[子业务线],最多 4 级。
      举例:com.taobao.tddlcom.alibaba.sourcing.multilang
    • ArtifactID
      格式:产品线名-模块名
      举例:tc-clientuic-api
    • Version
      格式:主版本号.次版本号.修订号
      举例:初始→1.0.0 修改bug → 1.0.1 功能调整 → 1.1.1
    • Packaging
      • packaging 属性为 jar(默认值),代表普通的Java工程,打包以后是.jar结尾的文件。
      • packaging 属性为 war,代表Javaweb工程,打包以后.war结尾的文件。
      • packaging 属性为 pom,代表不会打包,用来做继承的父工程。
  • 创建Maven Java SE项目

    <?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.cut</groupId><artifactId>maven-basic</artifactId><version>1.0-SNAPSHOT</version>
    </project>
    
  • 手动创建Maven Java Web项目
    Day 1 创建Java Web一样,Project Structure -> Project Settings -> Project栏指定JDK版本 -> Modules栏添加Web即可。
    在这里插入图片描述
    一般标准的Maven Java Web项目这里的web目录的位置需要调整,那就在刚刚添加Web的时候修改下默认值即可。
    在这里插入图片描述
    最终的项目目录
    在这里插入图片描述

  • 通过JBLJavaToWeb插件创建,IDEA安装插件之后,右键项目 -> JBLJavaToWeb 即可。

  • 标准的Maven Web程序的目录:

    |-- pom.xml                               # Maven 项目管理文件,描述项目的依赖和构建配置等信息。	
    |-- src|-- main                              # 项目主要代码|   |-- java                          # Java 源代码目录|   |   `-- com/example/myapp         # 开发者代码主目录|   |       |-- controller            # 存放 Controller 层代码的目录|   |       |-- service               # 存放 Service 层代码的目录|   |       |-- dao                   # 存放 DAO 层代码的目录|   |       `-- model                 # 存放数据模型的目录|   |-- resources                     # 资源目录,存放配置文件、静态资源等|   |   |-- log4j.properties          # 日志配置文件|   |   |-- spring-mybatis.xml        # Spring Mybatis 配置文件|   |   `-- static                    # 存放静态资源的目录|   |       |-- css                   # 存放 CSS 文件的目录|   |       |-- js                    # 存放 JavaScript 文件的目录|   |       `-- images                # 存放图片资源的目录|   `-- webapp                        # 存放 WEB 相关配置和资源|       |-- WEB-INF                   # 存放 WEB 应用配置文件|       |   |-- web.xml               # Web 应用的部署描述文件|       |   `-- classes               # 存放编译后的 class 文件|       `-- index.html                # Web 应用入口页面`-- test                              # 项目测试代码|-- java                          # 单元测试目录`-- resources                     # 测试资源目录
    

4 Maven构建工程

  • 项目构建的定义
    将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
  • Maven构建的常见命令
    命令描述
    mvn compile编译项目,生成target文件
    mvn package打包项目,生成jarwar文件
    mvn clean 清理编译或打包后的项目结构
    mvn install打包后上传到maven本地仓库
    mvn deploy只打包,上传到maven私服仓库
    mvn site生成站点
    mvn test执行测试源码
  • 构建生命周期
    构建生命周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令,周期包含若干命令,命令包含若干插件,最终实际进行构建操作的是插件,这里简要介绍两个生命周期:
    • clean生命周期
      主要的作用是对项目编译生成文件进行清理:pre-clean -> clean -> post-clean
    • default生命周期
      定义了真正构建时所需要执行的所有步骤(简化版,实际复杂得多):compile -> test -> package -> install -> deploy

5 Maven依赖管理

  • 通过配置pom.xml来实现依赖管理,下面是最基础的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><!-- 公司或者组织的唯一标志,maven会将该项目打成的jar包放本地路径:/com/cut --><groupId>com.cut</groupId><!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 --><artifactId>maven-basic</artifactId><!-- 版本号 --><version>1.0-SNAPSHOT</version><!--打包方式默认:jarjar指的是普通的java项目打包方式! 项目打成jar包!war指的是web项目打包方式!项目打成war包!pom不会讲项目打包!这个项目作为父工程,被其他工程聚合或者继承!后面会讲解两个概念--><packaging>war</packaging> 
    </project>
    
  • 通过dependency标签添加依赖,查询网站 maven仓库,可以定义变量管理版本号。

    <properties><!--命名随便,内部制定版本号即可!--><log4j.version>4.12</junit.version><!-- 也可以通过 maven规定的固定的key,配置maven的参数!如下配置编码格式!--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    <!-- 通过编写依赖jar包的gav必要属性,引入第三方依赖!scope属性是可选的,可以指定依赖生效范围!-->
    <dependencies><!-- 引入具体的依赖包 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version><!-- 依赖范围 --><scope>runtime</scope></dependency>
    </dependencies>
    
  • scope标签依赖范围的说明

    依赖范围描述
    compile默认范围,适用于编译、测试和运行阶段。
    test仅在测试阶段有效,如JUnit。
    provided编译和测试阶段需要,运行时由容器提供,如Servlet API。
    runtime测试和运行阶段需要,编译时不需要,如JDBC驱动。
    system本地依赖,不推荐使用,影响项目可移植性。
    import仅用于dependencyManagement,导入其他POM的依赖管理配置。

6 Maven工程Build构建配置

  • 修改默认构建的包名
    <!-- 默认的打包名称:artifactid+verson.打包方式 -->
    <build><finalName>定义打包名称</finalName>
    </build>  
    
  • 指定需要额外打包的文件(默认打包路径之外的文件)
    <build><!--设置要打包的资源位置--><resources><resource><!--设置资源所在目录--><directory>src/main/java</directory><includes><!--设置包含的资源类型--><include>**/*.xml</include></includes></resource></resources>
    </build>
    
  • 配置依赖插件
    <build><plugins><!-- tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8090</port><path>/</path><uriEncoding>UTF-8</uriEncoding><server>tomcat7</server></configuration></plugin></plugins>
    </build>
    

7 Maven依赖传递与依赖冲突

7.1 依赖传递

三个项目ABC,如果B依赖AC依赖B,那么C中的包有几种情况:

  • C 依赖 B 时使用 compile 范围:可以传递。
  • C 依赖 B 时使用 testprovided 范围:不能传递。
  • C 依赖 B 时,若配置了<optional>true</optional>标签,则不能传递。

7.1 依赖冲突

当前项目的依赖链中有相同的包,那么选的最短路径的,路径相同选先声明的,除此以外,可以选择手动控制。

<dependency><groupId>com.atguigu.maven</groupId><artifactId>pro01-maven-java</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope><!-- 使用excludes标签配置依赖的排除  --><exclusions><!-- 在exclude标签中配置一个具体的排除 --><exclusion><!-- 指定要排除的依赖的坐标(不需要写version) --><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions>
</dependency>

8 Maven工程继承和聚合

8.1 工程继承

Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。

  • 父工程用 <packaging>pom</packaging>,同时依赖用

    <!-- 使用dependencyManagement标签配置对依赖的管理 -->
    <!-- 被管理的依赖并没有真正被引入到工程 -->
    <dependencyManagement><dependencies><dependency>A</dependency><dependency>B</dependency><dependency>C</dependency></dependencies>
    </dependencyManagement>
    
  • 子工程用**<parent>**标签,同时选择性继承父工程的dependency不用写版本号(意味由父工程决定)

    <parent><!-- 父工程的坐标 --><groupId>com.atguigu.maven</groupId><artifactId>pro03-maven-parent</artifactId><version>1.0-SNAPSHOT</version>
    </parent>
    <!-- 如果子工程坐标中的groupId和version与父工程一致,那么可以省略 -->
    <!-- <groupId>com.atguigu.maven</groupId> -->
    <artifactId>pro04-maven-module</artifactId>
    <!-- <version>1.0-SNAPSHOT</version> -->
    

8.2 工程聚合

Maven 聚合是指将多个项目组织到一个父级项目中,以便一起构建和管理的机制,触发父工程构建命令、引发所有子模块构建

<project><groupId>com.example</groupId><artifactId>parent-project</artifactId><packaging>pom</packaging><version>1.0.0</version><modules><module>child-project1</module><module>child-project2</module></modules>
</project>

9 总结

Maven的安装,关联IDEA,手动与插件创建工程,插件整合Tomcatpom.xml添加依赖,至此能完美运行一个本地项目,之外再学习依赖传递冲突的解决,工程继承与聚合,能够完成复杂项目构建的管理。
其他用法,比如其他插件,site生命周期,nexus私服等不在急速冲刺系列,可以自己查询学习。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词