Maven详细教程(图文并茂)(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Maven详细教程(图文并茂)

2.3、mvn test


test命令的作用是编译并运行maven项目的src/test目录下的junit测试代码。注意:只能运行junit测试代码。 并且使用test运行的测试类的类名必须以Test结尾,否则不会运行,不会看到结果。


在test/java目录下创建一个测试类,书写测试方法,代码如下:


import org.junit.Test;
public class MavenTest {
    @Test
    public void show() {
        System.out.println("show....");
    }
}


在dos窗口输入的测试命令:


mvn test



编译后生成的文件:



运行日志:



注意:


1.test命令只能运行test目录下的junit包下的类


2.test命令也可以运行多个测试方法:


import org.junit.Test;
public class MavenTest {
    @Test
    public void show() {
        System.out.println("show............");
    }
    @Test
    public void show1() {
        System.out.println("show1............");
    }
    @Test
    public void show2() {
        System.out.println("show2............");
    }
}



2.4、 mvn package


package命令是将项目打包成可以发布的包。maven项目常见的打包方式有两种:


1)maven的java project会打成jar包。


2)maven的web project会打成war包。


打包完成后将生成的文件存放在target目录中。


命令使用格式:


mvn package




注意:每次打包前还会再次执行所有test命令




2.5、 mvn install


install命令是将当前的项目打包并发布到本地仓库中,供本地的其他maven项目使用。项目发布的路径:本地仓库路径/groupId/artifactId/




注意:每次安装前还会再次执行所有test命令


2.6、mvn tomcat:run


tomcat:run表示部署项目,项目上线运行。能够部署项目都是web项目。我们这里演示部署web项目。


这里启动tomcat并不是使用idea中的tomcat,而是maven自带的。所以我们部署好项目之后发现idea中的tomcat并没有启动。




停止服务器:



无法访问服务器了:



注意:使用maven在命令行中部署项目,一定要停止idea中的tomcat。否则,在命令行中不会启动成功tomcat。


3、maven生命周期相关插件


maven的核心包只有几兆大小,核心包中仅仅定义了抽象的生命周期。生命周期的各个阶段都是由插件完成的,它会在需要的时候下载并使用插件,例如我们在执行mvn compile命令时实际是在调用maven的compile插件来编译java源码:



我们使用IDEA创建maven项目后,就不需要再手动输入maven的命令来构建maven的生命周期了。IDEA给每个maven构建项目生命周期各个阶段都提供了图形化界面的操作方式。具体操作如下:


3.1 打开maven视图


依次打开:View–》Tool Windows–》Maven Projects



打开IDEA编辑区右侧:Maven Projects会弹出如下窗口,打开窗口中的Lifecycle即可看到相关命令。



3.2 执行命令


双击Lifecycle下的相关命令图标即可执行对应的命令。或者点击运行按钮:



五、maven应用详解【重点】


maven是一个项目管理工具,其中依靠于一个很重要的xml文件:pom.xml。我们接下来学习下pom.xml文件的配置。


1、pom配置详解


pom(Project Object Model)指的是项目对象模型,用来描述当前的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>
    <groupId>com.heima.maven</groupId>
    <artifactId>maven-web2</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
</project>


【pom文件详解】


1. <project> :pom文件的根标签,表示当前maven项目;
2. <modelVersion>: 声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,目前POM模型版本是4.0.0;
3. 坐标:定位项目在本地仓库中的位置,下面三个标签组成一个坐标。
    1)<groupId>:maven项目组织id标识符,一般是公司域名倒过来写<groupId>com.heima.maven</groupId>
  2)<artifactId>:项目的标识符--项目名。<artifactId>maven-web2</artifactId>
  3) <version>:项目的版本号;<version>1.0-SNAPSHOT</version>
4. <packaging>:maven项目的打包方式一般配置jar或者war;


2、依赖管理【重点】


Maven的作用:1.构建项目(maven项目在任何一个开发工具中结构都是一样的)及项目的生命周期;2.依赖管理;3.插件管理;


Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们之前说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能在其它项目中进行依赖引用。


2.1 Maven坐标


坐标的定义元素如下:


  1. groupId:定义当前项目(jar包)隶属的实际项目组。


  1. artifactId:定义当前项目(jar包)的名称;


  1. version:定义当前项目(jar包)的版本号;


通过上面三个参数我们就能够确定一个唯一版本号的jar包。


<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.2.RELEASE</version>
</dependency>


2.2 依赖导入


1、使用IDEA工具导入:


IDEA中给我们提供了一种搜索jar包的方式,帮助我们快速导入jar包。使用方法如下:


  1. 第一步:在pom.xml文件中书写dependencies标签,鼠标光标移入到dependencies标签中,按Alt+Insert键。会弹出一个选择框:



  1. 选择Dependency后会弹出一个搜索框:输入要添加的jar包的名字



选择需要的jar包后按回车键即可自动添加此依赖;



注意:在idea中还可以直接输入要使用的包。



2、从远程仓库中获取坐标:


