---
layout: post
title: "Apache Doxia Site Tools Version 2.0.0-M7 Released"
date: '2023-04-04T13:40:40+00:00'
permalink: apache-maven-doxia-sitetools-2-0-0-M7
categories:
  - Maven-Doxia-Site-Tools
  - Maven-Components
---
The Apache Maven team is pleased to announce the release of the
[Doxia Site Tools](https://maven.apache.org/doxia/doxia-sitetools/) Version 2.0.0-M7,
Released

Doxia Sitetools is an extension of base Doxia component that generates either
HTML sites, consisting of decoration and content that was generated by Doxia,
or documents like RTF or PDF.

You can download the appropriate sources etc. from the download page:

https://maven.apache.org/doxia/doxia-sitetools/download.cgi

[Release Notes - Maven Doxia base - Version 2.0.0-M7](https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12317320&version=12353068)

* Bug:
  * [DOXIASITETOOLS-299](https://issues.apache.org/jira/browse/DOXIASITETOOLS-299) - Site descriptor interpolation does not properly escape reserved XML chars
 
* Improvement:
  * [DOXIASITETOOLS-300](https://issues.apache.org/jira/browse/DOXIASITETOOLS-300) - Don't populate Velocity context with XML entities
 
* Tasks:
  * [DOXIASITETOOLS-295](https://issues.apache.org/jira/browse/DOXIASITETOOLS-295) - Rename o.a.m.doxia.siterenderer.Renderer to o.a.m.doxia.siterenderer.SiteRenderer
  * [DOXIASITETOOLS-296](https://issues.apache.org/jira/browse/DOXIASITETOOLS-296) - Rename o.a.m.doxia.siterenderer.RenderingContext to o.a.m.doxia.siterenderer.DocumentRenderingContext
  * [DOXIASITETOOLS-298](https://issues.apache.org/jira/browse/DOXIASITETOOLS-298) - Rename doxia-decoration-model to doxia-site-model
  
Enjoy,
- The Apache Maven team 