Hi Dennis,
2008/6/7, [EMAIL PROTECTED] <[EMAIL PROTECTED]>:
> 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]