如果我们导入的依赖本地仓库中没有,使用IDEA搜索就搜索不到了,我们需要从网络中查找这个依赖的坐标,然后将其添加到pom文件中。添加完成之后,maven会帮我们从私服或中央仓库中下载该依赖。


搜索依赖坐标的方法:


1.从私服中获取,联网的情况下可以使用阿里云私服,在教室使用局域网可以连接传智私服。


阿里云私服地址:


http://maven.aliyun.com/nexus/content/groups/public


传智局域网私服地址:


http://192.168.50.22:8081/nexus/content/groups/public/


1).这里访问阿里云私服



阿里云首页:


https://maven.aliyun.com




2).复制上述的依赖到pom.xml文件中。



如果私服中也没有找到那么就只能到中央仓库中查找了。


2.在中央仓库中查找:


网址:


http://mvnrepository.com/




将以下坐标复制到pom文件中即可:



pom文件中引入依赖后,会去私服或者中央仓库中下载依赖:如果项目结构的External Librarites中出现刚引入的依赖,则说明依赖引入成功。



3、maven插件


1问题演示


我们在运行javase项目的时候,发现控制台会显示一些1.5已过时的警告。



说明:


当我们点击compile编译的时候发现maven编译的时候使用的插件是:maven-compiler-plugin:3.1:compile (default-compile) 。该插件默认编译的jdk版本是1.5.编译生成的.class文件,让idea中的jdk1.8运行,1.8的jdk运行1.5编译的class文件,会显示已过时字样。所以这里我们需要手动配置下jdk的编译版本,使用jdk1.8.


我们这里需要配置maven的插件。


2maven插件介绍


我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。例如编译源代码是由maven-compiler-plugin完成的,但是这些插件都是maven默认的插件,如果需要配置自己的插件,则需要通过插件的坐标来引入插件。插件的坐标可以从maven官方提供的插件列表进行下载:


Maven官方有两个插件列表:


第一个列表的GroupId为org.apache.maven.plugins,这里的插件最为成熟,具体地址为:http://maven.apache.org/plugins/index.html
第二个列表的GroupId为org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,其地址为:http://mojo.codehaus.org/plugins.html


1.访问网址,找到maven插件,然后点击编译compiler



2.点击用量信息页



3.复制插件



4.将上述复制的内容放到build标签里面


<!--插件管理-->
    <build>
        <plugins>
            <!--编译插件:jdk1.8-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- put your configurations here -->
                    <!--源码-->
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>


5.清除target编译和运行




使用的编译插件是我们自己配置的版本。


直接运行java代码就不会出现警告信息了。jdk的编译和运行版本统一了。


3 编译插件 maven-compiler-plugin


      <!--JDK编译插件-->
            <!--编译插件:jdk1.8-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- put your configurations here -->
                    <!--源码-->
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>


说明:插件都要放在 plugins标签里面。


4 测试插件maven-surefire-plugin



maven的test指令运行测试代码存在中文乱码问题, 用这个插件可以解决


<!--test插件-->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.16</version>
  <configuration>
    <forkMode>once</forkMode>
    <argLine>-Dfile.encoding=UTF-8</argLine>
  </configuration>
</plugin>


附一:完整的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>
    <groupId>com.itheima.sh.heima33</groupId>
    <artifactId>maven-usermanager</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <!--
        依赖管理:
            1、导入依赖:
                idea导入
                私服搜索坐标
            2、依赖范围设置
            3、依赖版本统一维护
       插件管理:
            1、编译插件
    -->
    <!--依赖版本统一管理-->
    <properties>
        <junit.version>4.13</junit.version>
        <servlet.version>3.0.1</servlet.version>
        <jsp.version>2.3.3</jsp.version>
        <beanutils.version>1.8.3</beanutils.version>
        <commons.logging.version>1.1.1</commons.logging.version>
        <jstl.version>1.2</jstl.version>
        <log4j.version>1.2.17</log4j.version>
        <mabatis.version>3.5.0</mabatis.version>
        <mysql.version>5.1.18</mysql.version>
    </properties>
    <!--依赖管理:-->
    <dependencies>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <!--<version>4.13</version>-->
            <version>${junit.version}</version>
            <!--范围:测试存在-->
            <!--<scope>test</scope>-->
        </dependency>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <!--编译 测试需要,运行时不需要-->
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>${jsp.version}</version>
            <scope>provided</scope>
        </dependency>
        <!--commons-beanutils-->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>${beanutils.version}</version>
        </dependency>
        <!--commons-logging-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>${commons.logging.version}</version>
        </dependency>
        <!--jstl-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mabatis.version}</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
            <!--编译不需要。测试和运行需要-->
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
    </dependencies>
    <!--插件管理-->
    <build>
        <plugins>
            <!--JDK编译插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- put your configurations here -->
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>80</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>


附二:清理maven仓库


初始情况下,我们的本地仓库是没有任何jar包的,此时会从私服去下载(如果没有配置,就直接从中央仓库去下载),可能由于网络的原因,jar包下载不完全,这些不完整的jar包都是以lastUpdated结尾。此时,maven不会再重新帮你下载,需要你删除这些以lastUpdated结尾的文件。如果本地仓库中有很多这样的以lastUpadted结尾的文件,可以执行如下脚本来删除:




