You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kh...@apache.org on 2017/09/02 18:26:31 UTC

svn commit: r1807068 - in /maven/plugins/trunk/maven-jmod-plugin: ./ src/main/java/org/apache/maven/plugins/jmod/ src/site/ src/site/apt/ src/site/resources/

Author: khmarbaise
Date: Sat Sep  2 18:26:31 2017
New Revision: 1807068

URL: http://svn.apache.org/viewvc?rev=1807068&view=rev
Log:
Enhanced pom file description
Enhanced JavaDoc etc.
Enhanced parameter descriptions.
Refactored the code to use the same path handling command line etc.
for later reuse of code.
Added first site informations.

Added:
    maven/plugins/trunk/maven-jmod-plugin/src/site/
    maven/plugins/trunk/maven-jmod-plugin/src/site/apt/
    maven/plugins/trunk/maven-jmod-plugin/src/site/apt/index.apt.vm
    maven/plugins/trunk/maven-jmod-plugin/src/site/resources/
    maven/plugins/trunk/maven-jmod-plugin/src/site/resources/download.cgi
    maven/plugins/trunk/maven-jmod-plugin/src/site/site.xml
Modified:
    maven/plugins/trunk/maven-jmod-plugin/pom.xml
    maven/plugins/trunk/maven-jmod-plugin/src/main/java/org/apache/maven/plugins/jmod/AbstractJModMojo.java
    maven/plugins/trunk/maven-jmod-plugin/src/main/java/org/apache/maven/plugins/jmod/JModCreateMojo.java

Modified: maven/plugins/trunk/maven-jmod-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jmod-plugin/pom.xml?rev=1807068&r1=1807067&r2=1807068&view=diff
==============================================================================
--- maven/plugins/trunk/maven-jmod-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-jmod-plugin/pom.xml Sat Sep  2 18:26:31 2017
@@ -36,7 +36,7 @@
   <packaging>maven-plugin</packaging>
 
   <name>Apache Maven JMod Plugin</name>
-  <description>http://openjdk.java.net/jeps/261</description>
+  <description>Create JMod files http://openjdk.java.net/jeps/261</description>
   <inceptionYear>2016</inceptionYear>
 
   <prerequisites>

Modified: maven/plugins/trunk/maven-jmod-plugin/src/main/java/org/apache/maven/plugins/jmod/AbstractJModMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jmod-plugin/src/main/java/org/apache/maven/plugins/jmod/AbstractJModMojo.java?rev=1807068&r1=1807067&r2=1807068&view=diff
==============================================================================
--- maven/plugins/trunk/maven-jmod-plugin/src/main/java/org/apache/maven/plugins/jmod/AbstractJModMojo.java (original)
+++ maven/plugins/trunk/maven-jmod-plugin/src/main/java/org/apache/maven/plugins/jmod/AbstractJModMojo.java Sat Sep  2 18:26:31 2017
@@ -21,6 +21,7 @@ package org.apache.maven.plugins.jmod;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.List;
 import java.util.Properties;
 
 import org.apache.commons.lang3.SystemUtils;
@@ -38,6 +39,9 @@ import org.codehaus.plexus.util.cli.Comm
 import org.codehaus.plexus.util.cli.Commandline;
 
 /**
+ * This contains the code to handle toolchains and execute command which is similar to code in
+ * maven-jlink-plugin (maven-jdeps-plugin?).
+ * Later we need to think to combine that code to reduce duplication.
  * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a>
  */
 public abstract class AbstractJModMojo
@@ -53,6 +57,7 @@ public abstract class AbstractJModMojo
     @Component
     private ToolchainManager toolchainManager;
 
+    //TODO: Check how to prevent code duplication in maven-jlink, maven-jmod and maven-jdeps plugin? 
     protected String getJModExecutable()
         throws IOException
     {
@@ -187,6 +192,25 @@ public abstract class AbstractJModMojo
 
     }
 
