Maven 详解!

1、Maven 简介

Maven 是一个项目管理工具,可以对 Java 项目进行自动化的构建和依赖管理。在JavaWeb开发中,使用Maven 可以极大地方便我们导入jar包。Maven的高级之处在于:它会帮助我们导入我们所需jar包所依赖的所有jar包。

Maven的核心思想是:约定大于配置。即:Maven会规定好我们该如何去编写我们的Java代码(如:项目的目录结构等),我们必须要按照这个规范来,不要去违反。

2、下载安装Maven

在官网:https://maven.apache.org 下载Maven安装包apache-maven-3.8.6-bin.zip

Maven 详解!


  • apache-maven-3.8.6-bin.zip解压的安装目录下即可直接使用。

3、Maven目录分析

Maven 详解!

4、配置Maven环境变量

  • 在“高级系统设置”中配置“环境变量”的“系统变量中”进行如下配置:

Maven 详解!


如下图所示:

Maven 详解!


Maven 详解!

  • 环境变量配置后,在cmd窗口输入如下指令:mvn -version,,检验是否配置成功。若配置成功则返回Maven的版本信息。如下图所示:

    Maven 详解!

5、配置Maven配置文件

在maven安装目录下conf目录下修改settings.xml配置文件。

5.1、配置阿里云镜像

为了加速我们下载jar包,国内建议使用阿里云的镜像。在<mirrors>……</mirrors>中添加:

<!-- 阿里云镜像 -->
<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>

注:①一定不要配置已经失效的镜像,否则会导致导包有问题,②我们可以在此配置多个镜像。

5.2、配置Maven的本地仓库

在Maven安装目录下,新建一个maven-repository文件夹用来存放我们项目的依赖jar包,并在配置文件中将其设置为我们的本地仓库:

<!-- 本地仓库 -->
<localRepository>D:Environmentapache-maven-3.8.6maven-repository</localRepository>

注:settings.xml配置文件中默认的本地仓库地址:${user.home}/.m2/repository,如下图所示:

Maven 详解!

配置成功后,以后我们使用Maven导入的jar包就都在此了。

6、使用IDEA创建Maven项目

6.1、使用Maven项目模板创建Web项目(了解)

(1)启动IDEA,使用Maven的webapp模板创建一个MavenWeb项目。

Maven 详解!


Maven 详解!

(2)填写项目基本信息(传说中的Maven GAV)。

Maven 详解!

(3)配置Maven的安装目录、配置文件和本地仓库目录信息后,点击Finish按钮,完成MavenWeb项目创建。此时,Maven会自动从阿里云上导入大量jar包到本地仓库。

Maven 详解!

注: Bundled(Maven 3)是IDEA默认自带的Maven,它的可配置信息非常少。我们这里选择的是自己下载安装的Maven,如下图所示。

Maven 详解!

(4)等待项目初始化完毕,直至消息窗口出现BUILD SUCCESS,表明项目创建成功。如下图所示:

Maven 详解!

(5)此时,查看Maven本地仓库,会发现里面已经下载了许多jar包。

(6)点击File下的Settings菜单,检查项目中maven的相关配置是否正常。

Maven 详解!

注:IDEA在项目自动创建完成后,Maven home directory经常会指向IDEA默认的Maven目录。如果出现该问题,我们需要手动将其修改为我们自己的Maven安装目录。

(7)Maven的高级配置:建议选中“自动导入源”码选项。

Maven 详解!

(8)使用Maven项目模板自动创建的MavenWeb项目目录如下图所示。

Maven 详解!

注:我们一般不直接使用Maven的项目模板创建Web项目,而是将普通的Maven项目手动转化成Web项目。

6.2、创建普通的Maven项目(掌握)

(1)在上述MavenWeb项目打开的基础上,点击FileNew Projects SetingsSettings for New Prijects菜单修改IDEA的全局默认配置

Maven 详解!

(2)对Maven的安装目录、配置文件和本地仓库进行全局设置

Maven 详解!

(3)点击FileNewProject菜单,使用Maven创建一个普通的maven项目。此时,不选择使用模板,直接点击next按钮。

Maven 详解!

(4)填写项目基本信息(传说中的Maven GAV)。

Maven 详解!

(5)点击Finish按钮,并选择在新窗口中打开,这样便完成普通Maven项目的创建。

Maven 详解!

(6)这样我们的Maven普通项目便创建好了。使用IDEA创建的普通Maven项目目录如下图所示:

Maven 详解!

附:IDEA全局配置和项目配置

  • IDEA中的FileNew Projects SetingsSettings for New Prijects菜单或IDEA欢迎界面下方的ConfigureSetings菜单均为全局配置,对所有的新项目均有效。

    Maven 详解!

  • IDEA中的FileSetings菜单是项目配置,仅对当前打开的项目有效。

7、Maven版本和JDK版本匹配问题(重点)

(1)现象描述

上述MavenWeb项目和Maven普通项目虽然创建成功了,但当我们使用Maven编译/运行该项目时会发现:Maven虽然会把依赖包导入到本地仓库中,也不报错,但在左侧项目栏的External Libraries目录下始终只有JDK的包,右侧Maven窗口中也无法生成该项目的PluginsDependencies组件包

Maven 详解!

(2)问题分析

  • Maven窗口中右键打开Maven的配置文件,此时会发现配置文件中有两个错误。

Maven 详解!

  • 点击HelpShow Log in Explorer菜单打开IDEA日志文件idea.log。(最新的日志在最下面)

Maven 详解!

  • 查看IDEA日志文件发现有函数找不到。

Maven 详解!

  • 经分析,是Maven版本过高,和jdk版本不匹配造成的。

(3)解决方法

