 -----
 Available Skins
 -----
 Dennis Lundberg
 Karl Heinz Marbaise
 Michael Osipov
 -----
 2012-04-05
 -----

~~ 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:
~~ https://maven.apache.org/doxia/references/apt-format.html

Available Skins

  The following table lists skins that are available for you to use in your
  Maven generated site.

* Supported By The Maven Project

*-------------------------------------------------------------------+--------------+----------------------+------------------+------------------------+--------------------+
|| <<Skin>>                                                         || <<Version>> || Site Plugin Version || <<Description>> || <<Source Repository>> || <<Issue Tracking>>
*-------------------------------------------------------------------+--------------+----------------------+------------------+------------------------+--------------------+
| {{{/skins/maven-default-skin/} <<<Maven Default Skin>>>}}         | 1.3          | [3.5,)               | You get this skin if you don't specify any skin or template. | {{{http://gitbox.apache.org/repos/asf/maven-default-skin/}Git}} / {{{https://github.com/apache/maven-default-skin/}GitHub}} | {{{https://issues.apache.org/jira/browse/MSKINS/component/12326472}Jira MSKINS}}
*-------------------------------------------------------------------+--------------+----------------------+------------------+------------------------+--------------------+
| {{{/skins/maven-fluido-skin/} <<<Maven Fluido Skin>>>}}           | 1.8          | [3.7,)               | Skin based on Bootstrap CSS. | {{{http://gitbox.apache.org/repos/asf/maven-fluido-skin/}Git}} / {{{https://github.com/apache/maven-fluido-skin/}GitHub}} | {{{https://issues.apache.org/jira/browse/MSKINS/component/12326474}Jira MSKINS}}
*-------------------------------------------------------------------+--------------+----------------------+------------------+------------------------+--------------------+

** Retired

*-------------------------------------------------------------------+--------------+----------------------+-------------------+------------------+
|| <<Skin>>                                                         || <<Version>> || Site Plugin Version || <<Retired Date>> || <<Description>>
*-------------------------------------------------------------------+--------------+----------------------+-------------------+------------------+
| {{{/skins/maven-application-skin/} <<<Maven Application Skin>>>}} | 1.0          | (,3.4]               | 2015-12-28        |A skin used by applications like Continuum.
*-------------------------------------------------------------------+--------------+----------------------+-------------------+------------------+
| {{{/skins/maven-classic-skin/} <<<Maven Classic Skin>>>}}         | 1.1          | (,3.4]               | 2015-12-28        | This skin resembles the look of a site generated by Maven 1.
*-------------------------------------------------------------------+--------------+----------------------+-------------------+------------------+
| {{{/skins/maven-stylus-skin/} <<<Maven Stylus Skin>>>}}           | 1.5          | (,3.4]               | 2015-12-28        | The skin used for the website of Maven itself.
*-------------------------------------------------------------------+--------------+----------------------+-------------------+------------------+

* Outside The Maven Land

*-------------------------------------------------------------------+----------------+-----------------------+
|| <<Skin>>                                                         || <<Maintainer>> || <<Description>>
*-------------------------------------------------------------------+----------------+-----------------------+
| {{{http://andriusvelykis.github.io/reflow-maven-skin/} <<<Reflow Maven Skin>>>}} | {{{https://github.com/andriusvelykis} Andrius Velykis}} | Responsive Apache Maven skin to reflow the standard Maven site with a modern fe
*-------------------------------------------------------------------+----------------+-----------------------+
| {{{http://docs.bernardomg.com/maven/docs-maven-skin/} <<<Docs Maven Skin>>>}} | {{{https://github.com/Bernardo-MG} Bernardo Martínez Garrido}} | A minimalist and responsive Bootstrap-based HTML5 skin for Maven Site, which will help to use it as a documentation site.
*-------------------------------------------------------------------+----------------+-----------------------+

* Instructions

  To use one of these skins in your project, you use the <<<skin>>> element of the
  {{{https://maven.apache.org/plugins/maven-site-plugin/examples/sitedescriptor.html}site descriptor}}.
  This is a regular artifact or dependency-like element. For example, to use the
  Maven Fluido Skin, you would include the this in your <<<site.xml>>> file:

+-----+
<project>
  ...
  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.7</version>
  </skin>
  ...
</project>
+-----+