+    /**
+     * Convert a list into a 
+     * @param modules The list of modules.
+     * @return The string with the module list which is separated by {@code ,}.
+     */
+    protected String getCommaSeparatedList( List<String> modules )
+    {
+        StringBuilder sb = new StringBuilder();
+        for ( String module : modules )
+        {
+            if ( sb.length() > 0 )
+            {
+                sb.append( ',' );
+            }
+            sb.append( module );
+        }
+        return sb.toString();
+    }
+
     private Toolchain getToolchain()
     {
         Toolchain tc = null;

Modified: maven/plugins/trunk/maven-jmod-plugin/src/main/java/org/apache/maven/plugins/jmod/JModCreateMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jmod-plugin/src/main/java/org/apache/maven/plugins/jmod/JModCreateMojo.java?rev=1807068&r1=1807067&r2=1807068&view=diff
==============================================================================
--- maven/plugins/trunk/maven-jmod-plugin/src/main/java/org/apache/maven/plugins/jmod/JModCreateMojo.java (original)
+++ maven/plugins/trunk/maven-jmod-plugin/src/main/java/org/apache/maven/plugins/jmod/JModCreateMojo.java Sat Sep  2 18:26:31 2017
@@ -21,9 +21,9 @@ package org.apache.maven.plugins.jmod;
 
 import java.io.File;
 import java.io.IOException;
+import java.io.PrintStream;
 import java.util.List;
 
-import org.apache.commons.lang3.SystemUtils;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -34,40 +34,65 @@ import org.codehaus.plexus.util.FileUtil
 import org.codehaus.plexus.util.cli.Commandline;
 
 /**
- * <pre>
- * jmod create ...
- * </pre>
+ * The <code>create</code> goals is intended to create <code>jmod</code> files which can be used for later linking via
+ * <code>maven-jlink-plugin</code>. The JMod files can not be used as usual dependencies on the classpath only in
+ * relationship with maven-jlink-plugin. JMOD files can be used at compile time and link time, but not at run time.
  * 
  * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a>
  */
-// TODO: Reconsider resolution scope, phase ?
+// TODO: Reconsider resolution scope.
 // CHECKSTYLE_OFF: LineLength
-@Mojo( name = "create", requiresDependencyResolution = ResolutionScope.COMPILE, defaultPhase = LifecyclePhase.PREPARE_PACKAGE, requiresProject = true )
+@Mojo( name = "create", requiresDependencyResolution = ResolutionScope.COMPILE, defaultPhase = LifecyclePhase.PACKAGE, requiresProject = true )
 // CHECKSTYLE_ON: LineLength
 public class JModCreateMojo
     extends AbstractJModMojo
 {
 
     /**
-     * <code>--class-path &lt;path&gt;</code> Application jar files/directory containing classes.
+     * <code>--class-path &lt;path&gt;</code> Application jar files/directory containing classes. Specifies a class path
+     * whose content will be copied into the resulting JMOD file.
      */
     @Parameter( defaultValue = "${project.build.outputDirectory}" )
     private List<String> classPath;
 
     /**
-     * Location of native commands
+     * Specifies one or more directories containing native commands to be copied. <code>JMod</code> command line
+     * equivalent: <code>--cmds <path></code>.
      */
-    @Parameter
+    @Parameter( defaultValue = "${project.basedir}/src/main/cmds" )
     private List<String> cmds;
 
     /**
-     * <code>--config &lt;path&gt;</code> Location of user-editable config files.
-     * TODO: Implement the handling. Should we use src/main/resources for this?
-     * or better something different? What about filtering?
+     * Specifies one or more directories containing configuration files to be copied. <code>--config &lt;path&gt;</code>
+     * Location of user-editable config files. TODO: Implement the handling. Should we use src/main/resources for this?
+     * or better something different? What about filtering? I think a first approach is to use
+     * <code>src/main/config</code>.
+     * 
+     * <pre>
+     * &lt;configs&gt;
+     *   &lt;config&gt;...&lt;/config&gt;
+     *   &lt;config&gt;...&lt;/config&gt;
+     *   .
+     *   .
+     * &lt;/configs&gt;
+     * </pre>
      */
     @Parameter
-    private File config;
+    private List<String> configs;
 
+    /**
+     * Exclude files matching the pattern list. Each element using one the following forms: &lt;glob-pattern&gt;,
+     * glob:&lt;glob-pattern&gt; or regex:&lt;regex-pattern&gt;
+     * 
+     * <pre>
+     * &lt;excludes&gt;
+     *   &lt;exclude&gt;...&lt;/exclude&gt;
+     *   &lt;exclude&gt;...&lt;/exclude&gt;
+     *   .
+     *   .
+     * &lt;/excludes&gt;
+     * </pre>
+     */
     @Parameter
     private List<String> excludes;
 
@@ -75,11 +100,24 @@ public class JModCreateMojo
     private String mainClass;
 
     /**
-     * Location of native libraries. <code>--libs &lt;path&gt;</code>
+     * Specifies one or more directories containing native libraries to be copied. Location of native libraries.
+     * <code>--libs &lt;path&gt;</code>
+     * 
+     * <pre>
+     * &lt;libs&gt;
+     *   &lt;lib&gt;...&lt;/lib&gt;
+     *   &lt;lib&gt;...&lt;/lib&gt;
+     *   .
+     *   .
+     * &lt;/libs&gt;
+     * </pre>
      */
     @Parameter
     private File libs;
 
+    /**
+     * Define the module version of the jmod file.
+     */
     @Parameter( defaultValue = "${project.version}" )
     private String moduleVersion;
 
@@ -90,13 +128,87 @@ public class JModCreateMojo
     @Parameter( defaultValue = "${project.build.outputDirectory}", required = true )
     private File modulePath;
 
+    @Parameter( defaultValue = "false" )
+    private boolean doNotResolveByDefault;
+
+    /**
+     * Define the locations of header files.
+     * 
+     * <pre>
+     * &lt;headerFiles&gt;
+     *   &lt;headerFile&gt;...&lt;/headerFile&gt;
+     *   &lt;headerFile&gt;...&lt;/headerFile&gt;
+     *   .
+     *   .
+     * &lt;/headerFiles&gt;
+     * </pre>
+     * 
+     * jmod command line equivalent <code>--header-files &lt;path&gt;</code>
+     */
+    @Parameter
+    private List<String> headerFiles;
+
+    /**
+     * Define the locations of man pages.
+     * 
+     * <pre>
+     * &lt;manPages&gt;
+     *   &lt;manPage&gt;...&lt;/manPage&gt;
+     *   &lt;manPage&gt;...&lt;/manPage&gt;
+     *   .
+     *   .
+     * &lt;/manPages&gt;
+     * </pre>
+     * 
+     * jmod command line equivalent <code>--man-pages &lt;path&gt;</code>
+     */
+    @Parameter
+    private List<String> manPages;
+
     /**
      * The moduleName. The default is to use the <code>artifactId</code>.
      */
     @Parameter( defaultValue = "${project.artifactId}", required = true )
     private String moduleName;
 
-    @Parameter( defaultValue = "${project.build.directory}" )
+    /**
+     * Define the location of legal notices.
+     * 
+     * <pre>
+     * &lt;legalNotices&gt;
+     *   &lt;legalNotice&gt;...&lt;/legalNotice&gt;
+     *   &lt;legalNotice&gt;...&lt;/legalNotice&gt;
+     *   .
+     *   .
+     * &lt;/legalNotices&gt;
+     * </pre>
+     * 
+     * jmod command line equivalent <code>--legal-notices &lt;path&gt;</code>
+     */
+    @Parameter
+    private List<String> legalNotices;
+
+    /**
+     * --target-platform <target-platform> Target platform
+     */
+    @Parameter
+    private String targetPlatform;
+
+    /**
+     * Hint for a tool to issue a warning if the module is resolved. The valid values are:
+     * <ul>
+     * <li>deprecated</li>
+     * <li>deprecated-for-removal</li>
+     * <li>incubating</li>
+     * </ul>
+     */
+    @Parameter
+    private String warnIfResolved;
+
+    /**
+     * Do not change this. (TODO!)
+     */
+    @Parameter( defaultValue = "${project.build.directory}", required = true, readonly = true )
     private File outputDirectory;
 
     public void execute()
@@ -117,7 +229,8 @@ public class JModCreateMojo
 
         getLog().info( "Toolchain in maven-jmod-plugin: jmod [ " + jModExecutable + " ]" );
 
-        // We need to put the resulting x.jmod files into jmods folder.
+        // We need to put the resulting x.jmod files into jmods folder otherwise is
+        // seemed to be not working.
         // Check why?
         File modsFolder = new File( outputDirectory, "jmods" );
         File resultingJModFile = new File( modsFolder, moduleName + ".jmod" );
@@ -127,7 +240,15 @@ public class JModCreateMojo
         // create the jmods folder...
         modsFolder.mkdirs();
 
-        Commandline cmd = createJModCreateCommandLine( resultingJModFile );
+        Commandline cmd;
+        try
+        {
+            cmd = createJModCreateCommandLine( resultingJModFile );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( e.getMessage() );
+        }
         cmd.setExecutable( jModExecutable );
 
         executeCommand( cmd, outputDirectory );
@@ -176,55 +297,126 @@ public class JModCreateMojo
             getLog().error( message );
             throw new MojoFailureException( message );
         }
+
+        if ( warnIfResolved != null )
+        {
+            String x = warnIfResolved.toLowerCase().trim();
+            if ( !"deprecated".equals( x ) && "deprecated-for-removal".equals( x ) && "incubating".equals( x ) )
+            {
+                String message = "The parameter warnIfResolved does not contain a valid value. "
+                    + "Valid values are 'deprecated', 'deprecated-for-removal' or 'incubating'.";
+                getLog().error( message );
+                throw new MojoFailureException( message );
+
+            }
+        }
     }
 
     private Commandline createJModCreateCommandLine( File resultingJModFile )
