大家好,我是IT修真院上海分院第02期学员,一枚正直善良的java程序员。
今天给大家分享一下,修真院官网java任务中可能会使用到的知识点:
CLEAN,PACKAGE,INSTALL和DEPLOY的区别
1.背景介绍
maven的用途:
(1)maven是一个项目构建和管理的工具,提供了帮助管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
(2)maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性。
(3)利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。
maven的核心概念介绍:
(1)Pom
(2)Artifact
(3)Repositories
(4)Build Lifecycle
(5)Goal
2.知识剖析
maven的生命周期
(1)maven的生命周期就是对所有构建过程抽象与统一。
(2)生命周期包含项目的清理、初始化、编译、测试、打包、集成测试、验证、部署、站点生成等几乎所有的过程。
(3)maven有三套相互独立的生命周期,而初学者一般都会将maven的生命周期看成一个整体。
<1>CleanLifecycle(清理生命周期): 在进行真正的构建之前进行一些清理工作
pre-clean:执行一些需要在clean之前完成的工作
clean:移除所有上一次构建生成的文件
post-clean:执行一些需要在clean之后立刻完成的工作
<2>DefaultLifecycle(部署生命周期):构建的核心部分,编译,测试,打包,部署等等。
compile:编译项目的源代码
test:使用合适的单元测试框架运行测试。
package:将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
install:安装包至本地仓库,以备本地的其它项目作为依赖使用
deploy:复制最终的包至远程仓库,共享给其它开发人员和项目
<3>SiteLifecycle(生成生命周期):生成项目报告,站点,发布站点。
pre-site:执行一些需要在生成站点文档之前完成的工作
site:生成项目的站点文档
post-site:执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy:将生成的站点文档部署到特定的服务器上
3.常见问题
(1)maven package install deploy区别
(2)mvn clean install 与 mvn install 的区别
4.解决方案
(1)问题一
maven package:打包(jar等)到本项目的target下
maven install:把target下打的包(jar等)安装到本地仓库,可以供其他项目使用
maven deploy:将打包的文件发布到远程参考,提供其他人员进行下载依赖
(2)问题二
用mvn install后,新改的内容不生效,一定要后来使用mvn clean install 才生效。
maven在执行一个生命周期的命令的是时候将会执行之前的所有生命周期操作,比如执行mvn install,会执行前面一系列的动作包括 compile , package , test 等。而执行mvn package 会调用 maven-jar-plugin 这个插件进行打包,理论上来讲不做mvn clean得到的jar包应该是最新的,然而在打包结束后修改了代码内容,导致打出来的jar包没有更新,从而没有生效,所以使用mvn clean install对target文件清除后再进行打包。
5.编码实战
6.扩展思考
有时候会根据需求,要跳过某些阶段。比如有时在打包过程中由于单元测试中任何一条没通过,maven就会终止后续的工作,所以这个时候我们需要跳过测试阶段。
一般是通过-skip的命令来跳过单元测试。
7.参考文献
参考一:http://www.trinea.cn/android/maven/ 【1】Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
参考二:http://blog.csdn.net/moshenglv/article/details/52027085 【2】maven的生命周期
8.更多讨论
问:<packing>标签里面默认是jar,也可以是war,那可以是pom么?
答:使用maven进行模块划分管理,一般都会有一个父级项目,pom文件除了GAV(groupId, artifactId, version)是必须要配置的,另一个重要的属性就是packing打包类型,所有的父级项目的packing都为pom,packing默认是jar类型,如果不作配置,maven会将该项目打成jar包
问:maven的设计理念是什么?
答:maven的设计哲学是Convention over configuration(惯例先于配置)
在设计之初,maven就确定了三个常见的工作流程,流程固定,流程节点可配置。
问:介绍下settings.xml
答:settings.xml对于maven来说相当于全局性的配置,用于所有的项目。在maven2中存在两个 settings.xml,一个位于maven2的安装目录conf下面,作为全局性配置。对于团队设置,保持一致的定义是关键,所以 maven2/conf下面的settings.xml就作为团队共同的配置文件。保证所有的团队成员都拥有相同的配置。当然对于每个成员,都需要特殊的 自定义设置,如用户信息,所以另外一个settings.xml就作为本地配置。默认的位置为:${user.dir} /.m2/settings.xml目录中(${user.dir} 指windows 中的用户目录)。