You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by di...@apache.org on 2004/07/18 16:20:03 UTC

cvs commit: maven-plugins/plugin/src/test/org/apache/maven/plugin PluginToTagsTest.java

dion        2004/07/18 07:20:03

  Modified:    plugin/src/plugin-test maven.xml plugin.jelly
               plugin/xdocs navigation.xml
               plugin   project.xml plugin.jelly
  Added:       plugin/xdocs tags.xml
               plugin/src/main/org/apache/maven/plugin PluginToTags.java
               plugin/src/test plugin.jelly
               plugin/src/test/org/apache/maven/plugin
                        PluginToTagsTest.java
  Log:
  Add the ability to generate a skeletal doc on the taglib(s) provided by plugins
  
  Revision  Changes    Path
  1.4       +1 -1      maven-plugins/plugin/src/plugin-test/maven.xml
  
  Index: maven.xml
  ===================================================================
  RCS file: /home/cvs/maven-plugins/plugin/src/plugin-test/maven.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- maven.xml	6 Jul 2004 22:22:36 -0000	1.3
  +++ maven.xml	18 Jul 2004 14:20:03 -0000	1.4
  @@ -28,7 +28,7 @@
   
       <assert:assertFileExists file="${maven.docs.src}"/>
   
  -	<u:tokenize var="fileList" delim=",">navigation.xml,goals.xml</u:tokenize>
  +	<u:tokenize var="fileList" delim=",">navigation.xml,goals.xml,properties.xml,tags.xml</u:tokenize>
   
   	<j:forEach var="file" items="${fileList}">
   	  <assert:assertFileExists file="${maven.docs.src}/${file}"/>
  
  
  
  1.4       +1 -0      maven-plugins/plugin/src/plugin-test/plugin.jelly
  
  Index: plugin.jelly
  ===================================================================
  RCS file: /home/cvs/maven-plugins/plugin/src/plugin-test/plugin.jelly,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- plugin.jelly	1 May 2004 17:15:33 -0000	1.3
  +++ plugin.jelly	18 Jul 2004 14:20:03 -0000	1.4
  @@ -20,6 +20,7 @@
   
   <project>
     
  +  
     <goal name="goal1"
       description="Build a plugin jar and install to the maven.repo.local">
   
  
  
  
  1.5       +1 -0      maven-plugins/plugin/xdocs/navigation.xml
  
  Index: navigation.xml
  ===================================================================
  RCS file: /home/cvs/maven-plugins/plugin/xdocs/navigation.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- navigation.xml	1 May 2004 17:15:06 -0000	1.4
  +++ navigation.xml	18 Jul 2004 14:20:03 -0000	1.5
  @@ -27,6 +27,7 @@
       <menu name="Overview">
         <item href="/goals.html" name="Goals"/>
         <item href="/properties.html" name="Properties"/>
  +      <item href="/tags.html" name="Tags"/>
       </menu>
     </body>
   </project>
  
  
  
  1.1                  maven-plugins/plugin/xdocs/tags.xml
  
  Index: tags.xml
  ===================================================================
  <document>
    <properties>
      <title>Plugin tags</title>
      <author email="dion@apache.org">dIon Gillard</author>
    </properties>
    <body>
      <section name='Overview'>
        <p>The following tag libraries and tags are provided by this plugin.</p>
        <ol>
          <li><a href='#plugin_Tag_Library'>plugin</a>
            <ol>
              <li><a href='#uninstall_Tag'>uninstall</a></li>
              <li><a href='#clearCache_Tag'>clearCache</a></li>
            </ol>
          </li>
          <li><a href='#assert_Tag_Library'>assert</a>
            <ol>
              <li><a href='#assertFileExists_Tag'>assertFileExists</a></li>
              <li><a href='#assertFileNotFound_Tag'>assertFileNotFound</a></li>
              <li><a href='#assertEquals_Tag'>assertEquals</a></li>
            </ol>
          </li>
        </ol>
      </section>
  
      <section name='plugin Tag Library'>
        <subsection name='uninstall Tag'>
          <p>
            A tag to uninstall a given plugin from the various plugin directories, including
            <ol>
              <li><code>${maven.plugin.dir}</code></li>
              <li><code>${maven.plugin.user.dir}</code></li>
              <li><code>${maven.plugin.unpacked.dir}</code></li>
            </ol>
          </p>
          <table>
            <tr><th>Attribute</th><th>Optional?</th><th>Description</th></tr>
            <tr>
              <td>name</td>
              <td>No</td>
              <td>Usually this is <code>${pom.artifactId}</code></td>
            </tr>
          </table>
        </subsection>
        <subsection name='clearCache Tag'>
          <p>
            Clears the files used for caching plugin goals, dependencies and 
            tag libraries from <code>${maven.plugin.unpacked.dir}</code>
          </p>
          <p>There are no attributes for this tag</p>
        </subsection>
      </section>
      <section name='assert Tag Library'>
        <p>
          This tag library is typically used in testing plugins. And are
          similar in usage to the assert methods in a JUnit test case.
        </p>
        <subsection name='assertFileExists Tag'>
          <p>Fails the build if the given file does not exist, otherwise no effect.</p>
          <table>
            <tr><th>Attribute</th><th>Optional?</th><th>Description</th></tr>
            <tr>
              <td>file</td>
              <td>No</td>
              <td>The path of the file to be checked</td>
            </tr>
            <tr>
              <td>msg</td>
              <td>Yes</td>
              <td>A message to be displayed when the file doesn't exist</td>
            </tr>
          </table>
        </subsection>
        <subsection name='assertFileNotFound Tag'>
          <p>Fails the build if the given file does exist, otherwise no effect.</p>
          <table>
            <tr><th>Attribute</th><th>Optional?</th><th>Description</th></tr>
            <tr>
              <td>file</td>
              <td>No</td>
              <td>The path of the file to be checked</td>
            </tr>
            <tr>
              <td>msg</td>
              <td>Yes</td>
              <td>A message to be displayed when the file doesn't exist</td>
            </tr>
          </table>
        </subsection>
        <subsection name='assertEquals Tag'>
          <p>Fails the build if the two values are not equal, otherwise no effect.</p>
          <table>
            <tr><th>Attribute</th><th>Optional?</th><th>Description</th></tr>
            <tr>
              <td>expected</td>
              <td>No</td>
              <td>The expected value</td>
            </tr>
            <tr>
              <td>value</td>
              <td>No</td>
              <td>The actual value</td>
            </tr>
            <tr>
              <td>msg</td>
              <td>Yes</td>
              <td>A message to be displayed when the values aren't equal.</td>
            </tr>
          </table>
        </subsection>
      </section>
    </body>
  </document>
  
  
  
  1.1                  maven-plugins/plugin/src/main/org/apache/maven/plugin/PluginToTags.java
  
  Index: PluginToTags.java
  ===================================================================
  package org.apache.maven.plugin;
  
  /*
   * ====================================================================
   * Copyright 2001-2004 The Apache Software Foundation.
   * 
   * Licensed 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.
   * ====================================================================
   */
  
  import org.apache.commons.lang.StringUtils;
  import org.jdom.Document;
  import org.jdom.Element;
  import org.jdom.JDOMException;
  import org.jdom.input.SAXBuilder;
  import org.jdom.xpath.XPath;
  
  import java.io.BufferedWriter;
  import java.io.File;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.LinkedList;
  import java.util.List;
  import java.util.Map;
  
  public class PluginToTags
  {
      /** plugin script */
      private String pluginScript;
  
      /** output file */
      private String xdoc;
  
      /**
       * @return Returns the outputFile.
       */
      public String getXdoc()
      {
          return xdoc;
      }
  
      /**
       * @param outputFile
       *            The outputFile to set.
       */
      public void setXdoc(String outputFile)
      {
          this.xdoc = outputFile;
      }
  
      /**
       * @return Returns the pluginScript.
       */
      public String getPluginScript()
      {
          return pluginScript;
      }
  
      /**
       * @param pluginScript
       *            The plugin script to generate the docs from.
       */
      public void setPluginScript(String pluginScript)
      {
          this.pluginScript = pluginScript;
      }
  
      /**
       * Transform the plugin script to the output file. The output file will be
       * in xdoc format.
       * 
       * @throws IOException reading files
       * @throws JDOMException on xml
       */
      public void transform() throws JDOMException, IOException
      {
          File output = new File(getXdoc());
          BufferedWriter bw = new BufferedWriter(new FileWriter((output)));
          bw.write("<document>\n");
          bw.write("  <properties>\n");
          bw.write("    <title>Plugin tags</title>\n");
          bw.write("  </properties>\n");
          bw.write("  <body>\n");
          List taglibs = getTaglibs();
          writeOverview(bw, taglibs);
          writeTaglibs(bw, taglibs);
          bw.write("  </body>\n");
          bw.write("</document>\n");
          bw.close();
      }
      
      /**
       * Write xdoc sections to the given writer for each taglib
       * @param bw the writer
       * @param taglibs a list of taglibs to output
       * @throws IOException when there are errors writing
       */
      private void writeTaglibs(BufferedWriter bw, List taglibs) throws IOException
      {
          for (Iterator taglibIter = taglibs.iterator(); taglibIter.hasNext();)
          {
              Map taglib = (Map) taglibIter.next();
              bw.write("    <section name='" + taglib.get("uri") + " Tag Library'>\n");
              List tagNames = (List)taglib.get("tagNames");
              // write out subsection with name, description, attr, desc etc....
              for (Iterator tagIter = tagNames.iterator(); tagIter.hasNext();)
              {
                  String name = (String) tagIter.next();
                  bw.write("      <subsection name='" + name + " Tag'>\n");
                  bw.write("        <p>No description</p>\n");
                  bw.write("        <table>\n");
                  bw.write("          <tr><th>Attribute</th><th>Optional?</th><th>Description</th></tr>\n");
                  bw.write("        </table>\n");
                  bw.write("      </subsection>\n");
              }
              bw.write("    </section>\n");
          }
      }
  
      /**
       * Write an xdoc overview section for all taglibs
       * @param bw the writer for output
       * @param taglibs the taglibs to output
       * @throws IOException when writing fails
       */
      private void writeOverview(BufferedWriter bw, List taglibs) throws IOException
      {
          bw.write("    <section name='Overview'>\n");
          bw.write("      <p>The following tag libraries and tags are provided by this plugin.</p>\n");
          bw.write("      <ol>\n");
          for (Iterator taglibIter = taglibs.iterator(); taglibIter.hasNext();)
          {
              Map taglib = (Map) taglibIter.next();
              String title = taglib.get("uri") + " Tag Library";
              String linkStart = "<a href='#" + StringUtils.replace(title, " ", "_")
              	+ "'>";
              bw.write("        <li>" + linkStart + taglib.get("uri") + "</a>\n");
              bw.write("          <ol>\n");
              List tagNames = (List)taglib.get("tagNames");
              for (Iterator tagIter = tagNames.iterator(); tagIter.hasNext();)
              {
                  String name = (String) tagIter.next();
                  bw.write("            <li><a href='#" + name + "_Tag'>" + name + "</a></li>\n");
              }
              bw.write("          </ol>\n");
              bw.write("        </li>\n");
          }    
          bw.write("      </ol>\n");
          bw.write("    </section>\n");
      }
  
      /**
       * @return a list of tag libraries. Each element in the list 
       * is a {@link Map}. Each map contains an entry for "uri" (as a String)
       * and one for tagNames (as a List).
       * 
       * @throws IOException reading files
       * @throws JDOMException on xml
       */
      public List getTaglibs() throws JDOMException, IOException
      {
          SAXBuilder builder = new SAXBuilder();
          Document doc = builder.build(new File(getPluginScript()));
          XPath xpath = XPath.newInstance("/project/define:taglib");
          List taglibElements = xpath.selectNodes(doc);
          List taglibs = new LinkedList();
          for (Iterator iter = taglibElements.iterator(); iter.hasNext();)
          {
              Element element = (Element) iter.next();
              Map taglib = new HashMap();
              taglib.put("uri", element.getAttributeValue("uri"));
              taglib.put("tagNames", new LinkedList());
              XPath tagsXp = XPath.newInstance("define:tag|define:jellybean");
              List tagsElements = tagsXp.selectNodes(element);
              for (Iterator tagsIter = tagsElements.iterator(); tagsIter.hasNext();)
              {
                  Element tagsElement = (Element) tagsIter.next();
                  ((List) taglib.get("tagNames")).add(tagsElement.getAttributeValue("name"));
              }
              taglibs.add(taglib);
          }
          return taglibs;
      }
  
  }
  
  
  1.1                  maven-plugins/plugin/src/test/plugin.jelly
  
  Index: plugin.jelly
  ===================================================================
  <?xml version="1.0"?>
  <!-- 
  /*
   * Copyright 2001-2004 The Apache Software Foundation.
   * 
   * Licensed 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:define="jelly:define"
    xmlns:j="jelly:core"
    xmlns:jsl="jelly:jsl"
    xmlns:log="jelly:log"
    xmlns:maven="jelly:maven"
    xmlns:pom="pom"
    xmlns:util="jelly:util"
    xmlns:x="jelly:xml"
    xmlns:velocity="jelly:velocity"
    xmlns:doc="doc">
  
    <j:new var="reports" className="java.util.ArrayList"/>
  
  
    <define:taglib uri="doc">
      <define:tag name="deregisterReport">
        <!-- @name : Report to deregister, must be same as name used to register -->
        
        <maven:pluginVar var="reports" plugin="maven-xdoc-plugin" property="reports" />
        
        <j:set var="removeRpt" value="null"/>
        <j:forEach var="rpt" items="${reports}">
          <j:if test="${rpt.get('name').equals(name)}">
            <j:set var="removeRpt" value="${rpt}"/>  
          </j:if>
        </j:forEach>
        <j:if test="${removeRpt != null}">
          <j:set var="dummy" value="${reports.remove(removeRpt)}"/>
        </j:if>
      </define:tag>
      
      <define:tag name="registerReport">
        <!--
        @name the name of this report. Used for navigation items
        @pluginName the name of the plugin.  @plugin:report goal must exist
        @description text description of report
        @link the nav-bar link for this report
        @target the target for the new page (_self, _blank, ...) 
        -->
        <maven:pluginVar var="reports" plugin="maven-xdoc-plugin" property="reports" />
  
        <!-- check if the given name is in the list already -->      
        <j:set var="add" value="true"/>
        <j:forEach var="rpt" items="${reports}">
          <j:if test="${rpt.get('name').equals(name)}">
            <j:set var="add" value="false"/>  
          </j:if>
        </j:forEach>
        
        <j:if test="${add.equals('true')}">
          <j:new var="report" className="java.util.HashMap"/>
          <j:set var="dummy">
            ${report.put('name', name)}
            ${report.put('pluginName', pluginName)}
            ${report.put('description', description)}
            ${report.put('link', link)}
            ${report.put('externalLink', externalLink)}
            ${report.put('target', target)}
            ${reports.add(report)}
          </j:set>
        </j:if>
  
      </define:tag>
      
      <define:tag name="formatAsNumber">
        <!--
         | @string
         | @pattern
        -->
        
        <!-- This appears to need to be here which is no good. Need
             more of a global tool box.
        -->
        
        <j:useBean var="formatter" class="org.apache.maven.util.DVSLFormatter"/>
        ${formatter.formatNumber(string,pattern)}
      </define:tag>
  
      <define:tag name="jslFile">
        <!--
         | Basic tag for performing arbitrary jsl transformations
         | on arbitrary jsl inputs.
         | @input (optional)
         | @output
         | @stylesheet
         | @encoding
         | @omitXmlDeclaration
         | @outputMode
         | @prettyPrint
        -->
   
        <!-- Set default encoding if not set. -->
        <j:if test="${encoding == null}">
          <j:set var="encoding" 
                 value="${plugin.getVariable('maven.docs.outputencoding')}"/>
        </j:if>
  
        <j:if test="${input != null}">    
          <util:file name="${input}" var="inputFile" />
          <x:parse var="doc" xml="${inputFile}"/>
        </j:if>
        
        <j:set var="stylesheetURI" value="file:${stylesheet}"/>
        <j:file
          name="${output}"
          encoding="${encoding}"
          omitXmlDeclaration="${omitXmlDeclaration}"
          outputMode="${outputMode}"
          prettyPrint="${prettyPrint}">
          <j:include uri="${stylesheetURI.toString()}"/>
        </j:file>
      
      </define:tag>
      
      
      <define:tag name="jsl">
        <!--
         | This tag has a lot of defaults suitable for transforming
         | documents easily. See jslCore for a tag suitable for
         | transforming documents how you want.
         | @input
         | @outputDirectory - Will be placed under ${maven.gen.docs}
         | @stylesheet
         | @encoding           - defaults to ${maven.docs.outputencoding}
         | @omitXmlDeclaration - defaults to ${maven.docs.omitXmlDeclaration}
         | @outputMode
         | @prettyPrint
        -->
      
        <!-- 
        @todo make sure the output directory exists.
        -->        
        
        <!-- Set default outputDirectory if not set. -->
        <j:if test="${empty(outputDirectory)}">
          <j:set var="outputDirectory"  value="${maven.gen.docs}"
          />
        </j:if>
  
        <!-- Set default encoding if not set. -->
        <j:if test="${encoding == null}">
          <j:set var="encoding" value="${maven.docs.outputencoding}" />
        </j:if>
        
        <j:if test="${omitXmlDeclaration == null}">
          <j:set var="omitXmlDeclaration" value="${maven.docs.omitXmlDeclaration}"/>
        </j:if>
        
        <mkdir dir="${outputDirectory}"/>
  
        <doc:jslFile
          input="${input}"
          output="${outputDirectory}/${output}"
          stylesheet="${stylesheet}"
          encoding="${encoding}"
          omitXmlDeclaration="${omitXmlDeclaration}"
          outputMode="${outputMode}"
          prettyPrint="${prettyPrint}"/>
      </define:tag>
  
  
        <!--
          @link
          @relativePath
          @name
          @img
          @state - expanded / collapsed / none
          @target
          -->
      <define:tag name="itemLink">
        <x:element name="a">
          <x:attribute name="href">${pathTool.calculateLink(link,relativePath)}</x:attribute>
          <j:choose>
            <j:when test="${target != null and target.equals('_blank')}">
              <x:attribute name="class">newWindow</x:attribute>
              <x:attribute name="title">New Window</x:attribute>
            </j:when>
            <j:when test="${link.startsWith('http')}">
              <x:attribute name="class">externalLink</x:attribute>
              <x:attribute name="title">External Link</x:attribute>
            </j:when>
          </j:choose>
          <j:if test="${!empty(target)}">
            <x:attribute name="target">${target}</x:attribute>
          </j:if>
          <j:if test="${empty(state)}"><j:set var="state" value="none"/></j:if>
          <j:if test="${empty(img)}">${name}</j:if>
          <j:if test="${!empty(img)}"><img style="border: 1px" src="${pathTool.calculateLink(img,relativePath)}" title="${name}" alt="${name}"/></j:if>
        </x:element>
      </define:tag>
      
      <define:tag name="text-xdoc">
        <!--
          @output - The output file
          @title - Title for page
          @section - Section heading
          @encoding - The XML encoding
          @preamble - Placed in paragraph block prior to text
          @inputText - Will be wrapped in a CDATA, will not escape CDATA tags (as yet)
          @inputFile - Will be read in and wrapped in CDATA. Overrides inputText if set
          -->
        <j:set var="inputFile">${inputFile}</j:set>
        <j:if test="${inputFile != ''}">
          <util:file name="${inputFile}" var="inputFileObject"/>
          <util:loadText var="inputText" file="${inputFileObject}"/>
         </j:if>
          
        <!-- Set default encoding if not set. -->
          <j:if test="${encoding == null}">
            <j:set var="encoding" 
                   value="${plugin.getVariable('maven.docs.outputencoding')}"/>
          </j:if>
        
        
        <j:file name="${output}" prettyPrint="false" encoding="${encoding}">         
              <document>
                <properties><title>${title}</title></properties>
                <body>
                  <section name="${section}">
                  <p>${preamble}</p>
                    <source>
                      <![CDATA[${inputText}]]>
                    </source>
                  </section>
                </body>
              </document>
      </j:file>  
      </define:tag>
  
      <!-- Alternator for row style in a table -->
      <define:tag name="printRow">
        <j:if test="${(count % 2) gt 0}">
          <x:element name="tr">
            <x:attribute name="class">a</x:attribute>
          </x:element>
        </j:if>
        <j:if test="${(count % 2) le 0}">
          <x:element name="tr">
            <x:attribute name="class">b</x:attribute>
          </x:element>
        </j:if>
      </define:tag>
  
      <!-- Generates the JSL files on the given srcdir attribute -->
      <define:tag name="performJSL">
        <util:file var="srcdirFile" name="${srcdir}"/>
        <j:set var="srcdir" value="${srcdirFile.getCanonicalPath()}"/>
        <util:file var="destdirFile" name="${destdir}"/>
        <j:set var="destdir" value="${destdirFile.getCanonicalPath()}"/>
         
        <util:replace var="fromPattern" oldChar="\" newChar="/" value="${srcdir}/*.xml"/>
        <util:replace var="toPattern" oldChar="\" newChar="/" value="${destdir}/*.html"/>
        <j:if test="${mapper == null}">
          <j:new var="mapper" className="org.apache.maven.util.CaseInsensitiveGlobPatternMapper"/>
        </j:if>
        <j:setProperties object="${mapper}" from="${fromPattern}" to="${toPattern}"/>
  
        <util:replace var="fromDirPattern" oldChar="\" newChar="/" value="${srcdir}*"/>
        <util:replace var="toDirPattern" oldChar="\" newChar="/" value="${destdir}*"/>
        <j:new var="dirMapper" className="org.apache.maven.util.CaseInsensitiveGlobPatternMapper"/>
        <j:setProperties object="${dirMapper}" from="${fromDirPattern}" to="${toDirPattern}"/>
  
        <fileScanner var="docFiles">
          <fileset dir="${srcdir}">
            <patternset>
              <exclude name="**/project.xml"/>
              <exclude name="**/template.xml"/>
              <exclude name="**/navigation.xml"/>
              <exclude name="changes.xml"/>
              <include name="**/*.xml"/>
            </patternset>
          </fileset>
        </fileScanner>
  
        <!-- determine nav file to be used:- 1. check for sitewide nav files -->
        <!-- supplied nav file as project.xml in stylesheets dir -->
        <util:available file="${maven.docs.src}/stylesheets/project.xml">
          <util:file var="siteNavFile" name="${maven.docs.src}/stylesheets/project.xml"/>
        </util:available>
        <!-- supplied nav file as project.xml in root of xdocs source tree -->
        <util:available file="${maven.docs.src}/project.xml">
          <util:file var="siteNavFile" name="${maven.docs.src}/project.xml"/>
        </util:available>
        <!-- supplied navigation file in root of xdocs source tree -->
        <util:available file="${maven.docs.src}/navigation.xml">
          <util:file var="siteNavFile" name="${maven.docs.src}/navigation.xml"/>
        </util:available>
        <!-- navigation file that was generated -->
        <util:available file="${maven.gen.docs}/navigation.xml"> 
          <util:file var="siteNavFile" name="${maven.gen.docs}/navigation.xml"/> 
        </util:available> 
        <!-- hold onto maven.docs.src for later -->
        <util:file var="docsSrcFile" name="${maven.docs.src}"/>
  
        <!-- parse the project nav. Someone jellier than me can remove the temp file requirement -->
        <maven:pluginVar var="reports" plugin="maven-xdoc-plugin" property="reports" />
  
        <util:file var="tempnav" name="${maven.build.dir}/project-nav.xml"/>
      
        <j:file name="${tempnav.toString()}" outputMode="xml">
          <j:import file="${plugin.resources}/navigation.jelly" inherit="true"/>    
        </j:file>
    
        <x:parse var="projectNavRoot" xml="${tempnav}"/>
        <x:set var="projectNav" select="$projectNavRoot/project"/>
  
        <j:forEach var="file" items="${docFiles.iterator()}">
  
          <util:replace var="inDirForward" oldChar="\" newChar="/" value="${file.parent}"/>
          <j:set var="outDir" value="${dirMapper.mapFileName(inDirForward).0}"/>
          <mkdir dir="${outDir}"/>
  
          <!-- generate output file name -->
          <util:replace var="outFileForward" oldChar="\" newChar="/" value="${file.toString()}"/>
          <j:set var="outFile" value="${mapper.mapFileName(outFileForward).0}"/>
  
          <echo>Generating ${outFile} from ${file}</echo>
          <!-- work out relative path -->
          <util:replace var="docsForward" oldChar="\" newChar="/" value="${srcdir}"/>
          <j:if test="${pathTool == null}">
              <j:useBean var="pathTool" class="org.apache.maven.util.DVSLPathTool"/>
          </j:if>
          <j:set var="relativePath" value="${pathTool.getRelativePath(docsForward, outFileForward)}"/>
  
          <!-- determine nav file to be used: 2. check for nav file -->
          <!-- in the same directory as xml file being processed -->
          <!-- if no such nav file available use sitewide nav file -->
          <j:set var="navFile" value="${siteNavFile}" />
          <util:available file="${file.parentFile.absoluteFile}/navigation.xml">
            <!-- dont use current directory navigation.xml if it's in maven.docs.src -->
            <j:if test="${!(file.parentFile.equals(docsSrcFile))}">
              <util:file var="navFile" name="${file.parentFile.absoluteFile}/navigation.xml"/>
            </j:if>
          </util:available>
  
          <!-- parse nav and make it available to the stylesheet -->
          <x:parse var="navXML" xml="${navFile}"/>
          <x:set var="nav" select="$navXML/project"/>
          <!-- parse the doc and pass it to the stylesheet -->
          <x:parse var="doc" xml="${file}"/>
          
          <j:file name="${outFile}" encoding="${outputencoding}"
            omitXmlDeclaration="true" outputMode="xml"
            prettyPrint="no">
            <j:include uri="${stylesheet.toString()}"/>
          </j:file>
        </j:forEach>
  
      </define:tag>
      
      
      <define:tag name="jslToSite">
          <!--
           | transforms files in the given dir using the site stylesheet and navigation and place them
           | in maven.docs.dest (typically target/docs)
           | @srcdir source directory
          -->
    
        <maven:param-check value="${srcdir}" fail="true" message="'srcdir' must be specified"/>
  
        <maven:pluginVar var="maven.xdoc.jsl" 
          plugin='maven-xdoc-plugin' property='maven.xdoc.jsl' />
        
        <!-- copy old value for restoring it later -->
        <j:set var="previous.plugin.resources" value="${plugin.resources}" />
  
        <maven:pluginVar var="plugin.resources" 
          plugin='maven-xdoc-plugin' property='plugin.resources' />
          
        <maven:pluginVar var="includeProjectDocumentation" 
          plugin='maven-xdoc-plugin' property='maven.xdoc.includeProjectDocumentation' />
          
        <maven:pluginVar var="maven.xdoc.poweredby.image" 
          plugin='maven-xdoc-plugin' property='maven.xdoc.poweredby.image' />
          
        <maven:pluginVar var="maven.xdoc.poweredby.title" 
          plugin='maven-xdoc-plugin' property='maven.xdoc.poweredby.title' />
          
        <maven:pluginVar var="maven.xdoc.poweredby.url" 
          plugin='maven-xdoc-plugin' property='maven.xdoc.poweredby.url' />
          
        <maven:pluginVar var="maven.xdoc.crumb.separator" 
          plugin='maven-xdoc-plugin' property='maven.xdoc.crumb.separator' />
        
        <j:set var="outputDirectory" value="${maven.gen.docs}" />
        <j:set var="stylesheet" value="file:${plugin.resources}/site.jsl" />
    
        <j:set var="outputencoding" value="${maven.docs.outputencoding}" />
    
        <doc:performJSL srcdir="${srcdir}" destdir="${maven.docs.dest}" />
  
        <!-- restore plugin.resources -->
        <j:set var="plugin.resources" value="${previous.plugin.resources}" />
  
      </define:tag>
      
      <!--
       | escapes a string for generating a valid name token (need for "name" attribute in html anchors)
       | @value given token
      --> 
       <define:tag name="escapeNameToken">
       <j:invokeStatic var="escapedtoken" className="org.apache.commons.lang.StringUtils" method="replaceChars">
          <j:arg type="java.lang.String" value="${value}" useContextClassLoader="true"/>
          <j:arg type="java.lang.String" value=" .,;!?/'\()[]{}+*°" useContextClassLoader="true"/>
          <j:arg type="java.lang.String" value="__________________" useContextClassLoader="true"/>
       </j:invokeStatic>${escapedtoken}</define:tag>
  
    </define:taglib>
  
    <!-- ================================================================== -->
    <!-- P R O J E C T  D O C U M E N T A T I O N                           -->
    <!-- ================================================================== -->
  
    <goal name="xdoc"
      prereqs="xdoc:generate-from-pom, xdoc:transform"
      description="Generate html project documentation xdoc sources"/>
  
    <goal name="xdoc:init"
      description="Generates the directory structure required for xdocs">
  
      <mkdir dir="${maven.gen.docs}"/>
      <mkdir dir="${maven.docs.dest}"/>
  
    </goal>
  
    <goal
      name="xdoc:generate-from-pom"
      prereqs="xdoc:init, xdoc:register-reports"
      description="Generates xdocs for site based on project descriptor">
      
      <echo>Generating xdocs from POM ... </echo>
      
      <util:tokenize var="pomDocuments" delim=",">${maven.xdoc.pomDocuments}</util:tokenize>
      
      <!-- All the templates use $project for now. -->
      <j:set var="project" value="${pom}"/>
      <maven:pluginVar var="reports" plugin="maven-xdoc-plugin" property="reports" />
  
      <!-- Does the user want the maven-generated docs on their site? -->
      <j:set 
        var="includeProjectDocumentation" 
        value="${maven.xdoc.includeProjectDocumentation}"/>
      
      <!-- Need the escaper to html output. -->
      <j:useBean var="escape" class="org.apache.velocity.anakia.Escape"/>
      <j:useBean var="files" class="org.apache.velocity.texen.util.FileUtil"/>
      
      <!-- Need to enrich information about dependency by taking some information from its POM. -->
      <j:useBean var="dependencyDescriber" class="org.apache.maven.DependencyDescriberBean"/>
       ${dependencyDescriber.build(pom)}
      
      
      <j:if test="${encoding == null}">
           <j:set 
             var="encoding" 
             value="${maven.docs.outputencoding}"
           />
      </j:if>
      
      <j:forEach var="pomDocument" items="${pomDocuments}">
  
        <!-- If the template ends with ".xml" use velocity to generate the 
             HTML. If it ends with ".jelly" use JSL. -->
        <j:choose>
          <j:when test="${pomDocument.endsWith('.xml')}">
            <velocity:merge 
              name="${maven.gen.docs}/${pomDocument}"
              basedir="${plugin.resources}/templates"
              template="${pomDocument}"
              inputEncoding="${encoding}"
              outputEncoding="${encoding}" 
            />
          </j:when>
          <j:when test="${pomDocument.endsWith('.jelly')}">
            <doc:jslFile
              output="${maven.gen.docs}/${pomDocument.substring(0,pomDocument.indexOf('.jelly'))}.xml"
              stylesheet="${plugin.resources}/templates/${pomDocument}"
              outputMode="xml"
              prettyPrint="true"/>
          </j:when>
          <j:otherwise>
            <fail>Unknown report format for report [${pomDocument}].</fail>
          </j:otherwise>
        </j:choose>
        
      </j:forEach>
  
    </goal>
  
    <!-- ================================================================== -->
    <!-- V A L I D A T E  X D O C S                                         -->
    <!-- ================================================================== -->
  
    <!-- validate xdocs -->
    <goal name="xdoc:validate" prereqs="pom:taglib"
      description="Validate xdocs match the schema">
  
      <available file="${maven.docs.src}" type="dir"
        property="maven.docs.src.available"/>
  
      <j:if test="${maven.docs.src.available}">
        <fileScanner var="navFiles">
          <fileset dir="${maven.docs.src}">
            <patternset>
              <include name="**/navigation.xml"/>
            </patternset>
          </fileset>
        </fileScanner>
  
        <j:forEach var="file" items="${navFiles.iterator()}">
          <echo>Validating ${file}</echo>
          <pom:validate validator="${maven.home}/maven-navigation-1.0.xsd"
            projectDescriptor="${file}"/>
        </j:forEach>
      </j:if>
    </goal>
  
    <!-- ================================================================== -->
    <!-- C O P Y  R E S O U R C E S                                         -->
    <!-- ================================================================== -->
  
    <!-- copy resources needed for xdocs -->
    <goal name="xdoc:copy-resources"
      prereqs="xdoc:init"
      description="copy static resources for use in xdocs generated html">
      
      <!-- Read in the ui properties. -->
      <util:properties uri="file:${plugin.resources}/ui.properties" var="uiProperties"/>
  
      <!-- Copy maven supplied stylesheets.  -->
      <copy todir="${maven.docs.dest}/style" overwrite="yes" filtering="yes">
        <fileset dir="${plugin.resources}/css">
          <include name="**/*.css"/>
        </fileset>
        
        <filterset>
          <j:forEach var="uiProperty" items="${uiProperties.keys()}">
            <util:replace var="token" oldChar="." newChar="_" value="${uiProperty}"/>
            <j:set var="token" value="${token.substring(6).toUpperCase()}"/>
             <!-- Check if User has overidden this property -->
             <j:set var="propertyName" value="${uiProperty}" />
             <j:set var="propertyValue" value="${context.getVariable(propertyName)}"/>
             <j:choose>
               <j:when test="${propertyValue != null}">
                 <!-- Use user's properties -->
                 <filter token="${token}" value="${propertyValue}"/>
               </j:when>
               <j:otherwise>
                 <!-- Use plugin's default properties -->
                 <filter token="${token}" value="${uiProperties.getProperty(uiProperty)}"/>
               </j:otherwise>
             </j:choose>
          </j:forEach>
        </filterset>
      </copy>
  
      <!-- Copy maven supplied images.  -->
      <copy todir="${maven.docs.dest}/images" overwrite="yes" filtering="no">
        <fileset dir="${plugin.resources}/images">
          <include name="**/*.gif"/>
          <include name="**/*.jpeg"/>
          <include name="**/*.jpg"/>
          <include name="**/*.png"/>
        </fileset>
      </copy>
  
    </goal>
  
    <!-- ================================================================== -->
    <!-- C O P Y  U S E R  S U P P L I E D  R E S O U R C E S               -->
    <!-- ================================================================== -->
  
    <!-- copy user resources -->
    <goal name="xdoc:copy-user-resources"
      prereqs="xdoc:init"
      description="Copy user provided resources to docs destination">
  
      <j:if test="${maven.docs.src.available}">
  
        <!-- Copy user supplied resources -->
        <copy todir="${maven.docs.dest}" filtering="no">
          <fileset dir="${maven.docs.src}">
            <exclude name="**/*.xml"/>
            <exclude name="**/*.fml"/>
            <exclude name="**/CVS/*"/>
            <exclude name="stylesheets/*"/>
          </fileset>
          <!-- copy file in generated docs folder: this allows for reporting plugins to add images -->
          <fileset dir="${maven.gen.docs}">
            <exclude name="**/*.xml"/>
            <exclude name="**/CVS/*"/>
            <exclude name="stylesheets/*"/>
          </fileset>
        </copy>
  
        <util:available file="${maven.docs.src}/stylesheets">
          <!-- Copy user supplied stylesheets, can override maven -->
          <copy todir="${maven.docs.dest}/style" overwrite="true" filtering="no">
            <fileset dir="${maven.docs.src}/stylesheets">
              <include name="**/*.css"/>
            </fileset>
          </copy>
        </util:available>
   
      </j:if>
    </goal>
  
    <!-- ================================================================== -->
    <!-- D V S L  D O C U M E N T A T I O N                                 -->
    <!-- ================================================================== -->
    
    <goal name="xdoc:transform"
      prereqs="xdoc:init"
      description="Generate html project documentation xdoc sources">
  
      <tstamp>
        <format property="mavenCurrentYear" pattern="yyyy"/>
      </tstamp>
  
      <!-- Use jelly utils here -->
  
      <available
        file="${maven.gen.docs}"
        type="dir"
        property="maven.gen.docs.available"
      />
  
      <available
        file="${maven.docs.src}"
        type="dir"
        property="maven.docs.src.available"
      />
  
      <!-- use JSL in Jelly to build the documenation -->
      <attainGoal name="xdoc:copy-resources"/>
      <attainGoal name="xdoc:copy-user-resources"/>
      <attainGoal name="xdoc:jelly-transform"/>
  
    </goal>
  
    <!-- ================================================================== -->
    <!-- J E L L Y   D O C U M E N T A T I O N                              -->
    <!-- ================================================================== -->
  
    <goal name="xdoc:jelly-init" description="Set up jelly xdoc requirements">
      <!-- moving here temporarily -->
      <tstamp>
        <format property="mavenCurrentYear" pattern="yyyy"/>
      </tstamp>
      <tstamp>
        <format property="build.date" pattern="${maven.xdoc.date.format}"
          locale="${maven.xdoc.date.locale}"/>
      </tstamp>
    </goal>
    
    
  
    <goal name="xdoc:register-reports">
      <!--
       | We need to have each <report> register itself with us so we can
       | build up our navbar.  To do this, we call the plugin:register
       | goal on each report plugin.
       |-->
       
      <j:if test="${!pom.reports.isEmpty()}">
        <j:forEach var="report" items="${pom.reports}">
          <attainGoal name="${report}:register"/>
        </j:forEach>
      </j:if>
      
      <!-- If the descriptor is empty, use these as defaults -->
      <j:if test="${pom.reports.isEmpty()}">
        <attainGoal name="maven-jdepend-plugin:register"/>
        <attainGoal name="maven-checkstyle-plugin:register"/>
        <attainGoal name="maven-changes-plugin:register"/>
        <attainGoal name="maven-changelog-plugin:register"/>
        <attainGoal name="maven-developer-activity-plugin:register"/>
        <attainGoal name="maven-file-activity-plugin:register"/>
        <attainGoal name="maven-license-plugin:register"/>
        <attainGoal name="maven-javadoc-plugin:register"/>
        <attainGoal name="maven-jxr-plugin:register"/>
        <attainGoal name="maven-junit-report-plugin:register"/>
        <attainGoal name="maven-linkcheck-plugin:register"/>
        <attainGoal name="maven-tasklist-plugin:register"/>
      </j:if>
    </goal>
  
    <goal name="xdoc:jelly-transform" 
      prereqs="xdoc:init, xdoc:jelly-init, xdoc:register-reports"
      description="transform xdocs using jelly/jsl rather than dvsl">
  
      <j:set var="destdir" value="${maven.docs.dest}"/>
      <j:set var="outputencoding" value="${maven.docs.outputencoding}"/>
  
      <!-- need to parse navigation into $nav -->
  
      <!-- mapper for determining output file name -->
      <j:new var="mapper" className="org.apache.maven.util.CaseInsensitiveGlobPatternMapper"/>
      
  
      <!-- path tool for relative processing -->
      <j:useBean var="pathTool" class="org.apache.maven.util.DVSLPathTool"/>
  
      <!-- tool for loading resources from the class loader -->
      <j:useBean class="org.apache.maven.util.ResourceBean" var="resourceTool"/>
  
      <!-- determine which stylesheet to use -->
      <j:set var="stylesheet" value="${maven.xdoc.jsl}"/>
      <j:if test="${empty(stylesheet)}">
        <j:set var="stylesheet" value="${resourceTool.findResource('plugin-resources/site.jsl')}"/>
        <j:if test="${empty(stylesheet)}">
          <log:warn>Could not load the JSL stylesheet 'site.jsl' on the classpath</log:warn>
          <j:set var="stylesheet" value="./site.jsl"/>
        </j:if>
      </j:if>
  
      <util:available file="${maven.gen.docs}">
        <log:info>About to use JSL stylesheet ${stylesheet}</log:info>
  
        <!-- perform JSL on generated docs -->
        <doc:performJSL srcdir="${maven.gen.docs}" destdir="${maven.docs.dest}"/>
      </util:available>
      
      <!-- perform JSL on user provided docs -->
      <j:if test="${maven.docs.src.available}">
        <log:info>
          Transforming user supplied documentation.
        </log:info>
        <doc:performJSL srcdir="${maven.docs.src}" destdir="${maven.docs.dest}"/>
      </j:if>
  
    </goal>
    
    
    <!-- 
     ! This is required as the linkchecker runs as a final pass over the generated
     ! document tree.
     ! FIXME: Why isn't this in linkcheck?
     !-->
    <goal name="xdoc:performJSL"
        description="Allows the LinkCheck plugin to xdoc a single directory">
  
      <maven:pluginVar var="maven.xdoc.src" plugin="maven-linkcheck-plugin" property="maven.xdoc.src" />
      <doc:performJSL 
        srcdir="${maven.xdoc.src}" 
        destdir="${maven.docs.dest}"/>
    </goal>
    
    <goal name="xdoc:dump-report-settings">
      <echo>Dumping report settings</echo>
      <maven:pluginVar var="reports" plugin="maven-xdoc-plugin" property="reports" />
         
      <j:forEach var="report" items="${reports}">
        <echo>Report: ${report}</echo>  
      </j:forEach>
    </goal>
  
  </project>
  
  
  
  1.45      +33 -0     maven-plugins/plugin/project.xml
  
  Index: project.xml
  ===================================================================
  RCS file: /home/cvs/maven-plugins/plugin/project.xml,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- project.xml	15 Jul 2004 00:17:52 -0000	1.44
  +++ project.xml	18 Jul 2004 14:20:03 -0000	1.45
  @@ -92,6 +92,12 @@
     </developers>
     <dependencies>
       <dependency>
  +      <groupId>commons-lang</groupId>
  +      <artifactId>commons-lang</artifactId>
  +      <version>2.0</version>
  +      <url>http://jakarta.apache.org/commons/lang/</url>
  +    </dependency>
  +    <dependency>
         <groupId>commons-jelly</groupId>
         <artifactId>commons-jelly-tags-xml</artifactId>
         <version>20040613.030723</version>
  @@ -102,5 +108,32 @@
         <artifactId>commons-jelly-tags-interaction</artifactId>
         <version>20030211.143817</version>
       </dependency>
  +    <dependency>
  +      <groupId>jdom</groupId>
  +      <artifactId>jdom</artifactId>
  +      <version>b10</version>
  +    </dependency>
  +    <dependency>
  +      <groupId>saxpath</groupId>
  +      <artifactId>saxpath</artifactId>
  +      <version>1.0-FCS</version>
  +    </dependency>
  +    <dependency>
  +      <groupId>jaxen</groupId>
  +      <artifactId>jaxen</artifactId>
  +      <version>1.0-FCS-full</version>
  +    </dependency>
  +    <dependency>
  +      <groupId>xml-apis</groupId>
  +      <artifactId>xml-apis</artifactId>
  +      <version>1.0.b2</version>
  +      <url>http://xml.apache.org/xerces2-j/</url>
  +    </dependency>
  +    <dependency>
  +      <id>xerces</id>
  +      <version>2.4.0</version>
  +      <url>http://xml.apache.org/xerces2-j/</url>
  +    </dependency>
     </dependencies>
   </project>
  +
  
  
  
  1.43      +38 -0     maven-plugins/plugin/plugin.jelly
  
  Index: plugin.jelly
  ===================================================================
  RCS file: /home/cvs/maven-plugins/plugin/plugin.jelly,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- plugin.jelly	11 Jul 2004 00:57:59 -0000	1.42
  +++ plugin.jelly	18 Jul 2004 14:20:03 -0000	1.43
  @@ -93,6 +93,7 @@
       <attainGoal name="plugin:generate-navigation" />
       <attainGoal name="plugin:generate-goals" />
       <attainGoal name="plugin:generate-properties" />
  +    <attainGoal name="plugin:generate-tags" />
     </goal>
   
     <!-- generate a skeletal navigation.xml for the plugin specified
  @@ -198,6 +199,43 @@
       </j:if>
     </goal>
     
  +  <!-- generate a skeletal tags.xml for the plugin specified -->
  +  <goal name="plugin:generate-tags"
  +    description="Generate tags.xml for the plugin">
  +
  +    <j:set var="skip" value="false" />
  +    <j:set var="fileName">${maven.docs.src}/tags.xml</j:set>
  +    <u:available file="${fileName}">
  +      <echo>Skipping file as '${fileName}' already exists</echo>
  +      <j:set var="skip" value="true" />
  +    </u:available>
  +
  +    <j:if test="${!skip}">
  +      <j:set var="pluginScript" value="false" />
  +      <u:available file="${basedir}/plugin.jelly">
  +        <j:set var="pluginScript" value="true" />
  +      </u:available>
  +
  +      <mkdir dir="${maven.docs.src}" />
  +
  +      <j:if test="${!pluginScript}">
  +        <!-- no plugin.jelly - generate a file for empty goals -->
  +        <echo>No plugin.jelly, not generating tags.xml</echo>
  +      </j:if>
  +
  +      <j:if test="${pluginScript}">
  +        <echo>Generating file '${fileName}'</echo>
  +        <!-- generate docs based on plugin.jelly -->
  +        <j:useBean class="org.apache.maven.plugin.PluginToTags" 
  +          pluginScript="${basedir}/plugin.jelly"
  +          xdoc="${fileName}"
  +          var="xformer"/>
  +        ${xformer.transform()}
  +      </j:if>
  +
  +    </j:if>
  +  </goal>
  +
     <goal name="plugin:download" description="download and install a plugin from a remote repo" prereqs="plugin:download-artifact">
       <plugin:uninstall name="${artifactId}" />
       <u:file var="localPlugin" name="${maven.plugin.dir}/${artifactId}-${version}.jar" />
  
  
  
  1.1                  maven-plugins/plugin/src/test/org/apache/maven/plugin/PluginToTagsTest.java
  
  Index: PluginToTagsTest.java
  ===================================================================
  package org.apache.maven.plugin;
  
  /*
   * ====================================================================
   * Copyright 2001-2004 The Apache Software Foundation.
   * 
   * Licensed 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.
   * ====================================================================
   */
  
  import junit.framework.TestCase;
  import org.jdom.JDOMException;
  
  import java.io.File;
  import java.io.IOException;
  import java.util.Map;
  
  /**
   * @author Dion Gillard
   */
  public class PluginToTagsTest extends TestCase
  {
      private static final String basedir = System.getProperty("basedir");
  
      /**
       * test the right taglibs are found 
       * @throws JDOMException
       * @throws IOException
       */
      public void testTaglibs() throws JDOMException, IOException
      {
          PluginToTags instance = new PluginToTags();
          testBasedir();
          instance.setPluginScript(basedir + "/src/test/plugin.jelly");
          assertEquals("wrong number of taglibs", 1, instance.getTaglibs().size());
          Map taglib = (Map)instance.getTaglibs().get(0);
          assertEquals("bad taglib uri", "doc", taglib.get("uri"));
      }
  
      /**
       * test that basedir is passed in
       */
      public void testBasedir()
      {
          assertNotNull("no basedir", basedir);
      }
  
      /**
       * test the taglibs are written as a file
       * @throws JDOMException
       * @throws IOException
       */
      public void testTransform() throws JDOMException, IOException
      {
          PluginToTags instance = new PluginToTags();
          testBasedir();
          instance.setPluginScript(basedir + "/src/test/plugin.jelly");
          instance.setXdoc(basedir + "/target/tags.xml");
          instance.transform();
          File outputFile = new File(instance.getXdoc());
          assertTrue("xdoc not generated", outputFile.exists());
      }
  
  
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org