使用Maven创建Web项目,并部署到服务器。
Maven是使用Java语言编写的基于项目对象模型(POM)的项目管理工具。开发者可以通过一小段描述信息来管理项目的构建、报告和文档。
使用Maven可以更好的帮助我们完成项目的管理,具体分类:
依赖管理:
Maven给每个项目提供了一个pom.xml文件,我们可以在其中配置我们需要的第三方资源,当pom.xml文件发生变化的时候Maven会重新加载该配置文件,根据配置信息查找对应的第三方资源并导入到项目中使用。
项目构建:
Maven提供了统一的项目构建方式,从编译到部署,并且操作简单。
插件:
Maven提供了丰富的插件,比如项目打包插件,测试插件,Tomcat插件等等。
Maven工具会根据pom模型(pom.xml)加载当前项目需要使用的资源。
每次加载都是从本机某个指定的文件夹去加载。如果本机文件夹中没有这个资源,会从Maven远程服务器中下载到本机文件夹,Maven再去加载本机文件夹中资源。
专业概念:
中央仓库(Central Repository):Maven官方服务器。里面存放了绝大多数市面上流行的jar。也允许用户注册后,上传自己的项目到官方服务器。
本地仓库(Local Repository): 本机的文件夹。 镜像仓库(Mirror Repository):对于国内来说,访问国外的Maven仓库会特别慢。镜像仓库就是另一台备份/复制了中央仓库的服务器。平时使用时国内开发者多使用阿里云镜像或华为云镜像,这样可以大大提升从中央仓库下载资源的速度。
资源坐标:每个Maven需要使用的资源都有一个坐标,通过坐标可以精确告诉服务器需要的是哪个资源由三部分组成:
GroupId:一般是逆向公司域名 com.sh。同一个公司的GroupId都是相同的。
ArtifactId:一般是项目(jar)名 mysql-connector-java。
Version:版本号 8.0.28。
Ant和Maven都是Apache的项目管理工具,也都是Java程序非常常用的编译、运行、测试、打包工具。虽然都是项目管理工具,但是因为Maven就是基于Ant研究出来的,可以说Ant有的功能Maven都有,但是Maven有的功能Ant不一定有。
无论是IDEA还是Eclipse,Java项目都默认使用Ant进行项目的管理。在老Ant项目中需要自己添加build文件,但是在目前的java项目中已经不再需要自己进行管理,都是通过idea或eclipse帮助管理即可。
Maven项目在创建时需要明确的指定项目类型为maven项目,整个Maven项目采用约定的方式,文件等内容都有固定的位置,通过pom模型进行管理项目。同时Maven具有中央仓库和本地仓库,这点也是优于Ant的一大特点,在移植项目时只需要移植源码即可。并且Maven项目是有完整生命周期的,而Ant是没有的。
Maven是一款独立的软件,可以独立运行,也可以集成到IDEA中运行。这点和Tomcat有点像(可以独立运行,也可以集成到IDEA中。但是集成后使用更加方便)。
首先我们从maven官网下载Maven,官网地址:Maven – Welcome to Apache Maven 。
进入到官网后,点击logo下的download进入到下载页面
Binary是二进制文件,是class文件
Source是带有源码的文件
从官网下载的是zip格式,解压缩后就可以直接使用,但是建议安装目录中不要包含中文(作为一个程序员,不管什么情况下路径都不要出现中文,这是软件安装过程中能够减少出错非常重要的原因)。
maven的安装目录:
编辑安装目录下的conf子目录中的settings.xml文件,完成如下配置。
Maven默认情况下会把C:/用户/用户名/.m2/repository目录当作本地仓库目录.
.m2和repository默认不存在,Maven会自动创建这两个文件夹。
也可以自己设置本地仓库的路径
配置时注意:
1. 一定要在
标签里面配置
。
2. 注意本地仓库文件夹路径的斜杠方向。直接从Windows系统中复制过来的路径中斜杠是右斜杠,而Maven配置本地目录时斜杠为左斜杠。
中央仓库的访问速度比较慢,所以我们一般使用国内的镜像仓库。常用的两个镜像仓库是阿里云或华为云。
在settings.xml中找到
标签,在里面配置上
表示镜像代理。
alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central
huaweicloud * https://mirrors.huaweicloud.com/repository/maven/
在使用Maven后,项目由Maven来完成编译和打包运行,需要指定使用的JDK版本。
Maven的底层也是Java编写的;
在settings.xml中找到
标签,在里面配置上
。
jdk-11 true 11 11 11 11
jdk-1.8 true 1.8 1.8 1.8 1.8
为了使Maven在其他路径下也能使用,我们也需要配置环境变量
Maven环境变量配置和JDK的环境变量配置类似。需要先找到环境变量配置窗口,步骤如下:
我的电脑 -> 鼠标右键点击 -> 属性 -> 高级系统设置 -> 高级 -> 环境变量 。
在命令行工具中输入:mvn -version查看。只要没有提示没有这个命令,说明环境变量配置成功了。
下图为正确执行命令后的显示效果,一共5行输出,分别代表:
(1)当前Maven的版本。
(2)Maven安装的主目录。这个值和环境变量配置的MAVEN_HOME的值是相同的。
(3)所依赖的Java版本。
(4)使用哪国语言及默认编码。
(5)系统名称、版本、架构、具体系统分类。
在计算机D盘根目录下新建Java项目。Maven项目有着严格项目结构要求。必须按照下面结构创建。
注意:
(1)项目名:名称最好是英文名称。
(2)下面每个缩进都表示子文件夹的意思。例如:src是项目文件夹的子文件夹、main是src的子文件夹、main和test是同级目录。
(3)pom.xml和src是同级的。把pom.xml直接复制粘贴到自己创建的项目文件夹根目录下。
项目名 src main java resource test java pom.xml
注意:test目录下也可以有resource
在Windows系统中打开命令行工具(快捷寻找:Win R,在呼出框“运行”中输入cmd)。
在命令行依次输出下面命令。需要注意:mvn install必须在项目文件夹内运行。
需要的文件也已经下载
IDEA 菜单 File -> Settings -> Build,Execution,Deployment -> Build Tools -> Maven。
IDEA中默认已经集成了Maven(安装IDEA时,IDEA软件里面已经包含了Maven软件,不需要单独下载Maven),可以不用做任何修改。如果想要修改,可以按照图示(1)(2)(3)箭头所指进行修改即可。(建议不修改,此处只是为了让同学知道IDEA中Maven如何进行修改,以后在公司内如果碰见了需要修改的情况,也难不住同学们)。
默认情况:
(1)默认IDEA 2019.2.4中集成3.6.1。安装上IDEA已经自带了这个Maven,不需要去官网下载。
(2)User settings file:默认集成Maven的配置文件,请注意此目录。通过勾选(2)箭头所指复选框,可以修改配置文件路径。 (3)Local repository: 本地仓库路径。和配置文件是同一个文件夹。 通过勾选(3)箭头所指复选框,可以修改本地仓库路径。
下面这个重要技巧一定要学会
重要技巧: 可以直接在C:/用户/用户名/目录下新建.m2文件夹(如果已经有了.m2就不用新建了),去今天授课目录/软件目录中把settings.xml文件粘贴到.m2目录中。
settings.xml文件中的maven的版本号要和idea中的maven相互匹配,否则还是默认的本地仓库
IDEA 菜单 File -> New -> Project ...
或者在主页Create New Project
每个Maven项目都有自己的坐标。
GroupId:公司网址倒写。我们在尚学堂学习过程中,GroupId都写成com.sh。
ArtifactId:项目名。项目名随意起,不建议写成中文。示例中叫做ideamaven。
Version:默认就有。目前对我们来说不需要修改。其中1.0 表示版本号,SNAPSHOT表示快照(当Version中带有SNAPSHOT发布到中央仓库或私服时会上传到快照库。而Version中不带有SNAPSHOT的项目会发布到public库。由于我们也不使用私服,所以带不带SNAPSHOT没有影响)。
每个目录解释说明如下:
ideamaven // 项目名。
.idea // IDEA中所有项目都会生成这个文件夹。
src
main
java // 所有.java源文件存放位置。
resource // 除了.java文件,其他文件都放入到这个目录。编译候会把此目录所有内容直接放入到classes目录。
test
java // 所有测试类的目录。
ideamaven.iml // IDEA配置文件,IDEA中项目都会生成这个文件。
pom.xml // Maven最重要的文件,学习Maven很大一部分都在学习此文件如何编写。
External Libraries // 当前项目所有依赖的jar。
整个项目中唯一需要说明的就是pom.xml文件。
创建的Maven项目在pom.xml中默认生成下面内容:
4.0.0
com.sh
Maven01_test
1.0-SNAPSHOT
其中
是根标签,必须得有的。
自动生成,指定pom默认版本。对于Maven 2.x、Maven 3.x中modelVersion必须是4.0.0。
、
、
表示当前项目的坐标,里面信息都是在新建项目时填写的信息。
为了演示编译后的目录结构。在项目的src/main/java中新建com.sh.Test类,并在类中编写主方法,输出Hello。
在com.sh包下新建test.txt文件(这个文件只要不是.java文件,都能演示出我们最终结果。
并且在src/main/resources中新建readme.txt(随意新建一个任意名称,任意类型的文件,文件里面也不需要写任何内容)。
运行Test类。
运行后会在当前项目中自动生成target目录。target/classes 目录就是项目编译后的类目录。
(1)src/main/java 编译后不存在了。只保留里面的包和类,并且类被编译成.class文件,放入到target/classes目录中。
(2)src/main/java 编译后不存在了。
(3)src/main/resources 编译后不存在了。把resources目录里面所有的内容直接放入到classes目录中。
在Maven项目中约定是src/main/java 只编译.java 文件,src/main/resources编译资源文件。
如果由于一些原因,必须在src/main/java中放置一些非.java文件(例如:MyBatis框架中就有这样的场景),还希望Maven去编译这些文件,这时就必须配置资源拷贝插件。
就是在java源码中也可能需要一些并不是.java的文件,但是在编译之后生成的target中并不会编译保存这些文件,为了解决这个问题,需要配置拷贝插件
里面可以配置一些插件信息。
配置的目录。
标签明确配置哪些文件也需要被编译。
表示是否对拷贝的资源进行过滤。简单理解:对资源内容进行处理。
就是可能有些资源带有${project}这种引用赋值,为了能够解析到,设置filtering:为true
src/main/java
**/*.txt
true
src/main/resources
true
Maven的项目类型有三种:
jar:相当于我们之前使用idea创建的java项目。打包主要打包.class文件。
war:web项目类型。打包时除了src中内容,还会包含webapp目录,要比jar类型文件打包的内容更多。
pom:聚合项目中使用。聚合项目中如果一个项目为父项目,项目类型应该为pom类型。当项目类型为pom类型时,表示该项目除了会配置pom.xml以外不会有任何其它类或资源文件。
在pom.xml文件中通过
设置项目类型。
pom.xml中默认没有配置
标签。当没有配置
时等效于
。
使用Maven创建Web项目有两种方式:
(1)创建普通Maven项目,手动添加webapp目录。
(2)使用原型创建Maven项目,手动添加src目录。
示例中创建了名称为mavenweb1的项目。
在src/main下新建webapp/WEB-INF/web.xml。
web.xml文件可以直接复制过来。
web.xml
必须按图中格式创建
创建的webapp目录默认是不会被编译的,右键点击webapp目录时, 选择New也没有JSP文件。
选择IDEA菜单 File -> Project Structure...
分别点击 Modules -> + -> Web
使用原型创建web项目,在新建项目部分就有区别:
1. 先勾选create from archetype前面的复选框。
2. 然后选择org.apache.maven.archetypes:maven-archetype-webapp
使用原型创建的项目自动包含webapp文件夹,且文件夹图标里面有个点,说明已经设置了web模块。里面已经包含了META-INF/web.xml,还自动包含了index.jsp
但是项目里面没有编写Java类的目录,需要手动添加。在src/main下新建java文件夹。
resources和test同理设置
Web项目想要运行是无法离开Servlet容器的。Maven管理的Web项目也需要有Servlet容器的。我们学习过的Servlet容器就是Tomcat。
Maven的Web项目发布到Tomcat中,有两种方式:
(1)使用本机的Tomcat。
(2)使用Maven的Tomcat插件。
都是将项目导成war包
使用本机的Tomcat和之前的Java EE项目发布步骤相同。需要在自己计算机中单独下载Tomcat软件。
如果使用原型创建的web项目IDEA已经帮助创建了Artifact。
如果没有使用原型,后添加web模块方式,是没有Artifact的,这时就需要手动添加。
点击IDEA菜单 File -> Project Structure...
Exploded:直接生成一个目录(开发)。分散的
Archive:生成一个war包(部署)。集合的
点击IDEA工具栏的Add Configuration...
添加Tomcat Server。
与之前项目配置一样
选择自己的Tomcat,如果之前没有配置过,点击右侧的Configure...按钮进行配置
按图所示添加Artifact。如果点击加号后没有Artifact,说明了步骤2.1没有做。
在IDEA工具栏上选择刚刚添加的Tomcat Server,然后点击绿色三角的启动按钮。
Maven带有插件功能,可以把其他软件集成进来,对Maven的功能进行扩展。
使用Tomcat插件不需要在本机下载Tomcat软件,由Maven自动下载插件,插件中包含了Tomcat软件
在项目的pom.xml中配置Tomcat插件。
配置时包含两个步骤:
(1)设置项目类型为war,这个事情后面总有人忘记。如果没有修改成war,运行时控制台会显示BUILD SUCCESS。而不是正常web项目启动日志。
(2)在
中添加Tomcat7插件
4.0.0
com.sh
mavenweb2
1.0-SNAPSHOT
war
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
/${project.artifactId}
8080
点击IDEA右侧Maven面板,选择要运行的项目 -> Plugins -> tomcat7 -> tomcat7:run
可以设置多个端口号,启动多个Tomcat
正常关闭和重启都是在控制台中进行操作。
如果当前有一个Tomcat在运行,而又去点击Maven面板的tomcat7:run 会在Run面板上面选项卡又出现了一项,并且在控制台提示端口号冲突。
在POM模型中定义了三种关系:依赖、继承、聚合。
Maven基于POM模型的项目管理工具,所以这三种关系在Maven中都存在。
其中依赖关系可以说从学习完Maven每天都使用的,继承关系会在学习完Spring Boot后经常使用,聚合关系一般都出现在分布式、微服务架构的项目中。
当一个项目需要使用到其他项目的内容时,就可以使用依赖。
只要依赖的项目(可以是自己的项目,也可以是开源项目)存在于本地仓库,就可以通过pom.xml的
标签填写坐标实现依赖关系。
开源项目的坐标是不需要记忆的,可以通过Maven中央仓库查询网站查询需要依赖的项目。网址:https://mvnrepository.com/
例如:想要查询MySQL驱动包可以直接在搜索框中输入mysql,点击search按钮进行查询。第一个就是需要的驱动包,点击mysql-connector-java进入下个界面。
找到对应版本
直接把红色方框的内容复制到项目的pom.xml中,第一行注释不用复制,只复制整个
标签就行。
需要在pom.xml中添加
标签,此标签下面可以有多个
子标签,表示当前项目所有依赖的项目。
配置后可以点击Maven面板左上角的刷新按钮。
可以通过项目左侧查看依赖是否导入成功,如果导入成功会出现当前项目导入的内容。
假设项目A依赖项目B,项目B依赖项目C,这时会发现项目A中包含了项目C的依赖,这就是依赖的传递性。
新建Maven项目名称为mavenweb03。
在项目2中直接点击Maven面板的install,表示把项目安装到本地仓库。根据Maven加载原理知道,Maven都是从本地仓库加载内容的,所以此处需要install一下。
小提示:
install命令可以使项目导入一个jar包或者war包,也会将该包保存在本地仓库中
2中有一个Test类
3依赖之后也可以使用Test类
3中也有mysql的依赖
依赖具有传递性
a -> b -> c c中既有b得依赖也有a得依赖
当项目中依赖内容比较多时,可能出现重复依赖的问题,尤其依赖传递性导致的重复依赖。
重复依赖原则:
路径不同间接依赖中maven采用的是路径最短者优先。就近原则
路径相同间接依赖中maven采用的是依赖定义顺序从上到下,下边优先级更高。
重复的依赖,不同的版本,谁离得近,谁生效
继承下项目分为父子关系。父项目的
打包方式可以为 jar | pom,无论是jar还是pom,子项目只能继承父项目的pom.xml,并不能继承src/main下的内容,所以通常使用pom。占用空间小
的选项:
pom:往往是作为父项目的角色,在父项目的pom.xml中统一管理子项目的依赖,插件,并不会将代码放到pom工程中。
jar:jar就是我们经常引入的jar包或引入的依赖,本质就是java项目中字节码文件,我们是调用它里面的类,一般的jar包只包含类,配置文件,依赖,插件,不会存在静态资源等。
war:本质就是web项目,跟jar不同的是它可以有静态资源的存在,比如Html,css,图片等等。
如果想要使用另一个项目的类,这种关系在Maven中叫做依赖。
因为除了传递需要得依赖,类也会传递过去
如果想要使用另一个项目的依赖,插件,这种关系在Maven中叫做继承。
只传递需要得依赖
新建项目mavenparent,在pom.xml中随意配置一个依赖。
配置完成后通过Maven面板中install把项目安装到本地仓库。
类中有一个方法
依赖导入进来了,但是类中的方法不能使用
当我们需要一个项目中的依赖架包时,可以使用依赖关系让其他项目继承与该项目,继承只传递依赖,导出成pom文件即可,但是我们并不是所有的依赖架包都需要导入,这就需要用到依赖管理
在父项目中可以通过
管理父项目中的插件,子项目则可以选择继承哪些插件。
修改后重新进行install。
这是子项目的架包就会消失
需要获取需要的架包,只输入
组织名
项目名
就行了
架包又回来了
是
的子标签。
名称是自定义的,里面的8.0.27是自己填写的。
可以在
标签的
中通过${属性标签名}获取到定义的属性值。
小提示:
好处是:项目中依赖特别多时,还需要由父项目进行版本管理。可以把所有依赖的版本号都定义到
里面,以后想要修改某个依赖版本时,找起来比较方便。
4.0.0
com.bjsxt
projectparent
1.0-SNAPSHOT
8.0.27
mysql
mysql-connector-java
${mysql-version}
聚合关系的前提:继承。
聚合主要用在后面的分布式架构或微服务架构的项目,对于目前的单体架构项目来说很少使用聚合项目。
聚合项目最大的好处:在一个父项目中创建多个模块,所有的模块都是独立的,可以独立运行。且父项目不需要install,子模块就可以继承父项目的pom中的依赖。
示例中项目名称为:mavenparent。
鼠标右键点击项目 -> New -> Module...
创建聚合项目过程和创建普通Maven项目类似。唯一的区别是填写坐标过程中GroupID和Version是不允许修改的,必须和父项目的相同。ArtifactId根据自己的需要进行填写。
查看mavenparent中pom.xml可以发现里面有两点重要配置。
为pom。
里面包含所有子项目。
子项目中有继承的配置。
这些配置都是自动生成的。
依赖:
依赖其它项目中的类,主要是src/main中的类。
依赖和被依赖的项目都为独立的项目,依赖存在传递性,常用。
项目必须install后(jar),才能够被其他项目依赖。类和依赖都可以使用
继承:
父项目管理子项目的依赖,插件。
父子项目都为独立的项目,springboot开始常用。
项目必须install后(jar|pom),才能够被其它项目继承。
无论jar还是pom只能继承依赖,不能使用src/main中的类,常用pom。只可以使用pom.xml文件,所以常用pom;
聚合:
父项目管理子项目的依赖,插件。
一个项目中创建多个模块(每个模块可以独立运行),微服务常用。
聚合项目不需要install,每个模块都可以使用父项目中依赖,插件
聚合项目只能为pom,聚合的父项目需要指定管理哪些子项目。
随意编写一个web项目,使用JDBC连接服务器中数据库(可以使用昨天的表作为测试),然后部署到服务器中。
部署Maven项目到服务器的方式有两种:
传统方式。把项目打包成war,然后上传到服务器的Tomcat中。
热部署。一键部署项目到服务器的Tomcat中。
将项目进行打包打成war包,再把war包放Tomcat的webapps中进行执行
使用Maven的Tomcat插件可以实现把项目一键部署到服务器的Tomcat中,这种部署方式不需要重启Tomcat,称为热部署。
想要使用热部署就必须先配置Tomcat自带的manager项目。Manager项目支持可视化管理Tomcat中项目,也支持使用命令管理Tomcat中项目。
可以通过Tomcat的Root项目首页中Manager App按钮进入到Manager项目
Tomcat默认不允许远程访问
在Linux中设置远程访问权限的修改
vim /usr/soft/tomcat8/webapps/manager/META-INF/context.xml
开启tomcat
访问tomcat的主页
需要登录,这里也要设置用户名和密码
根据API页面的说明,打开Tomcat安装目录下的conf目录下的tomcat-users.xml文件,完成配置。
使用XShell操作服务器中Tomcat,配置文件所在路径: /usr/local/tomcat/conf/tomcat-users.xml
在文件中添加7行(和
只需要记住
标签的username和password属性值,这两个属性值可以修改的,是以后访问时的用户名和密码
重启Tomcat,让配置生效
在浏览器访问服务器Tomcat。http://ip:8080 。
点击Manager App按钮,并输入用户名和密码。会进入manager项目界面。里面是Tomcat中所有项目。
在配置好Tomcat的远程账号和密码以及角色信息后,Tomcat不能关闭,保持运行状态。
在需要远程部署的Maven的项目的pom.xml文件配置远程部署的账号密码以及url地址。
小提示:
URL:IP和端口为服务器IP和服务器中Tomcat的端口,/manager/text 是固定的
username:为上面配置的用户名
password:为上面配置的密码
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
http://192.168.8.129:8080/manager/text
admin
admin
/project
配置好后在Maven面板,找到项目下的Plugins,选择tomcat:deploy即可进行远程部署,如果服务器中已经存在这个项目,再次运行会报错。
建议直接点击tomcat7:redeploy进行第一次或第N次部署。
除了可以像今天最开始那样在命令行工具输出Maven命令,也可以在IDEA中输入命令。
选择Maven面板中命令按钮,图标为m
点击后弹出命令界面,可以在里面输入命令。Maven所有命令都是以mvn开头的。
常用指令:
常用指令 | 指令含义 |
---|---|
mvn help:system | 打印系统属性和环境变量 |
mvn clean | 删除target目录,清理所有之前所有编译的内容。手动删除target目录和运行此命令是等效的。 |
mvn validate | 验证项目是否可用 |
mvn compile | 编译项目,生成target目录 |
mvn test | 执行测试。执行测试时会自动运行src/test/java 目录下所有/*Test.java、/Test.java、**/TestCase.java 文件,采用约定方式执行。 |
mvn package | 打包项目 |
mvn deploy | 发布项目 |
mvn verify | 校验包是否正确 |
mvn install | 安装到本地仓库 |
mvn site | 生成站点。但是需要添加插件才能使用。 |
站点插件
org.apache.maven.plugins
maven-project-info-reports-plugin
2.7
Maven有三套相互独立的生命周期(Lifecycle ):
Clean Lifecycle:做一些清理工作;
Default Lifecycle:构建的核心部分、编译、测试、打包、部署等;
Site Lifecycle:生成项目报告、站点、发布站点;
其中Default Lifecycle包含如下阶段:
validate
- 验证项目是否正确并且所有必要的信息都可用
compile
- 编译项目的源代码
test
- 使用合适的单元测试框架测试编译的源代码。这些测试不应该要求打包或部署代码
package
- 将编译后的代码打包成可分发的格式,例如 JAR。
verify
- 对集成测试的结果进行任何检查,以确保满足质量标准
install
- 将包安装到本地存储库中,作为本地其他项目的依赖项
deploy
- 在构建环境中完成,将最终包复制到远程存储库以与其他开发人员和项目共享
生命周期的每个阶段必须按照严格的执行顺序,当然我们可以执行任意一个阶段,但是每个阶段都会从第一个阶段开始执行。可以通过maven的命令来执行每个阶段的操作,也可以使用Maven和IDEA集成后提供的图形界面来完成操作,通过图形界面相对比较简单,直接选择相对应的阶段双击运行即可。
运行的时候都会从头开始运行
单元测试:独立运行项目中某个或某些方法。
Java中常见的单元测试工具:Junit
在Maven项目中src/main/test包是专门编写单元测试的包。
添加junit依赖
在src/main/test下新建任意类,类名不能叫做Test。
在类中提供任意方法,方法上添加@Test注解,双击方法名后,鼠标右键点击Run 方法名,运行方法。
在Junit除了@Test还提供了@Before和@After,分别代表在运行@Test方法之前和之后运行的方法。
/*
单元测试:
正常情况下,项目应该有一个主方法,通过运行主方法所在类,让整个项目运行起来。
在项目规格比较大的情况下,如果希望只测试其中某个方法,单独运行一个方法,这时就叫单元测试。
junit单元适用于非web环境。
*/
public class MyTest {
/*
适用于只需要在方法上添加@Test注解。
*/
@Test
public void test(){
System.out.println("test");
}
/*
要求方法必须是public void的,如果不是会出现运行时异常。
*/
@Test
public void test123(){
System.out.println("test2");
}
@Before
public void isbefore(){
System.out.println("before");
}
@After
public void after(){
System.out.println("after");
}
}
在pom.xml中
标签有一个
子标签,表示当前依赖的域(域:有效范围)。
scope可取值:
取值 | 解释 |
---|---|
compile | 默认值,不配置scope时的取值,表示依赖参与整个项目的编译、打包、测试、发布。也就是说:编译时需要使用、测试时需要使用、最终打包时会包含。属于一种强依赖。 |
provided | 仅编译时生效,项目最终被打包时不会包含该依赖。常见servlet的依赖时需要配置。 |
runtime | 运行时生效。表示编译时不参与,但是参与项目的测试、打包。该依赖被打包时会被包含。 |
test | 仅测试时生效,这个包中的类只能在src/main/test中使用。常用在junit依赖时需要被配置。 |
system | 类似provided,但是需要结合systemPath属性,表示依赖不是来源于本地库,而是来源于其他目录。使用较少,在一些特殊项目中才可能被使用。 |
在pom.xml中配置依赖时添加
标签就可以了。
junit
junit
4.13.2
test
小提示:
Maven的Web项目需要依赖servlet-api和jsp-api。
使用Tomcat插件时会有下面问题。
项目中需要导入servlet-api和jsp-api作为编译时使用,使用Maven的Tomcat插件时,插件本身已经包含了servlet-api和jsp-api。
如果这两个依赖设置scope为compile,打包后在插件的tomcat中就出现了两个servlet-api和jsp-api,访问servlet时会报错。
所以在导入servlet-api和jsp-api时一定要设置scope为provided,表示只在编译时生效。
javax.servlet
javax.servlet-api
4.0.1
provided
javax.servlet.jsp
javax.servlet.jsp-api
2.3.3
provided