生命周期(lifecycle)由各个阶段组成,每个阶段由maven的插件plugin来执行完成。
mvn –version:显示版本信息
mvn clean:清理项目生产的临时文件,一般是模块下的target目录
mvn compile:编译源代码,一般编译模块下的src/main/java目录
mvn package:项目打包工具,会在模块下的target目录生成jar或war等文件
mvn test:测试命令,或执行src/test/java/下junit的测试用例.
mvn install:将打包的jar/war文件复制到你的本地仓库中,供其他模块使用
mvn deploy:将打包的文件发布到远程参考,提供其他人员进行下载依赖
mvn site:生成项目相关信息的网站
mvn eclipse:eclipse:将项目转化为Eclipse项目,方便直接导入
mvn dependency:tree:打印出项目的整个依赖树
mvn archetype:generate:创建Maven的普通java项目
mvn tomcat:run:在tomcat容器中运行web应用(eclipse中的tomcat经常会出现不同步更新的情况)
mvn jetty:run:调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用
注意:运行maven命令的时候,首先需要定位到maven项目的目录,也就是项目的pom.xml文件所在的目录。否则,必须通过参数来指定项目的目录。
mvn compile实际上是先定位到compile这一生命周期阶段,然后再根据绑定关系调用maven-compiler-plugin的compile目标
-D 传入属性参数
mvn package -Dmaven.test.skip=true:打包的时候跳过单元测试
mvn deploy-Dmaven.test.skip=true:部署项目并跳过单元测试
可以对pom.xml中的properties的值进行替换指定:
defaultattr
执行mvn -Dattr=newattr clean package,则pom.xml内attr的实际值将被替换成newattr
-P 使用指定的Profile配置,实现按不同环境进行打包部署(区分生产和正式)
如在pom.xml中设置:
dev
dev
true
qa
qa
pre
pre
prod
prod
......
config/${env}.properties
src/main/resources
true
......
mvn package -P dev:使用Id为“dev”的profile进行打包
-e 显示maven运行出错的信息
-o 离线执行命令,即不去远程仓库更新包
-X 显示maven允许的debug信息
-U 强制去远程更新snapshot的插件或依赖,默认每天只更新一次
mvn archetype:generate -DarchetypeCatalog=internal
该命令会以交互的模式创建maven项目,不需要像archetype:create(已淘汰)那样在后面跟一堆参数。maven默认会从远程服务器上获取archetype元数据,由于中央仓库的archetype太多(几千个)而造成程序的阻滞,加入-DarchetypeCatalog=internal参数则可以避免,只使用内置的原型就够了。然后maven会告诉你,archetype没有指定,默认使用maven-archetype-quickstart(相当于一个“HelloWorld”模板),或者从控制台列表中选择一个可用的原型,然后会依次提醒你输入groupId、artifactId、version(默认1.0-SNAPSHOT)以及创建的第一个包名。
mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。
package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
maven仓库包括本地仓库和远程仓库。优先从本地仓库(本地仓库默认地址为:${user.home}/.m2/repository)中寻找相关构件,远程仓库中的构件下载到本地仓库使用。中央仓库是 Maven 核心自带的远程仓库,默认地址:http://repo1.maven.org/maven2 。
私服是架设在本机或局域网中的一种特殊的远程仓库,通过私服可以方便的管理其它所有的外部远程仓库。
cn.missbe.web.search
resource-search
pom
1.0-SNAPSHOT
web-connection-pool
web-java-crawler
cn.missbe.web.search
resource-search
pom
1.0-SNAPSHOT
2) 子pom配置:
父pom所在项目的groupId
父pom所在项目的artifactId
父pom所在项目的版本号
resource-search
cn.missbe.web.search
1.0-SNAPSHOT
dependencyManagement和dependencies区别:
1)dependencies:自动引入声明在dependencies里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目继承(属性全部继承)声明在父项目dependencies里的依赖项。
2)dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要的依赖。如果不在子项目中声明依赖,是不会从父项目中继承的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。同时dependencyManagement让子项目引用依赖,而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号,实现所有子项目使用的依赖项为同一版本。
3)dependencyManagement 中的 dependencies 并不影响项目的依赖项;而独立dependencies元素则影响项目的依赖项。只有当外层的dependencies元素中没有指明版本信息时,dependencyManagement 中的 dependencies 元素才起作用。一个是项目依赖,一个是maven项目多模块情况时作依赖管理控制的。
附:
comipe 默认,编译 测试 打包都依赖,有传递性,会被打到包里;
provided 编译 测试依赖,有传递性,不会被打到包里。例如servlet-api有容器提供,没必要打到包里。 但是继承性,上面的情况,如果需要统一配置一个组织的通用的provided依赖,可以使用parent,然后在所有工程中继承。
test 测试时依赖,没有传递性,不会被打到包里。如测试包下的测试。
runtime 测试和运行时候依赖,有传递性,会打到包里。如jdbc驱动。
本文参考文章地址:https://www.cnblogs.com/Eilen/p/6558591.html
本文首发于我的个人博客:呆狗个人博客,转载请标明出处
文章参考链接均附在文末,感谢作者的分享和付出,使我们得以站在巨人的肩膀上继续前行
小白一枚,如果文章对您有帮助或者有什么不对的地方,欢迎关注收藏留言哦