刚开始时候,很难明白maven中packaging、phase和goal之间的关系,后来搞清楚了,项目搭出一个样子的时候,又来一个新的问题——报告
maven在pom model 4.0定义中,特别为报告开辟了一个与build同级的专用节点——<reporting>,在reporting内可以声明一个plugins然后写上各种报告插件,(在Maven2.x中)运行mvn site即可生成一个很完整的项目报告。这个是怎么做到的呢,下面来一探究竟。
1. 首先,看mvn site这个命令做了什么?明显执行了site这个phase,但是phase是不能执行的,执行的是插件,那么就看看是什么插件绑定到site这个phase上。通过Effective POM看到,显然maven-site-plugin:site这个操作绑定到了site这个phase上
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<id>default-site</id>
<phase>site</phase>
<goals>
<goal>site</goal>
</goals>
</execution>
</executions>
</plugin>
2. 其次,maven-site-plugin怎么知道reporting声明的插件呢?maven-site-plugin作为maven的核心插件,怎么说也有点特权吧。的确,在Effective POM内可以发现,其实maven做了点手脚,将reporting里面的内容转化成了maven-site-plugin下的一个配置项~_~
如果reporting里面什么都没有配置,maven就会继承最原始的配置(类似Java里面的Object一样),给maven-site-plugin加上一个默认的报告插件——maven-project-info-report-plugin,在Effective POM里面可以看到:
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>2.3</version>
...
<configuration>
<outputDirectory>E:\Ming\Workspace\Eclipse\3.7\org.cst.javaee.project\target\site</outputDirectory>
<reportPlugins>
<reportPlugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
</reportPlugin>
</reportPlugins>
</configuration>
</plugin>如果在reporting里面添加了报告插件,maven就会在现有基础上把reporting.plugins里面的plugin都转化成reportPlugin并且附加到maven-site-plugin的configuration.reportPlugins里面。
**注意:这个是关键,在maven-site-plugin:3.0中reportPlugins内的项由reportPlugin转为plugin,这点转变使得maven原来所做的转化操作无效,因为maven-site-plugin:3.0不再解释reportPlugins.reportPlugin转而解释reportPlugins.plugin,所以在使用maven-site-plugin:3.0的时候必须在插件的configuration.reportPlugins.plugin内声明报告插件,而不能使用reporting。并且Maven3只能使用maven-site-plugin:3.0,所以一定要注意Maven2升级至Maven3时的变动!
3. 最后,maven-site-plugin怎样调用报告插件的?这个就太简单了,插件信息都知道了想怎么调用就怎么调用!那么goal呢,配置并没有显示声明goal喔?原来maven-site-plugin也有自己的限制,它所只支持某些报告插件(当然,可能有方法通过配置让它知道更多的报告插件,这个就没研究过了),所支持插件列表在官方文档上有列出:http://maven.apache.org/plugins/maven-site-plugin/maven-3.html#Plugins_Compatibility_Matrix_for_Maven_3
文章的最后,回应一下《maven-site-plugin笔记——2.3到3.0之间的变化》最后提的问题,为何新版配置没有生成index.html,解决办法就是在maven-site-plugin:3.0的configuration中添加maven-project-info-reports-plugin的声明即可
本文探讨了maven-site-plugin在Maven项目中的作用,详细解释了site命令执行的过程,包括phase与goal的关系,以及如何生成项目报告。关键点在于maven-site-plugin在不同版本间的配置变化,特别是从2.3到3.0的升级中,reporting节点的处理方式调整。理解这一变化对于正确配置和使用maven-site-plugin至关重要。
9778

被折叠的 条评论
为什么被折叠?



