maven超详细入门,从下载到配合新版idea使用

本文详细介绍了Maven的下载、配置与IDEA的全局设置,包括更改配置源、配置本地仓库。接着讲解了如何引入依赖和插件,以及插件Tomcat的使用和切换。还探讨了Maven的常用命令、自定义骨架、依赖传递与统一聚合管理,并展示了处理依赖冲突的方法。此外,文章还提供了一个依赖冲突的解决案例。
摘要由CSDN通过智能技术生成

1.maven下载与配置

1.1 环境搭建

首先检查前置环境,先检查自己是否已经配好jdk,再做之后的安装工作。
在这里插入图片描述
然后去官网下载maven,网址:https://maven.apache.org/download.cgi,选择二进制zip压缩包下载并解压。
在这里插入图片描述
完成后,找到文件夹目录,复制它的路径。
在这里插入图片描述

接下来配置环境。如果使用win10系统,进入设置主页,点击“系统”。
在这里插入图片描述
在“关于”栏里找到“高级系统设置”。
在这里插入图片描述
点击“环境变量”。
在这里插入图片描述
在“系统遍历”里面,新建“MAVEN_HOME”。
在这里插入图片描述
然后找到“path”,点击“编辑”。
在这里插入图片描述
新建"%MAVEN_HOME%\bin",点击“确定”。
在这里插入图片描述
cmd检查环境是否配置成功
在这里插入图片描述

1.2 更改maven配置源、配置本地仓库

首先我们配置源,因为maven默认是从国外下载包,会存在网络问题,所以我们更换到国内源。
找到maven主目录conf文件夹下的setting.xml(maven的配置文件),打开。
在这里插入图片描述
找到“mirrors"这个标签,把下面这段代码粘贴进去。

	<mirror>  
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf> 
	</mirror>

在这里插入图片描述
这样就使用阿里云的国内镜像了。
接下来配置本地仓库,也就是从镜像下载包的本地存储位置。
在任意一个地方新建一个文件夹,博主为了好找,就在maven旁新建了,取名maven-repository(当前可以不用和我一样)。
在这里插入图片描述
打开conf文件夹下的setting.xml,找到“localRepository”标签,加入刚才建文件夹的路径。
在这里插入图片描述
这样,我们就把本地仓库也配置好了,对了,还得设置maven编译的jdk,把下面这段代码加入setting.xml的“profiles”标签。
在这里插入图片描述
注意,更改maven配置文件,一定得记得保存!

1.3 idea全局配置maven

接下来,配置idea的全局配置,以便我们的每一个idea项目都能使用maven来构建。
博主使用的idea版本是2020.1.3,不同版本的idea对于全局的配置可能会有些许差异。
找到左上角file->New Projects Settings->Settings for New Projects,注意,这里不是去找file->settings,后者只能改变当前项目的maven配置,前者一劳永逸。
在这里插入图片描述
找到Settings for New Projects里面的maven设置,更改maven home directory为maven本地的下载目录,设置配置文件settings.xml存在的目录,Local repository会根据settings.xml里面的配置自动生成,点击OK保存设置。
在这里插入图片描述
这样,我们的maven才能算得上下载完成了。

2.依赖与插件

2.1 怎么引入依赖

我们在idea里面来new一个maven项目,使用webapp这个模板。
在这里插入图片描述
我们把项目命名为“show”,这里有个gav坐标的概念,GroupId表示项目所属的组织,ArtifactId表示该组织下的项目Id,Version表示项目的版本,下面引入具体包就能看到这样的命名方式。
在这里插入图片描述
在这里插入图片描述
最后配置maven,由于我们已经全局配置过了,这里就会自动的匹配到我们的maven,直接Finish。
在这里插入图片描述
项目创建成功,可以看到系统自动为我们生成了pom.xml配置文件,以"dependencies"为标签的表示依赖组,我们可以到官方maven库中去引入依赖,这里以mysql-connector为例,在搜索框搜索mysql-connector。
在这里插入图片描述
进去之后可以看到不同的版本号,一般选择使用最多的引入。
在这里插入图片描述
把这段代码粘贴进pom文件的"dependencies"标签下即可
在这里插入图片描述
粘贴完成之后不要忘了更新maven,引入相应的jar包到本地仓库。
在这里插入图片描述
这样,一个依赖就被引入了。

