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坐标
坐标的定义元素如下:
- groupId:定义当前项目(jar包)隶属的实际项目组。
- artifactId:定义当前项目(jar包)的名称;
- 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包。使用方法如下:
- 第一步:在pom.xml文件中书写dependencies标签,鼠标光标移入到dependencies标签中,按Alt+Insert键。会弹出一个选择框:
- 选择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插件