You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by Vincent Siveton <vi...@gmail.com> on 2008/06/08 13:32:36 UTC

Re: svn commit: r664376 - /maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java

Hi Dennis,

2008/6/7, dennisl@apache.org <de...@apache.org>:
> Author: dennisl
>  Date: Sat Jun  7 12:13:57 2008
>  New Revision: 664376
>
>  URL: http://svn.apache.org/viewvc?rev=664376&view=rev
>  Log:
>  [MSITE-316] Broken links to submodules when staging site.
>
>  Modified:
>     maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java
>
>  Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java
>  URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java?rev=664376&r1=664375&r2=664376&view=diff
>  ==============================================================================
>  --- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java (original)
>  +++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java Sat Jun  7 12:13:57 2008
>  @@ -29,6 +29,7 @@
>
>   import java.io.File;
>   import java.util.Iterator;
>  +import java.util.List;
>
>   /**
>   * Staging a site in specific directory.
>  @@ -42,11 +43,14 @@
>   public class SiteStageMojo
>      extends SiteMojo
>   {
>  +    private static final String DEFAULT_STAGING_DIRECTORY = "staging";
>  +
>      /**
>  -     * Staging directory location.
>  +     * Staging directory location. This needs to be an absolute path, like
>  +     * <code>C:\stagingArea\myProject\</code> on Windows or
>  +     * <code>/stagingArea/myProject/</code> on Unix.
>       *
>  -     * @parameter expression="${stagingDirectory}" default-value="${project.build.directory}/staging"
>  -     * @required
>  +     * @parameter expression="${stagingDirectory}"
>       */
>      protected File stagingDirectory;
>
>  @@ -63,7 +67,10 @@
>              throw new MojoExecutionException( "Missing site information." );
>          }
>
>  -        outputDirectory = new File( stagingDirectory, structureProject );
>  +        File calculatedStagingDirectory = getStagingDirectory( project, reactorProjects, stagingDirectory );
>  +        getLog().info( "Using this directory for staging: " + calculatedStagingDirectory );
>  +
>  +        outputDirectory = new File( calculatedStagingDirectory, structureProject );
>
>          // Safety
>          if ( !outputDirectory.exists() )
>  @@ -71,7 +78,7 @@
>              outputDirectory.mkdirs();
>          }
>
>  -        String outputRelativePath = PathTool.getRelativePath( stagingDirectory.getAbsolutePath(), new File(
>  +        String outputRelativePath = PathTool.getRelativePath( calculatedStagingDirectory.getAbsolutePath(), new File(
>              outputDirectory, "dummy.html" ).getAbsolutePath() );
>          project.setUrl( outputRelativePath + "/" + structureProject );
>
>  @@ -106,6 +113,69 @@
>      }
>
>      /**
>  +     * Find the directory where staging will take place.
>  +     *
>  +     * @param currentProject        The currently executing project
>  +     * @param reactorProjects       The projects in the reactor
>  +     * @param usersStagingDirectory The staging directory as suggested by the user's configuration
>  +     * @return the directory for staging
>  +     * @throws MojoFailureException if any
>  +     */

reactorProjects is hiding a field so no need to be a parameter of this method.
MojoFailureException is unused

>  +    protected File getStagingDirectory( MavenProject currentProject, List reactorProjects, File usersStagingDirectory )
>  +        throws MojoFailureException
>  +    {
>  +        // Check if the user has specified a stagingDirectory
>  +        if ( usersStagingDirectory != null )
>  +        {
>  +            getLog().debug( "stagingDirectory specified by the user." );
>  +            return usersStagingDirectory;
>  +        }
>  +        getLog().debug( "stagingDirectory NOT specified by the user." );
>  +
>  +        // Find the top level project in the reactor
>  +        MavenProject topLevelProject = getTopLevelProject( reactorProjects );
>  +
>  +        // Use the top level project's build directory if there is one, otherwise use this project's build directory
>  +        File buildDirectory;
>  +        if ( topLevelProject == null )
>  +        {
>  +            getLog().debug( "No top level project found in the reactor, using the current project." );
>  +            buildDirectory = new File( currentProject.getBuild().getDirectory() );
>  +        }
>  +        else
>  +        {
>  +            getLog().debug( "Using the top level project found in the reactor." );
>  +            buildDirectory = new File( topLevelProject.getBuild().getDirectory() );
>  +        }
>  +
>  +        return new File( buildDirectory, DEFAULT_STAGING_DIRECTORY );
>  +    }
>  +
>  +    /**
>  +     * Find the top level parent in the reactor, i.e. the execution root.
>  +     *
>  +     * @param reactorProjects The projects in the reactor
>  +     * @return The top level project in the reactor, or <code>null</code> if none can be found
>  +     */

Same about reactorProjects.

Cheers,

Vincent

>  +    private MavenProject getTopLevelProject( List reactorProjects )
>  +    {
>  +        MavenProject topLevelProject = null;
>  +        if ( reactorProjects != null )
>  +        {
>  +            Iterator iterator = reactorProjects.iterator();
>  +            while ( iterator.hasNext() )
>  +            {
>  +                MavenProject reactorProject = (MavenProject) iterator.next();
>  +                if ( reactorProject.isExecutionRoot() )
>  +                {
>  +                    topLevelProject = reactorProject;
>  +                }
>  +            }
>  +        }
>  +        return topLevelProject;
>  +    }
>  +
>  +    /**
>       * Generates the site structure using the project hiearchy (project and its modules) or using the
>       * distributionManagement elements from the pom.xml.
>       *
>
>
>

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


Re: svn commit: r664376 - /maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java

Posted by Dennis Lundberg <de...@apache.org>.
Vincent Siveton wrote:
> Hi Dennis,
> 
> 2008/6/7, dennisl@apache.org <de...@apache.org>:
>> Author: dennisl
>>  Date: Sat Jun  7 12:13:57 2008
>>  New Revision: 664376
>>
>>  URL: http://svn.apache.org/viewvc?rev=664376&view=rev
>>  Log:
>>  [MSITE-316] Broken links to submodules when staging site.
>>
>>  Modified:
>>     maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java
>>
>>  Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java
>>  URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java?rev=664376&r1=664375&r2=664376&view=diff
>>  ==============================================================================
>>  --- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java (original)
>>  +++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteStageMojo.java Sat Jun  7 12:13:57 2008
>>  @@ -29,6 +29,7 @@
>>
>>   import java.io.File;
>>   import java.util.Iterator;
>>  +import java.util.List;
>>
>>   /**
>>   * Staging a site in specific directory.
>>  @@ -42,11 +43,14 @@
>>   public class SiteStageMojo
>>      extends SiteMojo
>>   {
>>  +    private static final String DEFAULT_STAGING_DIRECTORY = "staging";
>>  +
>>      /**
>>  -     * Staging directory location.
>>  +     * Staging directory location. This needs to be an absolute path, like
>>  +     * <code>C:\stagingArea\myProject\</code> on Windows or
>>  +     * <code>/stagingArea/myProject/</code> on Unix.
>>       *
>>  -     * @parameter expression="${stagingDirectory}" default-value="${project.build.directory}/staging"
>>  -     * @required
>>  +     * @parameter expression="${stagingDirectory}"
>>       */
>>      protected File stagingDirectory;
>>
>>  @@ -63,7 +67,10 @@
>>              throw new MojoExecutionException( "Missing site information." );
>>          }
>>
>>  -        outputDirectory = new File( stagingDirectory, structureProject );
>>  +        File calculatedStagingDirectory = getStagingDirectory( project, reactorProjects, stagingDirectory );
>>  +        getLog().info( "Using this directory for staging: " + calculatedStagingDirectory );
>>  +
>>  +        outputDirectory = new File( calculatedStagingDirectory, structureProject );
>>
>>          // Safety
>>          if ( !outputDirectory.exists() )
>>  @@ -71,7 +78,7 @@
>>              outputDirectory.mkdirs();
>>          }
>>
>>  -        String outputRelativePath = PathTool.getRelativePath( stagingDirectory.getAbsolutePath(), new File(
>>  +        String outputRelativePath = PathTool.getRelativePath( calculatedStagingDirectory.getAbsolutePath(), new File(
>>              outputDirectory, "dummy.html" ).getAbsolutePath() );
>>          project.setUrl( outputRelativePath + "/" + structureProject );
>>
>>  @@ -106,6 +113,69 @@
>>      }
>>
>>      /**
>>  +     * Find the directory where staging will take place.
>>  +     *
>>  +     * @param currentProject        The currently executing project
>>  +     * @param reactorProjects       The projects in the reactor
>>  +     * @param usersStagingDirectory The staging directory as suggested by the user's configuration
>>  +     * @return the directory for staging
>>  +     * @throws MojoFailureException if any
>>  +     */
> 
> reactorProjects is hiding a field so no need to be a parameter of this method.

That was intentional on my part. I find it easier to understand what the 
method does when you declaring all parameters, even though they are 
available as variables of the class or one of its ancestors.

If you don't like I could change it...

> MojoFailureException is unused

Thanks, I'll fix that.

> 
>>  +    protected File getStagingDirectory( MavenProject currentProject, List reactorProjects, File usersStagingDirectory )
>>  +        throws MojoFailureException
>>  +    {
>>  +        // Check if the user has specified a stagingDirectory
>>  +        if ( usersStagingDirectory != null )
>>  +        {
>>  +            getLog().debug( "stagingDirectory specified by the user." );
>>  +            return usersStagingDirectory;
>>  +        }
>>  +        getLog().debug( "stagingDirectory NOT specified by the user." );
>>  +
>>  +        // Find the top level project in the reactor
>>  +        MavenProject topLevelProject = getTopLevelProject( reactorProjects );
>>  +
>>  +        // Use the top level project's build directory if there is one, otherwise use this project's build directory
>>  +        File buildDirectory;
>>  +        if ( topLevelProject == null )
>>  +        {
>>  +            getLog().debug( "No top level project found in the reactor, using the current project." );
>>  +            buildDirectory = new File( currentProject.getBuild().getDirectory() );
>>  +        }
>>  +        else
>>  +        {
>>  +            getLog().debug( "Using the top level project found in the reactor." );
>>  +            buildDirectory = new File( topLevelProject.getBuild().getDirectory() );
>>  +        }
>>  +
>>  +        return new File( buildDirectory, DEFAULT_STAGING_DIRECTORY );
>>  +    }
>>  +
>>  +    /**
>>  +     * Find the top level parent in the reactor, i.e. the execution root.
>>  +     *
>>  +     * @param reactorProjects The projects in the reactor
>>  +     * @return The top level project in the reactor, or <code>null</code> if none can be found
>>  +     */
> 
> Same about reactorProjects.
> 
> Cheers,
> 
> Vincent
> 
>>  +    private MavenProject getTopLevelProject( List reactorProjects )
>>  +    {
>>  +        MavenProject topLevelProject = null;
>>  +        if ( reactorProjects != null )
>>  +        {
>>  +            Iterator iterator = reactorProjects.iterator();
>>  +            while ( iterator.hasNext() )
>>  +            {
>>  +                MavenProject reactorProject = (MavenProject) iterator.next();
>>  +                if ( reactorProject.isExecutionRoot() )
>>  +                {
>>  +                    topLevelProject = reactorProject;
>>  +                }
>>  +            }
>>  +        }
>>  +        return topLevelProject;
>>  +    }
>>  +
>>  +    /**
>>       * Generates the site structure using the project hiearchy (project and its modules) or using the
>>       * distributionManagement elements from the pom.xml.
>>       *
>>
>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
> For additional commands, e-mail: dev-help@maven.apache.org
> 
> 


-- 
Dennis Lundberg

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