2.2 怎么引入插件

pom文件里面的“plugins”标签就是引入插件的地方,我们可以看到这里默认已经引入了很多插件,待会儿我们来使用它们,现在先来看看怎么引入,以tomcat为例,idea支持内嵌tomcat插件运行,maven官网提供了插件的引入地址。
在这里插入图片描述
可以看到,这里有一些核心插件和工具插件,可以发现,核心插件里的clean、compiler等我们已经引入了,在下方找到要用的tomcat。
在这里插入图片描述
在这里插入图片描述
选择最近的版本进入。
在这里插入图片描述
选择tomcat7插件,粘贴到pom文件的“plugins”标签中,更新即可导入tomcat插件。
在这里插入图片描述

2.3 插件tomcat与本地tomcat的切换与使用

插件tomcat导入完毕,怎么去使用呢?
打开启动配置,这里添加一个maven配置。
在这里插入图片描述
在这里插入图片描述
在命令行(Command line)输入tomcat7:run,表示以插件tomcat7启动项目。
在这里插入图片描述
点击ok回到主页面,启动项目。
在这里插入图片描述
初次启动可能会下载一些依赖,启动成功如下所示,点击网址就能访问了。
在这里插入图片描述
那么如果我们只想使用本地tomcat,又怎么去配置呢?
仍然打开启动配置,添加一个本地tomcat。
在这里插入图片描述
点击配置,找到本地的tomcat文件。
在这里插入图片描述
在这里插入图片描述
配置完成后,把当前项目发布到本地tomcat,点击“deployment”,再点击加号的“Artifacts”,就可以看到当前项目了,点击ok把它发布进去。
在这里插入图片描述
在这里插入图片描述
回到主页,就能使用本地启动我们的tomcat了。

3.maven常见操作命令

查看当前maven版本。

mvn --version

构建模板项目。

mvn archetype:generate

清理命令:清理项目中编译生成的文件,也就是target目录下的文件

mvn clean

编译命令:将源代码编译为字节码文件,也就是产生target目录文件

mvn compile

打包命令:打包项目,生成对应的jar包或者war包,存储到target目录中

mvn pakage

安装命令:将打包好的jar/war添加到本地仓库中,其他项目能通过这个项目的gav坐标引入使用

mvn install

发布命令:将本地仓库的jar/war发布到私有服务器,方便其他项目远程通过gav坐标使用

mvn deploy

4.自定义骨架

现在用我们的命令来构建一个骨架,添加到本地仓库,方便下次直接使用。
首先找到项目的地址。
在这里插入图片描述
在这个路径进行cmd,执行命令:mvn archetype:create-from-project,发现报错了。
在这里插入图片描述
说的是配置文件不存在,官网对这个报错给出的解决办法是:将maven的安装目录/conf目录下的setting.xml拷贝到C:\Users\young.m2目录下即可。
拷贝完成后重新执行命令,成功。
在这里插入图片描述
接下来,把项目骨架安装到本地仓库:mvn clean install。
安装完成后,需要添加到archetype里面,
首先,我们要知道这个项目的gav坐标,如下所示:
在这里插入图片描述
然后,新建一个项目,点击添加骨架,输入我们项目的gav地址,就可以添加进去了。
在这里插入图片描述
下次创建项目时,就可以直接用骨架,快速开发。

5.依赖传递与统一聚合管理

5.1 依赖范围管理

scope标签表示依赖作用的范围,一图了解各种范围。(注:默认范围是compile)
在这里插入图片描述
在这里插入图片描述

5.2 父子项目依赖传递

我们新建一个项目,骨架使用"quickstart",命名为"mcex01_parent",把它作为父项目,注意父项目的打包方式只能是pom。

<!-- 父项目打包方式 -->
  <packaging>pom</packaging>