将Maven版本更换为maven-3.6.1,让Maven版本与JDK1.8版本相匹配(IDEA2020.2)。具体步骤如下:

  • 重新下载安装apache-maven-3.6.1

  • 重新配置Maven环境变量。

  • 重新配置阿里云镜像和本地仓库。

  • 重新对Maven的安装目录、配置文件和本地仓库进行全局设置。

  • 通过FileInvalidate Caches/Restart菜单,清除缓存并重启项目。

Maven 详解!

此时,我们便可以正常使用Maven编译/运行项目了。左侧项目栏的External Libraries目录下除了JDK的包外会生成Maven导入的依赖包,右侧Maven窗口中也会生成该项目的PluginsDependencies组件包。

Maven 详解!

8、IDEA标记文件夹

IDEA中不同颜色的文件夹用于存放不同类型的文件。对于新建的文件夹,我们采用以下两种方法进行标记。

例:在上述新建的MavenWeb项目基础上,新建javaresource文件夹。

方法一:通过右键mark directory as菜单直接对文件夹进行逐一标记。

Maven 详解!

方法二:通过右键FileProject Structure(项目结构配置)菜单对所有文件夹进行统一标记。

Maven 详解!

注:target目录是IDEA默认的编译路径,用来存放项目的:文件和目录、jar包、war包、class文件等。

9、Maven侧边栏的使用

Maven的常用命令行操作(双击即可执行):

  • clean(清理):对项目进行清理,删除target目录下编译的内容。

  • compile(编译):编译项目源代码。

  • test(测试):对项目进行运行测试。

  • package(打包):打包文件并存放到项目的target目录下,打包好的文件通常都是编译后的.class文件。

  • install(安装):在本地仓库生成仓库的安装包,可供其他项目引用,同时打包后的文件放到项目的target目录下。

  • deploy(部署):在整合或者发布环境下执行,将最终版本的包上传到远程的repository,使得其他的开发者或者工程可以共享。

Maven 详解!

10、pom.xml

pom.xml是Maven的核心配置文件。

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">

  <!-- 当前POM模型的版本 -->
  <modelVersion>4.0.0</modelVersion>

  <!-- 这就是我们创建项目时配置的GAV -->
  <groupId>com.atangbiji</groupId><!--项目组织的唯一标识符 -->
  <artifactId>javaWeb-01-maven</artifactId><!--项目的唯一标识符 -->
  <version>1.0-SNAPSHOT</version><!--版本号 -->
  <!-- 项目的打包方式:(1)jar包:Java应用(2)war包:JavaWeb应用 -->
  <packaging>war</packaging>

  <!-- 项目的名称, Maven产生的文档用(了解) -->
  <name>javaWeb-01-maven Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <!-- 项目主页的URL, Maven产生的文档用(了解) -->
  <url>http://www.example.com</url>

  <!-- 属性 -->
  <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>
  </properties>

  <!-- 项目依赖(重点) -->
  <!-- Maven的高级之处在于:它会帮助我们导入我们所需jar包所依赖的所有jar包。 -->
  <dependencies>
    <!-- 具体依赖的jar包配置文件 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
    <!-- 注:以后我们要学习的MybatisRedisSpring、SpringMVC等内容所依赖的jar包均在此配置 -->
  </dependencies>

  <!-- 项目构建用到的插件 -->
  <build>
    <!--可以在此对target目录下mvn clean package打的jar包进行重命名-->
    <finalName>javaWeb-01-maven</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

注1:dependencies(项目依赖)使我们关注的重点,以后我们要学习的mybatis、redis、spring、SpringMVC等内容所依赖的jar包均在此配置。它与Maven窗口中的dependencies目录和项目窗口中的External Libraries是对应的。

Maven 详解!

注2:由于Maven的“约定大于配置”思想,我们以后可能会遇到我们自己写的配置文件(如:我们配置文件*.xml写在了项目中的Java目录下)无法被导出或者无法生效的问题。该问题的解决方法是:在pom.xml<build>……</build>中配置resources,修改Maven约定的过滤条件,来防止我们的资源导出失败。

<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
  <resources>
    <!--选择需要导出资源的路径,可以选择多个-->
    <resource>
      <directory>src/main/resources</directory>
      <!--写入需要导出的什么类型的文件-->
      <includes>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
      </includes>
      <!--不去过滤这些文件-->
      <filtering>false</filtering>
    </resource>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
      </includes>
      <!--不去过滤这些文件-->
      <filtering>false</filtering>
    </resource>
  </resources>
</build>

11、Maven导包dependencies机制

11.1、依赖机制介绍

  • Maven仓库是通过dependency(依赖)机制进行jar包导入的。

  • dependency机制是通过在配置文件pom.xml中的手动添加标签来实现的。 具体代码由Maven在线仓库处获得。具体步骤如下:

(1)在Maven的在线仓库 (https://mvnrepository.com/ ) 中搜索目标jar包。

Maven 详解!

(2)选择合适的版本。(一般选使用者较多的版本)

Maven 详解!

(3)复制Maven的dependency依赖代码。

Maven 详解!

(4)将代码粘贴到pom.xml文件的<dependencies> ... </dependencies>标签中。

Maven 详解!

(5)重新加载Maven项目。此时,Maven便会自动帮我们下载相关依赖包。pom.xml文件中的dependenciesMaven窗口中的dependencies目录和项目窗口中的External Libraries是对应的。

Maven 详解!

11.2、项目jar包结构树

点击Maven依赖结构树生成按钮,会生成该项目中各依赖包之间的关系树,如下所示:

Maven 详解!


关注 “阿汤笔迹” 微信公众号,获取更多学习笔记。

原文始发于微信公众号(阿汤笔迹):Maven 详解!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/259501.html

(0)
服务端技术精选的头像服务端技术精选

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!