博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven使用图示-关于生命周期、命令行和IDEA插件
阅读量:7114 次
发布时间:2019-06-28

本文共 3646 字,大约阅读时间需要 12 分钟。

hot3.png

本文隶属于新手图文教程《IDEA+Maven搭建Spring+SpringMVC+Mybatis项目骨架》

下一篇:

目录 & 项目地址:

一、生命周期图解

1. LifeCycle and Phase(生命周期与阶段)

先用一张图解释一下Maven的生命周期及其阶段。

lifecycle

注:图中Default周期的阶段清单是精简版。其完整版可参照官方文档:

如上图所示,Maven定义了三个LifeCycle(生命周期),分别有以下意义:

  1. Clean - 负责项目构建生成文件的清理
  2. Default - 负责部署项目
  3. Site - 负责构建项目文档

Maven又给每个LifeCycle(生命周期)定义了一个Phase List(阶段清单),把生命周期分成了若干个阶段,并约定生命周期的阶段必须按次序执行。正常情况下,一个周期应该从阶段清单的第一项按次序执行到最后一项;但如果用户指定了阶段,则只从该周期的第一项依次执行到指定项。例如:

mvn clean install

将依次执行以下阶段(强行插张图):

mvn clean install

2. Phase(阶段)的实现

如上所述,maven是一套标准,定义了构建项目的通用方式。它本身并不对这些构建阶段进行实现。我们所看到的maven的功能,是通过Parent Poms预定义的插件实现的。

Plugin的Goal(目标)就是maven插件指定的、为达到某一目标而执行的一系列事务。以install插件为例:

install绑定

  1. maven-install-plugin:install - 把当前模块安装到本地maven仓库
  2. maven-install-plugin:install-file - 把外部的模块安装到本地maven仓库
  3. maven-install-plugin:help - 在命令行界面下打印该插件的帮助信息

借助图片,理解以下信息:

  1. maven-install-plugin:install这个目标绑定了生命周期Default的install阶段,执行到install阶段其实就是在执行maven-install-plugin:install。
  2. Integration-Test阶段没有绑定任何Goal,也就是说,默认情况下,在这个阶段,maven什么都不做。这是maven预留的接口,你可以绑定自己的实现。
  3. mvn install并不完全等价于maven-install-plugin:install。以mvn clean install那张流程图为例,执行mvn install其实调用了很多个阶段,即调用了很多个插件的目标,先后进行了校验、编译测试、打包、安装到本地仓库等过程。相比之下,执行maven-install-plugin:install仅仅是执行了把包安装到本地仓库这一个过程。

以下是maven在打包war/jar时,依次执行的Phase及其绑定的插件Goals

Phase(阶段) Goal(目标) 意义
process-resources maven-resources-plugin:resources 对资源文件进行变量替换和复制到输出目录的操作
compile maven-compiler-plugin:compile 编译项目源代码
process-test-resources maven-resources-plugin:testResources 对test资源文件进行变量替换和复制到输出目录的操作
test-compile maven-compiler-plugin:testCompile 编译项目测试代码
test maven-surefire:surefire:test 执行测试代码
package

maven-jar-plugin:jar

maven-war-plugin:war

打包
install maven-install-plugin:install 把包安装到maven本地仓库
deploy maven-deploy-plugin:deploy 部署到服务器

在使用默认配置的情况下,无需在study-parent/pom.xml的project.build.plugins节点重复定义以上插件。但如果需要进行个性化的配置,则需要定义插件并配置参数,以覆盖默认配置。

二、命令行方式

#打包语法:mvn package -PprofileID -DskipTests#@ package   --周期只进行到package阶段#@ -P        --指定要激活的profile(可选,不指定时激活默认active的profile)#@ profileID --在pom的project.build.profiles.profile.id节点定义的ID#@ -D        --指定系统变量(可选)#@ skipTests --跳过测试(完整版为maven.test.skip=true,既跳过测试,也跳过测试代码的编译.也可以在pom里定义surefire插件并配置该参数)#打包示范(生产环境)mvn clean package -Pprod -DskipTests#----------------------------------------------------------------------##测试语法:mvn test -Dtest=MyFirstTest#@ test        --周期只进行到test阶段#@ -D          --指定系统变量(可选),不指定时,对所有类名符合规则的测试类进行test#@ MyFirstTest --指定测试类类名#测试示范(全部测试)mvn test#----------------------------------------------------------------------##运行(不推荐使用,不方便关闭)mvn clean install tomcat7:run -Pdev#部署mvn clean install tomcat7:deploy -Pprod