然后我们引入一些依赖,这里可以使用依赖的版本管理,即在properties标签使用“依赖.version”的方式,部分代码如下所示:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <junit.version>4.11</junit.version>
    <spring.version>5.2.8.RELEASE</spring.version>
    <log4j.version>1.2.17</log4j.version>
  </properties>

  <!-- 父项目中的基本依赖 -->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>

	<!-- 这里和上面一样,统一使用了一个版本 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>${spring.version}</version>
    </dependency>
  </dependencies>

接下来通过dependencyManagement标签可以设置父项目统一管理依赖,这些依赖不会导入父项目中,在子项目才会导入。

  <!-- 父项目中统一管理的依赖:依赖容器,在子项目中使用的时候才会引入 -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

父项目就做那么多,看看子项目怎么实现。
新建一个项目,骨架使用"quickstart",命名为"mcex01_wiki",把它作为子项目,在pom文件里实现继承。

  <!-- 继承关系:继承一个项目 -->
  <parent>
    <artifactId>mcex01_parent</artifactId>
    <groupId>org.example</groupId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../mcex01_parent/pom.xml</relativePath>
  </parent>
  
<!-- 继承关系中,子项目会自动继承父项目的groupId -->
<!--  <groupId>org.example</groupId>-->
  <artifactId>mcex01_wiki</artifactId>
  <version>1.0-SNAPSHOT</version>

点击刷新,父项目dependencies中的依赖就被添加进来了,但dependencyManagement中的依赖还是没有添加进来,如何使用父项目依赖容器里面的依赖呢?如下所示。

    <!-- 使用父项目中依赖管理器统一管理的依赖 -->
    <!-- 可以不写版本号,依赖版本由父项目统一管理 -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
    </dependency>

5.3 统一聚合管理

在理解了传递依赖后,我们看一下怎么使用这种关系来统一管理项目,新建一个项目,以“quickstart”为模板,命名为"mcex02_aggregation",把它作为父项目,故pom文件要做如下调整。

<packaging>pom</packaging>

接着,我们在此项目上创建"模块",在项目上右键,new->model,以“quickstart”为模板,命名为“”mcex02_wiki"。
创建完成后,可以看到子项目pom文件默认继承了"mcex02_aggregation"。

    <parent>
        <artifactId>mcex02_aggregation</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>mcex02_wiki</artifactId>

    <name>mcex02_wiki</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

而父项目pom也多出了一块东西,表示它的子项目模块。

  <modules>
    <module>mcex02_wiki</module>
  </modules>

这样做有什么好处呢?
当我们在对项目进行打包的时候,只需要对父项目打包,其子项目也会跟着打包。
(使用pakage命令)

[INFO] mcex02_aggregation ................................. SUCCESS [  0.003 s]
[INFO] mcex02_wiki ........................................ SUCCESS [  2.149 s]
[INFO] mcex02_note ........................................ SUCCESS [  0.761 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.990 s
[INFO] Finished at: 2021-06-23T23:32:51+08:00
[INFO] ------------------------------------------------------------------------

这样就能提高项目之间的整体性,便于系统继承与维护。

6 项目中的依赖冲突

有时候,A依赖于1.1版本的C,而B依赖与1.2版本的C,这时我们同时引入A和B,启动项目就会报错,怎样去找到冲突的位置呢?
idea提供了“依赖图”这样的方式,在这里,我们同时引入了“commons-beanutils”和“poi”两个依赖。

<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>

        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.5-FINAL</version>
        </dependency>

在pom文件里右键,点击“diagrams->展示依赖”,如图所示。
在这里插入图片描述
可以看到标红的地方提示版本冲突,这个怎么办呢?
一般情况下,高版本能适配低版本,我们只需要把原本依赖低版本的那一个改为依赖高版本就可以了。在这里使用的方法是“exclusion”标签,使它原本的配置失效,进而就能使用我们的新配置了。

        <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>

        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.5-FINAL</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

至于这里谁引用了低版本,我也不知道,挨个试吧,可以通过右侧栏引入的依赖看到,若是引用了高版本,说明去除正确,若是反而引用了低版本,说明去反了。
下面给出去反了的例子:
在这里插入图片描述
正确去除后,可以看到我们的依赖冲突没有了。
在这里插入图片描述

7 参考视频课

慕课Maven项目依赖管理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值