在上面的bat文件上右键—》编辑 。修改文件:



修改完毕后,双击运行即可删除maven仓库中的残留文件。


附三:更新依赖索引


有时候给idea配置完maven仓库信息后,在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了,具体做法如下:


打开设置----搜索maven----Repositories----选中本地仓库-----点击Update



附四:JDK插件


<!--配置maven的插件-->
<build>
    <plugins>
        <!--配置的是jdk编译器-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <!-- put your configurations here -->
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>


附五:配置idea模板










附六:如果每次都是到私服下载,不优先使用本地仓库




-DarchetypeCatalog=internal


小结


第一章、Maven概述
  1、maven是什么:软件-项目管理工具;
  2、maven的作用:
    【1】构建标准的项目:java,web
    【2】管理项目的生命周期:
    【3】maven管理项目中的jar包(依赖);
    【4】maven管理插件;
  3、maven的下载安装与配置:
    【1】JAVA_HOME配置正确;
    【2】MAVEN_HOME配置正确;   mvn -v
第二章、maven仓库
  【1】作用:存放jar包和插件;
  【2】分类:
      本地仓库:本地的一个文件夹
      远程仓库:远程服务器上的一个文件夹
        中央仓库:apache维护的仓库
        私服:自己搭建的远程仓库
     【3】仓库配置:
      本地仓库配置:
             私服配置:阿里云(外网),传智私服(局域网)
第三章、Maven项目创建-------重点
  【1】把maven绑定到IDEA中:
      file->other settings-->default setting 设置maven环境:maven_home,settings.xml
  【2】使用IDEA创建maven项目:掌握
      创建maven的java项目:普通项目  打包方式为jar
          项目结构
      创建maven的web项目: 打包方式为war
              项目结构
  【3】maven项目的生命周期:
      1、clean:删除项目构建过程中生成的文件(target)
      2、default:
        创建==》编译==》测试==》打包===》安装==》部署上线
      3、site:了解
   【4】生命周期相关命令:命令调用maven的插件执行任务
      mvn clean:清理
      mvn compile:编译
      mvn  test:测试
      mvn package:打包
      mvn install:安装
第四章、maven应用详解 ---------重点
    【1】依赖管理:
      1、坐标:定位一个jar包在本地仓库中的位置
          <dependency>
                        <groupId>jstl</groupId>
                        <artifactId>jstl</artifactId>
                        <version>1.2</version>
                    </dependency>
        2、导入依赖:导入坐标
        本地仓库导入: Alt+Insert
        远程仓库搜索:中央仓库,私服搜索
     【2】依赖配置:
      1、依赖作用范围配置:maven有3套运行环境
      编译环境    测试环境    运行环境(tomcat)
            test     -          是          -          junit.jar
            compile  是        是     是         90%的jar-默认的
            runtime   -         是          是          mysql驱动(实现JDBC结构)
            provided  是        是           -         servlet,jsp
            system    是        是           -
      2、依赖版本统一维护:
        定义版本信息:
         <properties>
                      <junit.version>4.12</junit.version>
                  </properties>
        引用版本信息:
         <version>${junit.version}</version>
    【3】插件管理:
        maven本身是一个插件库:默认的插件(版本低)
        自己配置插件,覆盖默认的插件: 编译插件,测试插件,tomcat7插件
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
6月前
|
Java Linux Maven
Maven下载与安装详细教程
Maven下载与安装详细教程
160 0
|
7月前
|
Java Maven Spring
【操作宝典】IntelliJ IDEA新建maven项目详细教程
【操作宝典】IntelliJ IDEA新建maven项目详细教程
388 1
|
7月前
|
存储 Java Apache
【maven】maven下载、安装与配置详细教程
【maven】maven下载、安装与配置详细教程
414 1
|
4月前
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
111 2
【前端学java】全网最详细的maven安装与IDEA集成教程!
|
5月前
|
XML Java 测试技术
maven教程(4)
maven教程(4)
45 1
|
6月前
|
Java Apache Scala
Maven 教程
Maven,源自Apache,是一个Java项目管理工具,负责构建、依赖管理和文档生成。它支持多种语言项目,基于POM理念,遵循约定优于配置原则,建议统一的目录结构。主要功能包括构建、文档、报告、依赖管理、 SCM、发布及分发。标准目录如:`src/main/java`放源码,`src/test/java`放测试代码,`target`目录用于输出编译结果,`.m2/repository`为默认本地仓库。
|
6月前
|
Java Apache Scala
Maven 教程
Maven是Apache的开源项目管理工具,基于POM进行Java项目的构建、依赖管理和文档生成。它支持多种语言项目,提供约定优于配置的目录结构,如src/main/java存放源码,src/test/java存放测试代码,目标输出目录在target,而~/.m2/repository是默认本地仓库。
|
5月前
|
JavaScript Java Maven
maven教程(3)
maven教程(3)
33 0
|
5月前
|
存储 Java Maven
maven教程(2)
maven教程(2)
26 0