最近查项目中有个模块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会执行从validate 到 compile 的所有阶段。
想要了解更多,可以看下官网介绍