+        throws IOException
     {
-        Commandline cmd = new Commandline();
+        File file = new File( outputDirectory, "jmodArgs" );
+        if ( !getLog().isDebugEnabled() )
+        {
+            file.deleteOnExit();
+        }
+        file.getParentFile().mkdirs();
+        file.createNewFile();
+
+        PrintStream argsFile = new PrintStream( file );
 
-        cmd.createArg().setValue( "create" );
+        argsFile.println( "create" );
 
         if ( moduleVersion != null )
         {
-            cmd.createArg().setValue( "--module-version" );
-            cmd.createArg().setValue( moduleVersion );
+            argsFile.println( "--module-version" );
+            argsFile.println( moduleVersion );
         }
 
         if ( classPath != null )
         {
-            cmd.createArg().setValue( "--class-path" );
-            StringBuilder sb = getColonSeparateList( classPath );
-            cmd.createArg().setValue( sb.toString() );
+            argsFile.println( "--class-path" );
+            StringBuilder sb = getPlatformSeparatedList( classPath );
+            argsFile.println( sb.toString() );
+        }
+
+        if ( configs != null && !configs.isEmpty() )
+        {
+            argsFile.println( "--config" );
+            StringBuilder sb = getPlatformSeparatedList( configs );
+            // Should we quote the paths?
+            argsFile.println( sb.toString() );
+        }
+
+        if ( excludes != null && !excludes.isEmpty() )
+        {
+            argsFile.println( "--exclude" );
+            String commaSeparatedList = getCommaSeparatedList( excludes );
+            argsFile.append( '"' ).append( commaSeparatedList.replace( "\\", "\\\\" ) ).println( '"' );
+        }
+
+        if ( cmds != null && !cmds.isEmpty() )
+        {
+            argsFile.println( "--cmds" );
+            StringBuilder sb = getPlatformSeparatedList( cmds );
+            argsFile.println( sb.toString() );
         }
 
-        if ( config != null )
+        if ( headerFiles != null && !headerFiles.isEmpty() )
         {
-            cmd.createArg().setValue( "--config" );
-            cmd.createArg().setFile( config );
+            argsFile.println( "--header-files" );
+            StringBuilder sb = getPlatformSeparatedList( headerFiles );
+            argsFile.println( sb.toString() );
         }
 
-        // Can not be overwritten...
-        // TODO: Good idea?
-        cmd.createArg().setFile( resultingJModFile );
+        if ( legalNotices != null && !legalNotices.isEmpty() )
+        {
+            argsFile.println( "--legal-notices" );
+            StringBuilder sb = getPlatformSeparatedList( legalNotices );
+            argsFile.println( sb.toString() );
+        }
+
+        if ( manPages != null && !manPages.isEmpty() )
+        {
+            argsFile.println( "--man-pages" );
+            StringBuilder sb = getPlatformSeparatedList( manPages );
+            argsFile.println( sb.toString() );
+        }
+
+        if ( targetPlatform != null )
+        {
+            argsFile.println( "--target-platform" );
+            argsFile.println( targetPlatform );
+        }
+
+        if ( warnIfResolved != null )
+        {
+            argsFile.println( "--warn-if-resolved" );
+            argsFile.println( warnIfResolved );
+        }
+
+        if ( doNotResolveByDefault )
+        {
+            argsFile.println( "--do-not-resolve-by-default" );
+        }
+
+        argsFile.println( resultingJModFile.getAbsolutePath() );
+        argsFile.close();
+
+        Commandline cmd = new Commandline();
+        cmd.createArg().setValue( '@' + file.getAbsolutePath() );
+
         return cmd;
     }
 
