Maven命令及生命周期

最近查项目中有个模块build 失败的原因。了解下对maven 的一些分析依赖的命令和周期。这里简单列下。

命令

编译

mvn compile
构建打包

mvn clean install
查看 pom

这里包括系统的一些默认设置和用户的自定义设置。即比我们编写的pom.xml 更完整。

mvn help:effective-pom
生成报告

mvn site
这里默认会生成在 /target/site 文件夹下。当然也可以自己指定目录和插件。

	<reporting>
		<outputDirectory>site/</outputDirectory>
		<plugins>
			<plugin>
				<!-- 此处用于将 Cobertura 插件集成到 Maven 中 -->
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>cobertura-maven-plugin</artifactId>
				<version>2.5.2</version>
			</plugin>
		</plugins>
	</reporting>
执行指定类

mvn exec:java -Dexec.mainClass=com.luce.t.ZwThread
等号后边是我们要执行的类,这里要保证首先编译通过,maven执行此命令前会 编译项目的。

查看依赖

mvn dependency:resolve
也可以改变参数也列出非直接依赖。

mvn dependency:analyze
查看依赖树

mvn dependency:tree
总的来说这三个没多大区别。有兴趣的可以自己研究下。


周期

做过打包部署的可以会在项目打包log 里面见过类似下面的输出。

[INFO] ------------------------------------------------------------------------
Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy
]
这里就是本次maven 执行的生命周期。里面有些眼熟。比如 compile,test, install等。不过它们都只是 Default Lifecycle的一部分。

其实 Maven是有三套相互独立的生命周期的。

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
Site Lifecycle 生成项目报告,站点,发布站点。


这里说了是一套生命周期,可见它们也是可以细分的。每个生命周期都是有若干定义好的阶段构成。下面一一说下。

CleanLifecycle

先看最简单的 Clean,熟悉maven的知道,它会清除上次的构建结果。它只有三个简单的阶段。

pre-clean 执行一些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之后立刻完成的工作

Default Lifecycle 

这套生命周期估计是maven最重要的一部分了。上面的那段输出就是这种。官网给出的是 23 个阶段,如下:

validate  
initialize  
generate-sources  
process-sources 处理项目主资源文件。一般是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
generate-resources  
process-resources  
compile 编译项目主源码。一般是编译src/main/java目录下的java文件至项目输出的主classpath目录。
process-classes  
generate-test-sources  
process-test-sources 处理项目测试资源文件。一般是对src/test/resources目录的内容进行变量替换等工作后,复制到项目输出的测试classpath目录中。
generate-test-resources  
process-test-resources  
test-compile 编译项目的测试代码。一般是编译src/test/java目录下的java文件至项目输出的测试classpath目录中。
process-test-classes  
test 使用单元测试框架运行测试,测试代码不会被打包或部署。
prepare-package  
package 接受编译好的代码,打包成可发布的格式,如Jar。
pre-integration-test  
integration-test  
post-integration-test  
verify  
install 将包安装到Maven本地仓库,供本地其他Maven项目使用。
deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。
/

它们的工作很简单,根据名字很好理解。

Site Lifecycle

还有一个 Site Lifecycle。

它有四个阶段,上面我们执行mvn site 命令就是用到了这个生命周期。

pre-site 执行一些需要在生成站点文档之前完成的工作
site 生成项目的站点文档
post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy 将生成的站点文档部署到特定的服务器上(需要配置的)

了解了上面的生命周期,就能对maven的构建发布有个大致的掌握。另外,maven也提供了很多插件,这些插件是基于一些周期阶段的。也就是说,生命周期确定了,但每个阶段对我们来说是可定制的。估计这也是很多人喜欢maven的原因之一。

另外,maven执行时,每个阶段是基于前面所有阶段的。比如 执行mvn compile时,maven会执行从validatecompile 的所有阶段。

想要了解更多,可以看下官网介绍





猜你喜欢

转载自blog.csdn.net/hustzw07/article/details/78018573