1 package org.apache.maven.plugins.site;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import java.io.File;
23
24 import org.apache.maven.plugin.MojoExecutionException;
25
26 /**
27 * Deploys the generated site to a local staging or mock directory based on the site URL
28 * specified in the <code><distributionManagement></code> section of the
29 * POM.
30 * <p>
31 * It can be used to test that links between module sites in a multi-module
32 * build works.
33 * </p>
34 *
35 * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
36 * @version $Id: SiteStageMojo.html 816561 2012-05-08 12:02:24Z hboutemy $
37 * @goal stage
38 * @requiresDependencyResolution test
39 */
40 public class SiteStageMojo
41 extends AbstractDeployMojo
42 {
43 /**
44 * Staging directory location. This needs to be an absolute path, like
45 * <code>C:\stagingArea\myProject\</code> on Windows or
46 * <code>/stagingArea/myProject/</code> on Unix.
47 * If this is not specified, the site will be staged in ${project.build.directory}/staging.
48 *
49 * @parameter expression="${stagingDirectory}"
50 */
51 private File stagingDirectory;
52
53 @Override
54 protected String getDeployRepositoryID()
55 throws MojoExecutionException
56 {
57 return "stagingLocal";
58 }
59
60 @Override
61 protected String getDeployRepositoryURL()
62 throws MojoExecutionException
63 {
64 final String stageDir = ( stagingDirectory == null ) ? null : stagingDirectory.getAbsolutePath();
65 final String outputDir = getStagingDirectory( stageDir );
66
67 getLog().info( "Using this base directory for staging: " + outputDir );
68
69 final File outputDirectory = new File( outputDir );
70 // Safety
71 if ( !outputDirectory.exists() )
72 {
73 outputDirectory.mkdirs();
74 }
75
76 return "file://" + outputDirectory.getAbsolutePath();
77 }
78
79 /**
80 * Find the directory where staging will take place.
81 *
82 * @param usersStagingDirectory The staging directory as suggested by the user's configuration
83 *
84 * @return the directory for staging
85 */
86 private String getStagingDirectory( String usersStagingDirectory )
87 {
88 String topLevelURL = null;
89
90 if ( usersStagingDirectory != null )
91 {
92 // the user has specified a stagingDirectory - use it
93 getLog().debug( "stagingDirectory specified by the user: " + usersStagingDirectory );
94 topLevelURL = usersStagingDirectory;
95 }
96 else
97 {
98 // The user didn't specify a URL, use the top level target dir
99 topLevelURL =
100 getTopLevelBuildDirectory().getAbsolutePath() + "/" + DEFAULT_STAGING_DIRECTORY;
101 getLog().debug( "stagingDirectory NOT specified, using the top level project: " + topLevelURL );
102 }
103
104 // Return either
105 // usersURL
106 // or
107 // topLevelProjectURL + "staging"
108 return topLevelURL;
109 }
110 }