三、Maven可视化插件方式

maven图形插件

如图所示,IDEA界面右边缘有个Maven Project的标签,单击即可唤出Maven插件。

  • 在Profiles节点下,可以勾选需要激活的Profile
  • 在study-parent.lifecycle节点下,双击可以相应执行mvn phase命令
  • 在study-parent.plugins节点下,双击可以相应执行mvn plugin:goal命令

四、IDEA代理方式

1. 本地调试

下面演示一种比较简单的方法来新建tomcat:run的配置:

新建配置

  • 选择需要激活的Profiles
  • 在tomcat7:run上面点鼠标右键
  • 选择“Create 'study-parent [tomcat...'...”

配置界面

至此,IDEA自动创建了一个名为 study-parent[tomcat7:run] 的配置,相当于在命令行执行tomcat7:run,激活的profiles为dev(多个profiles用空格分开,在profilename前面加短横线表示禁用该profile)。

Before Launch(在运行该配置之前),我们需要maven帮忙build项目。按红箭头所示,点左下角“+”。

add new Configuration

在弹出的菜单中,选择“Run Maven Goal”。

执行maven goal

注意,这里所谓的Command line并不是真的让你填入mvn命令,而是让你填入该命令的参数,系统自动会执行mvn。

clean install -Pdev -Dmaven.test.skip=true#注意,这里不需要敲入mvn,IDEA会负责调用该命令#1、先清空上次构建的内容#2、校验、编译、打包、安装一条龙#参数:用名为dev的profile进行build#参数:不用进行测试

以上是我填写的命令。

接着一路确定,完成配置。

配置结果

配置完成后,界面右上角出现了刚才的配置。点红线方框右边的虫子图标,即可Debug该配置。

2. 使用Junit进行测试

下面演示使用Junit进行测试的配置(当然也可以用maven自带的surefire)

into edit configurations

同样在界面右上角(windows版本的位置可能有点差别),在之前配置好的study-parent[tomcat7:run]右边,点击下拉箭头,然后选择"Edit Configurations..."

configurations

已经能看到已经配置好的tomcat7配置了,这里我们新建一个,点“+”

new Junit

选择Junit,下一行那个JUnit Test Discovery是覆盖率测试。

JUnit配置

按图示操作,即可完成配置。更多配置说明: (等我熟悉之后再写篇文章具体说明一下)

转载于:https://my.oschina.net/mzdbxqh/blog/849040

你可能感兴趣的文章
返回顶部浮动图标代码
查看>>
如何使用pyinstaller打包32位的exe
查看>>
VB 过程
查看>>
[leetcode-40-Combination Sum II]
查看>>
CSS3的圆角Border-radius —— W3CPlus http://www.w3cplus.com/css3/border-radius
查看>>
less变量
查看>>
poj 2251 -- Dungeon Master
查看>>
2017-2018-1 20155319 实验四 外设驱动程序设计
查看>>
液晶屏
查看>>
【智力题】IO——行测、笔试、面试中遇到的
查看>>
Centos 安装Memcache + phpmemcached
查看>>
获取网易云音乐歌曲URL
查看>>
计算机系统基础学习笔记及博客
查看>>
【Android游戏开发二十二】(图文详解)游戏中灵活实现动画播放!简述J2me的游戏类库与Android游戏开发!...
查看>>
grape入门
查看>>
Kilani and the Game-扩散形式的搜索
查看>>
2016.1.1 VS中宏的使用技巧点滴
查看>>
Java 为什么要使用反射(通俗易懂的举例)
查看>>
XSS是什么
查看>>
升级adt插件后,eclipse突然出现Unable to build: the file dx.jar was not loaded from the SDK folder 错误...
查看>>