 ------
 Maven Site Plugin History
 ------
 Hervé Boutemy
 ------
 2018-01-20
 ------

 ~~ Licensed to the Apache Software Foundation (ASF) under one
 ~~ or more contributor license agreements.  See the NOTICE file
 ~~ distributed with this work for additional information
 ~~ regarding copyright ownership.  The ASF licenses this file
 ~~ to you under the Apache License, Version 2.0 (the
 ~~ "License"); you may not use this file except in compliance
 ~~ with the License.  You may obtain a copy of the License at
 ~~
 ~~   http://www.apache.org/licenses/LICENSE-2.0
 ~~
 ~~ Unless required by applicable law or agreed to in writing,
 ~~ software distributed under the License is distributed on an
 ~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ~~ KIND, either express or implied.  See the License for the
 ~~ specific language governing permissions and limitations
 ~~ under the License.

 ~~ NOTE: For help with the syntax of this file, see:
 ~~ http://maven.apache.org/doxia/references/apt-format.html


Maven Site Plugin History

* Overview

 Maven Site Plugin uses:

  * {{{/doxia/}Doxia}} to parse {{{/doxia/references/}many markup languages}} then render HTML: see
  {{{./examples/creating-content.html}Creating Content}} documentation for mode details (particularly which markups
  are enabled by default in maven-site-plugin and how to add one),
  
  * {{{/doxia/doxia-sitetools/doxia-site-renderer/}Doxia Sitetools - Site Renderer}} to integrate document content into
  a template packaged as a skin: see {{{./examples/creatingskins.html}Creating Skins}} documentation for more details,

  * {{{/shared/maven-reporting-exec/}Maven Reporting Executor}} to manage reports execution (since Maven 3; reports execution
  was managed by Maven itself in Maven 2: see old {{{https://maven.apache.org/plugins-archives/maven-site-plugin-3.9.0/maven-3.html}Using maven-site-plugin with Maven3}} documentation for
  more details).

  []

[developer-overview.png] Developer Overview

* Maven Site Plugin vs Doxia vs Doxia Sitetools

  Given this layered approach, rendering issues reported to {{{https://issues.apache.org/jira/projects/MSITE}MSITE Maven Site Plugin issue tracker}}
  are often translated to {{{https://issues.apache.org/jira/projects/DOXIA}Doxia}} or
  {{{https://issues.apache.org/jira/projects/DOXIASITETOOLS}Doxia Sitetools}}, and issues fixed in
  Doxia or Doxia Sitetools benefit to maven-site-plugin once dependency is upgraded.
  
  Knowing which version of
  maven-site-plugin uses which version of Doxia or Doxia Sitetools is useful to choose to which version to upgrade
  maven-site-plugin to benefit from a fix.
  
*-----------------*--------------------*--------*------------------*--------------------*---------------*
|| relelease date || maven-site-plugin || {{{/doxia/}Doxia}} || {{{/doxia/doxia-sitetools/}Doxia Sitetools}} || {{{/shared/maven-reporting-exec/}Maven Reporting Executor}} || Comment 
*-----------------*--------------------*--------*------------------*--------------------*---------------*
|                 | 3.10.0             | 1.10   | 1.10             | 1.5.1              |
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2020-06         | 3.9.1              | 1.9.1  | 1.9.2            | 1.5.1              |
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2020-03         | 3.9.0              | 1.9.1  | 1.9.2            | 1.4                | Drop Maven 2 support
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2019-07         | 3.8.2              | 1.9    | 1.9.1            | 1.4                | addition of confluence/docbook/twiki support by default
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2018-04         | 3.7.1              | 1.8    | 1.8.1            | 1.4                |
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2017-12-31      | 3.7                | 1.8    | 1.8              | 1.4                | Markdown parser/HTML renderer {{{/doxia/doxia/doxia-modules/doxia-module-markdown/}changed}}
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2016-11-17      | 3.6                | 1.7    | 1.7.4            | 1.3
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2016-04-15      | 3.5.1              | 1.7    | 1.7.1            | 1.2
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2016-02-19      | 3.5                | 1.7    | 1.7              | 1.2                | <<<site.xml>>>'s <<<head>>> and <<<footer>>> changed from DOM to String, requiring CDATA
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2014-07-07      | 3.4                | 1.6    | 1.6              | 1.2                | Reports inherit configuration from pluginManagement
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2013-05-13      | 3.3                | 1.4    | 1.4              | 1.1                | addition of Markdown support by default in maven-site-plugin
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2012-10-14      | 3.2                | 1.3    | 1.3              | 1.0.2
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2012-04-30      | 3.1                | 1.3    | 1.3              | 1.0.2
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2011-08-02      | 3.0                | 1.2    | 1.2              | 1.0.1              | first maven-site-plugin that renders reports with Maven 3
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2012-04-26      | 2.4                | 1.3    | 1.3
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2011-05-23      | 2.3                | 1.2    | 1.2
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2010-11-28      | 2.2                | 1.1.4  | 1.1.4
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2010-06-04      | 2.1.1              | 1.1.3  | 1.1.3
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2009-12-21      | 2.1                | 1.1.2  | 1.1.2
*-----------------*--------------------*--------*------------------*--------------------*---------------*
| 2009-03-11      | 2.0                | 1.0    | 1.0
*-----------------*--------------------*--------*------------------*--------------------*---------------*
