Java maven构建命令使用总结
实践环境
Apache Maven 3.0.5 (Red Hat 3.0.5-17)
maven构建生命周期
学习Maven构建命令之前,我们不烦先简单了解下Maven构建生命周期。
Maven基于构建生命周期的核心概念。构建生命周期由phase
(形如clean
,compile
, install
等)组成。每个phase
由插件目标Plugin goal
(形如sonar:sonar
)组成。也就是说,每个phase
负责构建生命周期中的特定步骤,并且通过绑定到该phase
的的插件来实现这些步骤的具体执行。
每个插件目标代表一个特定的任务(比phase
更精细),可能绑定到0个或多个构建phase
。未绑定到任何phase
的目标可以通过直接调用在构建生命周期之外执行。执行顺序取决于插件目标和phase
的顺序
默认的生命周期由以下phase
组成( 点击查看完整的phase列表)
validate
- 校验项目是否是正确,并且是否可获取所有必要信息compile
test
package
verify
- 对集成测试结果进行检查以确保满足关键质量。install
deploy
maven构建命令
mvn [选项] [<goal(s)>] [<phase(s)>]
常用选项:
-f,--file <arg>
强制使用指定的POM文件
-U,--update-snapshots
强制检查缺少的release
版和远程仓库已更新snapshots
版(Forces a check for missing releases and updated snapshots on remote repositories)。个人理解:
- 如果构建依赖的
release
版软件包在本地仓库不存在,则强制从远程仓库下载最新release
版依赖包,否则不下载,使用本地仓库已有的release
版依赖包 - 不管构建依赖的
snapshots
版软件包在本地仓库是否存在,都强制检查远程仓库对应版本的软件包是否存在更新,如果存在则下载更新。
-N,--non-recursive
不递归到子项目(子模块)。
说明:多个goal
、phase
之间使用空格分隔。
示例:
# mvn clean -Dautoconfig.skip=true -Dmaven.test.skip=true install
常用内置phase
介绍
clean
删除前一次构建生成的文件,包括classes目录中的.class文件,但不会删除classes
, generated-sources
, maven-status
目录。
compile
编译项目源代码,会生成.class文件和对应软件包,注意:*.class
以及软件包(比如*.jar
)不存在,或者源代码有变动的情况下,执行编译,才会重新生成*.class
及对应软件包,package
,install
,deploy
等皆如此。
test
使用合适的单元测试框架(默认为Junit
)运行测试。这些测试不应要求打包或部署代码。可使用-Dmaven.test.skip=true
、-DskipTests
参数跳过测试。这两者的区别在于:
-DskipTests
不执行测试用例,但编译测试用例类生成相应的.class
文件到target/test-classes
下。-Dmaven.test.skip=true
,不执行测试用例,也不编译测试用例类。
package
获取编译后的代码,并将其打包为可分发的格式,例如jar
install
将打包的软件包安装至本地仓库,为本地其它项目提供依赖。实践表名,执行install
命令,可能会生成在compile
阶段未生成的软件包。
deploy
在集成或发布环境中完成,将最终软件包复制到远程存仓库,以便与其他开发人员和项目共享。
注意:
1、phase
之间,phase
和goal
之间是有顺序区分的,按从左到右的顺序执行,如下两个命令,看似相同,执行效果是不一样的。
# mvn clean install # 先执行clean,再执行install
# mvn install clean # 先执行install,再执行clean
2、maven执行某个phase
之前,会优按顺序执行该phase
所属生命周期内,位于其之前的所有phase
,比如执行默认生命周期的install
,会优先执行validate —> compile -> test -> package -> verify
(假设未使用其它会跳过phase
的选项参数)
插件目标应用举例
sonar扫描
# mvn clean -Dautoconfig.skip=true -Dmaven.test.skip=true compile org.jacoco:jacoco-maven-plugin:prepare-agent sonar:sonar
问题:这里为啥需要用org.jacoco:jacoco-maven-plugin:prepare-agent
插件目标呢?
答案:因为仅靠SonarQube本身是不知道实际上执行了哪些测试以及它们如何覆盖代码的,要获取此信息,它依赖于第三方测试覆盖率工具,对于Java,它依赖于JaCoCo
收集和提供的数据
关于父POM构建
假设项目中包含子项目、模块,那么构建父POM时,会按序构建所有子项目、子模块,可以简单理解为批量构建。
参考连接
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-maven/
https://maven.apache.org/run.html
Java maven构建命令使用总结的更多相关文章
- java:Maven构建项目速度太慢的解决办法,以及报错Retrieving archetypes:' has encountered a problem
如果报错信息如下: Retrieving archetypes:' has encountered a problemAn internal error occurred during:"R ...
- [Java]Maven构建时报错: "Error:java: 读取E:\XX\XXX..jar时出错; error in opening zip file"
删除本地仓库中对应的jar包,pom.xml再reimport
- 使用jekins自动构建部署java maven项目(jdk1.7+tomcat7.0+jenkins2.19.3)
1.下载jenkins 地址:https://jenkins.io/index.html 本人下载了2.19.3版本的war包:jenkins.war 2.安装jenkins 拷贝jenkins.wa ...
- 使用maven构建基本的web项目结构
由于当前公司在组织进行项目基本结构的整理,将以前通过eclipse/ ant 方式构建的项目向maven上迁移,于是便进行maven项目方面的调研. 对于maven项目,基本的结构已经在标准文件中: ...
- Maven构建时跳过部分测试
当遇到以下场景: 其他人写的单元测试影响统计结果 一些需要调用外部接口的测试暂不运行 需要在非本机环境上运行一些不回滚的单元测试 则有必要选择以下方法跳过部分测试. 在测试用例前加上注解 @Ignor ...
- IntelliJ IDEA 将 Maven 构建的 Java 项目打包
前言 IntelliJ IDEA 编译生成 Jar 包的方式与 Eclipse 不同,如何将此 Maven 构建 Java 推荐引擎项目生成 Jar 包确实搜索了不少资料,有成功的有失败的,特将此验证 ...
- Jenkins日常运维笔记-重启数据覆盖问题、迁移、基于java代码发版(maven构建)
之前在公司机房部署了一套jenkins环境,现需要迁移至IDC机房服务器上,迁移过程中记录了一些细节:1)jenkins默认的主目录放在当前用户家目录路径下的.jenkins目录中.如jenkins使 ...
- 使用Maven构建和测试Java项目
我们在创建项目时要学习的是如何使用 Maven 来创建一个 Java 应用程序.现在将学习如何构建和测试应用程序. 进入到 C:\MVN 目录我们准备创建来 java应用程序.打开 consumerB ...
- 构建命令maven install 打包不是最新的代码
问题: 之前一直用的是mvn install 命令来构建项目,但是最近发现最新的代码没有在war包中.之前看的说 mvn install 命令会执行之前的所有阶段,会被编译,测试,打包. 经查最后采用 ...
- java基础-构建命令行运行的java程序简要注意
今天编写了一个运行在服务端的java工具类,才发现自己以前很少关注运营方面的内容,导致在服务端部署一个java的工具变得异常困难,其实这也是自己对java的了解不够造成的. 首先,当代码编写完成之后, ...
随机推荐
- win10 使用idea 构建一个ssm的模板maven项目
一.创建一个maven项目 1.1建立一个module作为web项目 File->New->project 选择maven,默认jdk,下面的列表什么都不选,next->输入 ...
- EL表达式与JSTL简单入门
更多博文请关注:听到微笑的博客 EL概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写. 简单来说EL表达式 ...
- HTML——input之密码框
在 HTML 中,把 <input> 标签的 type 属性设置为 password 可以表示密码框.具体语法格式如下: <input type="password&quo ...
- CH57x/CH58x/CH59x获取从机广播信息
有时需要通过主机设备(MCU非手机)获取从设备的广播信息例如广播包,MAC地址,扫描应答包等 以下的程序片段及功能实现是在WCH的CH59X的observer例程上实现的: 1.获取广播包 所有的函数 ...
- LeetCode 692. Top K Frequent Words 前K个高频单词 (Java)
题目: Given a non-empty list of words, return the k most frequent elements. Your answer should be sort ...
- 【译】Visual Studio 17.10 发布了新版扩展管理器
我们将更新的扩展管理器带给所有用户!在过去的一年里,我们已经将更新后的扩展管理器作为可选的预览功能提供,并一直期待您的反馈.基于您令人难以置信的反馈,我们现在准备从 Visual Studio 17. ...
- Django路由层、视图层及模板层
Django路由层 URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表; 你就是以这种方式告诉Django,对于客户端发来的某个UR ...
- django通过celery定时任务
settings.py # Broker配置,使用Redis作为消息中间件 BROKER_URL = 'redis://127.0.0.1:6379/0' # BACKEND配置,这里使用redi ...
- spark高级分析2的数据集地址
第二章 数据分析 wget https://archive.ics.uci.edu/ml/machine-learning-databases/00210/donation.zip 第三章 音乐推 ...
- SVG <pattern> 标签的用法和应用场景
通过使用 <pattern> 标签,可以在 SVG 图像内部定义可重复使用的任意图案.这些图案可以通过 fill 属性或 stroke 属性进行引用. 使用场景 例如我们要在 <sv ...