-    private StringBuilder getColonSeparateList( List<String> paths )
+    private StringBuilder getPlatformSeparatedList( List<String> paths )
     {
         StringBuilder sb = new StringBuilder();
         for ( String module : paths )
         {
             if ( sb.length() > 0 )
             {
-                // FIXME: Check this ?
-                if ( SystemUtils.IS_OS_WINDOWS )
-                {
-                    sb.append( ';' );
-                }
-                else
-                {
-                    sb.append( ':' );
-                }
+                sb.append( File.pathSeparatorChar );
             }
             sb.append( module );
         }

Added: maven/plugins/trunk/maven-jmod-plugin/src/site/apt/index.apt.vm
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jmod-plugin/src/site/apt/index.apt.vm?rev=1807068&view=auto
==============================================================================
--- maven/plugins/trunk/maven-jmod-plugin/src/site/apt/index.apt.vm (added)
+++ maven/plugins/trunk/maven-jmod-plugin/src/site/apt/index.apt.vm Sat Sep  2 18:26:31 2017
@@ -0,0 +1,71 @@
+  ------
+  Introduction
+  ------
+  Karl Heinz Marbaise
+  ------
+  2017-08-17
+  ------
+
+~~ 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
+
+${project.name}
+
+  The JMod Plugin is used to create {{{http://openjdk.java.net/jeps/261}JMod Files}}.
+
+* Goals Overview
+
+  The JMod Plugin has currently two goals:
+
+  * {{{./jmod-mojo.html}jmod:create}} Create jmod files.
+
+  * {{{./help-mojo.html}install:help}} displays help information on maven-jmod-plugin.
+
+  At the moment support for extract, list, describe does not exist. If you need such support
+  please open a {{{./issue-tracking.html}JIRA ticket}} in our issue tracker. 
+  
+  []
+
+* Usage
+
+  General instructions on how to use the JMod Plugin can be found on the {{{./usage.html}usage page}}. Some more
+  specific use cases are described in the examples given below.
+
+  In case you still have questions regarding the plugin's usage, please have a look at the {{{./faq.html}FAQ}} and feel
+  free to contact the {{{./mail-lists.html}user mailing list}}. The posts to the mailing list are archived and could
+  already contain the answer to your question as part of an older thread. Hence, it is also worth browsing/searching
+  the {{{./mail-lists.html}mail archive}}.
+
+  If you feel like the plugin is missing a feature or has a defect, you can fill a feature request or bug report in our
+  {{{./issue-tracking.html}issue tracker}}. When creating a new issue, please provide a comprehensive description of your
+  concern. Especially for fixing bugs it is crucial that the developers can reproduce your problem. For this reason,
+  entire debug logs, POMs or most preferably little demo projects attached to the issue are very much appreciated.
+  Of course, patches are welcome, too. Contributors can check out the project from our
+  {{{./source-repository.html}source repository}} and will find supplementary information in the
+  {{{http://maven.apache.org/guides/development/guide-helping.html}guide to helping with Maven}}.
+
+* Examples
+
+  To provide you with better understanding on some usages of the Maven JMod Plugin,
+  you can take a look into the following examples:
+
+  TODO: Add examples.
+
+  []

Added: maven/plugins/trunk/maven-jmod-plugin/src/site/resources/download.cgi
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jmod-plugin/src/site/resources/download.cgi?rev=1807068&view=auto
==============================================================================
--- maven/plugins/trunk/maven-jmod-plugin/src/site/resources/download.cgi (added)
+++ maven/plugins/trunk/maven-jmod-plugin/src/site/resources/download.cgi Sat Sep  2 18:26:31 2017
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# 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.
+#
+# Just call the standard mirrors.cgi script. It will use download.html
+# as the input template.
+exec /www/www.apache.org/dyn/mirrors/mirrors.cgi $*
\ No newline at end of file

Added: maven/plugins/trunk/maven-jmod-plugin/src/site/site.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-jmod-plugin/src/site/site.xml?rev=1807068&view=auto
==============================================================================
--- maven/plugins/trunk/maven-jmod-plugin/src/site/site.xml (added)
+++ maven/plugins/trunk/maven-jmod-plugin/src/site/site.xml Sat Sep  2 18:26:31 2017
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
+  <custom>
+    <fluidoSkin>
+      <profile>pre-release</profile>
+    </fluidoSkin>
+  </custom>
+
+  <body>
+    <menu name="Overview">
+      <item name="Introduction" href="index.html"/>
+      <item name="Goals" href="plugin-info.html"/>
+      <item name="Usage" href="usage.html"/>
+      <!-- According to https://issues.apache.org/jira/browse/MNGSITE-152 -->
+      <item name="License" href="http://www.apache.org/licenses/"/>
+      <item name="Download" href="download.html"/>
+    </menu>
+<!--     <menu name="Examples"> -->
+<!--       <item name="Installing Artifact with Custom POM" href="examples/custom-pom-installation.html"/> -->
+<!--     </menu> -->
+  </body>
+</project>