Maven下载、安装、管理教程,常见问题总结

Maven是一个项目管理和综合工具,主要功能包括自动化构建、依赖管理和统一项目结构。它使用POM.xml文件作为项目对象模型,管理项目构建、报告和依赖。文章介绍了Maven的下载安装、环境配置,以及基础概念如仓库、坐标、依赖管理。还讨论了依赖传递的冲突解决、插件绑定生命周期以及常见问题的处理方法。
摘要由CSDN通过智能技术生成

概述

1、Maven概述

Maven的作用我们可以分成三类:

(1)项目构建:提供标准的,跨平台的自动化构建项目的方式

(2)依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题

(3)统一开发结构:提供标准的,统一的项目开发结构,如下图所示:

各目录存放资源类型说明:

  • src/main/java:项目java源码
  • src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
  • src/main/webapp:web资源(比如html,css,js等)
  • src/test/java:测试代码
  • src/test/resources:测试相关配置文件
  • src/pom.xml:项目pom文件

2、下载安装Maven

安装本地Maven

选择你需要的maven版本下载:官网下载传送门

我使用的是3.6.1版本:maven-3.6.1-bin.zip

安装

把下载好的maven压缩包解压到一个没有中文,空格或其他特殊字符的文件夹,如:

配置环境变量

1.右键此电脑->属性->高级系统设置->环境变量

2.新建系统变量MAVEN_HOME

3.编辑系统变量Path,添加变量值%MAVEN_HOME%\bin

%MAVEN_HOME%\bin
  • 1

4.验证安装是否成功,win+R运行cmd,输入mvn -v,如图所示则配置成功

配置settings文件

1.在Maven安装目录conf目录下找到settings.xml配置文件

2.修改本地仓库地址

(1)在maven安装目录下新建本地仓库文件夹maven_repository

(2)修改默认本地仓库地址

3.配置私服,因为中央仓库在国外导致下载jar包很慢或者失败,所以我们改为国内的服务器,下面三个选择一个就可以了。

(一般会用阿里云的镜像库,但不知道是我电脑还是网络的原因,下载jar包总会出错,换了很多阿里云镜像都不管用,最后换了腾讯云的就好了,所有这里给出了三个镜像)

【阿里云】

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

【网易】

<mirror>
    <id>nexus-163</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus 163</name>
    <url>http://mirrors.163.com/maven/repository/maven-public/</url>
</mirror>

【腾讯云】

<mirror>
    <id>nexus-tencentyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus tencentyun</name>
    <url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror> 

将镜像复制到两个mirrors标签之间

4.配置jdk,也要夹在两个profiles标签之间

<!-- java1.8版本 --> 
<profile>
      <id>jdk-1.8</id>
      <activation>
	    <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>


      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
</profile>





idea配置

 

3、Maveb基础概念

仓库

仓库:用于存储资源,主要是各种jar包

本地仓库:开发者自己电脑上存储资源的仓库,也可从远程仓库获取资源

远程仓库:

中央仓库:maven团队自身维护的仓库,属于开源的

私服:各公司/部门等小范围内存储资源的仓库,私服也可以从中央仓库获取资源。

私服作用:

(1)保存具有版权的资源,包含购买或自主研发的jar

(2)一定范围内共享资源,能做到仅对内不对外开放

坐标

我们说maven的仓库里存储了各种各样的资源(jar包),那这些资源我们如何找到它们呢?我们需要知道它们具体的一个位置才能知道如何找到它们,这个就叫坐标(可在 mvnrepository.com 查找需要的jar包坐标)

坐标:maven中的坐标用于描述仓库中资源的位置,maven坐标的主要组成如下:

  • groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis;com.itheima)
  • artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)
  • version:定义当前资源的版本号
  • packaging:定义资源的打包方式,取值一般有如下三种
    • jar:该资源打成jar包,默认是jar java工程打包为jar
    • war:该资源打成war包 web工程打包为war
    • pom:该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个pom.xml不生成jar或其他包结构

<?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">
    <!--指定pom的模型版本-->
    <modelVersion>4.0.0</modelVersion>
    <!--打包方式 web工程打包为war java工程打包为jar-->
    <packaging>war</packaging>
    
    <!--组织id-->
    <groupId>com.itheima</groupId>
    <!--项目id-->
    <artifactId>web01</artifactId>
    <!--组织id  release代表完成版,SNAPSHOT代表开发版-->
    <version>1.0-SNAPSHOT</version>
    
    <!--设置当前工程的所有依赖-->
    <dependencies>
        <!--具体的依赖-->
        <dependency>
        </dependency>
    </dependencies>
</project>

4、Maven依赖管理

