maven-site-plugin笔记——内部工作原理

刚开始时候,很难明白maven中packaging、phase和goal之间的关系,后来搞清楚了,项目搭出一个样子的时候,又来一个新的问题——报告

maven在pom model 4.0定义中,特别为报告开辟了一个与build同级的专用节点——,在reporting内可以声明一个plugins然后写上各种报告插件,(在Maven2.x中)运行mvn site即可生成一个很完整的项目报告。这个是怎么做到的呢,下面来一探究竟。


1. 首先,看mvn site这个命令做了什么?明显执行了site这个phase,但是phase是不能执行的,执行的是插件,那么就看看是什么插件绑定到site这个phase上。通过Effective POM看到,显然maven-site-plugin:site这个操作绑定到了site这个phase上


  maven-site-plugin
  2.3
  
    
      default-site
      site
      
        site
      
    
  

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里面可以看到:


  maven-site-plugin
  2.3
  ...
  
    E:\Ming\Workspace\Eclipse\3.7\org.cst.javaee.project\target\site
    
      
        org.apache.maven.plugins
        maven-project-info-reports-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)