依赖配置与依赖传递

依赖是指在当前项目中运行所需的jar,依赖配置的格式如下:

<!--设置当前项目所依赖的所有jar-->
<dependencies>
    <!--设置具体的依赖-->
    <dependency>
        <!--依赖所属群组id-->
        <groupId>Junit</groupId>
        <!--依赖所属项目id-->
        <artifactId>Junit</artifactId>
        <!--依赖版本号-->
        <version>4.12</version>
    </dependency>
</dependencies>

依赖传递:

依赖具有传递性,分两种

(1)直接依赖:在当前项目中通过依赖配置建立的依赖关系

(2)间接依赖:被依赖的资源如果依赖其他资源,则表明当前项目间接依赖其他资源

依赖传递冲突

依赖传递的冲突问题:

在依赖传递过程中产生了冲突,我们有三种优先法则

(1)路径优先:当依赖中出现相同资源时,层级越深,优先级越低,反之则越高

(2)声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖靠后的

(3)特殊优先:当同级配置了相同资源的不同版本时,后配置的覆盖先配置的

可选依赖

可选依赖指的是对外隐藏当前所依赖的资源➡不透明

  • 加一个<optional> 标签
<dependencies>
    <dependency>
        <groupId>Junit</groupId>
        <artifactId>Junit</artifactId>
        <version>4.12</version>
        <optional>true</optional>
    </dependency>
</dependencies>

排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本

<dependencies>
    <dependency>
        <groupId>Junit</groupId>
        <artifactId>Junit</artifactId>
        <version>4.12</version>
        <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
    </dependency>
</dependencies>

依赖范围

依赖的jar默认情况可以在任何地方可用,可以通过scope标签设定其作用范围

这里的范围主要是指以下三种范围

(1)主程序范围有效(src/main目录范围内)

(2)测试程序范围内有效(src/test目录范围内)

(3)是否参与打包(package指令范围内)

此外:scope标签的取值有四种:compile,test,provided,runtime

这四种取值与范围的对应情况如下:

5、Maven生命周期与插件

Maven对项目构建的生命周期划分为3套

  • clear:清理工作
  • default:核心工作,例如编译、测试、打包、部署等
  • site:产生报告、发布站点等

clear生命周期

clean:清理工作

  • pre-clean:执行一些在clean之前的工作
  • clean:移除上一次构建产生的所有文件
  • post-clean:执行一些在clean之后立刻完成的工作

default生命周期

default:核心工作,例如编译,测试,打包,部署等

这里面的事件非常的多,如下图

对于default生命周期,每个事件在执行之前都会将之前的所有事件依次执行一遍

site生命周期

site:产生报告,发布站点等

  • pre-site:执行一些在生成站点文档之前的工作
  • site:生成项目的站点文档
  • post-site:执行一些在生成站点文档之后完成的工作,为部署做准备
  • site-deploy:将生成的站点文档部署到特定的服务器上

插件

插件:

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件
  • maven默认在各个生命周期上都绑定了预先设定的插件来完成相应功能
  • 插件还可以完成一些自定义功能

插件的配置方式如下:我们以打包源码为例

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <excution>
                    <goals>
                        <!--当goal属性的值为test-jar时,是对测试代码打包-->
                        <goal>jar</goal>
                    </goals>
                    <phase>generate-test-resources</phase>
                </excution>
            </executions>
        </plugin>
    </plugins>
</build>

在IDEA右侧maven-project操作面板上可以看到

这样在IDEA左侧 target目录下就会有我们的源码包

6、解决Maven中遇到的问题

1.每次创建Maven项目都要配置Maven版本的解决办法

进行maven全局配置

2.maven默认web项目中的web.xml版本问题

解决办法:替换为webapp4.0版本和tomcat一致,在我们配置的tomcat目录下可找到新web.xml代码

  • tomcat - webapps - root - WEB-INF- web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">
</web-app>

3.约定大于配置

maven由于它的约定大于配置,我们之后可能遇到我们写的配置文件,无法被导出或者生效的问题

什么意思?


  • 在java目录下新建properties
  • 在resources目录下新建properties
  • 启动tomcat
  • 我们发现java和resources都被打包到了同一个路径下:classes,我们俗称这个路径为classpath
  • java目录下的properties并没有被打包,resources目录下的properties被打包了,这就是我们说的我们写的配置文件,无法被导出或者生效

解决方案:

<!--在build中配置resources,来防止我们资源导出失败的问题-->
<!--resources下的properties、xml都可以导出-->
<!--java下的properties、xml都可以导出-->
<build>
    <resources>
        <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
        </resource>
        <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
        </resource>
    </resources>
</build>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值