Coverage Report - org.apache.maven.plugins.release.AbstractReleaseMojo
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractReleaseMojo
76%
37/49
60%
12/20
2
 
 1  
 package org.apache.maven.plugins.release;
 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 org.apache.maven.model.Profile;
 23  
 import org.apache.maven.plugin.AbstractMojo;
 24  
 import org.apache.maven.plugin.MojoExecutionException;
 25  
 import org.apache.maven.plugin.MojoFailureException;
 26  
 import org.apache.maven.project.MavenProject;
 27  
 import org.apache.maven.scm.manager.ScmManager;
 28  
 import org.apache.maven.settings.Settings;
 29  
 import org.apache.maven.shared.release.ReleaseManager;
 30  
 import org.apache.maven.shared.release.config.ReleaseDescriptor;
 31  
 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
 32  
 import org.apache.maven.shared.release.env.ReleaseEnvironment;
 33  
 import org.codehaus.plexus.util.StringUtils;
 34  
 
 35  
 import java.io.File;
 36  
 import java.util.Iterator;
 37  
 import java.util.List;
 38  
 import java.util.Map;
 39  
 
 40  
 /**
 41  
  * Base class with shared configuration.
 42  
  * 
 43  
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
 44  
  * @version $Id$
 45  
  */
 46  13
 public abstract class AbstractReleaseMojo
 47  
     extends AbstractMojo
 48  
 {
 49  
     /**
 50  
      * The SCM username to use.
 51  
      * 
 52  
      * @parameter expression="${username}"
 53  
      */
 54  
     private String username;
 55  
 
 56  
     /**
 57  
      * The SCM password to use.
 58  
      * 
 59  
      * @parameter expression="${password}"
 60  
      */
 61  
     private String password;
 62  
 
 63  
     /**
 64  
      * The SCM tag to use.
 65  
      * 
 66  
      * @parameter expression="${tag}" alias="releaseLabel"
 67  
      */
 68  
     private String tag;
 69  
 
 70  
     /**
 71  
      * The tag base directory in SVN, you must define it if you don't use the standard svn layout (trunk/tags/branches).
 72  
      * For example, <code>http://svn.apache.org/repos/asf/maven/plugins/tags</code>. The URL is an SVN URL and does not
 73  
      * include the SCM provider and protocol.
 74  
      * 
 75  
      * @parameter expression="${tagBase}"
 76  
      */
 77  
     private String tagBase;
 78  
 
 79  
     /**
 80  
      * @parameter expression="${basedir}"
 81  
      * @required
 82  
      * @readonly
 83  
      */
 84  
     protected File basedir;
 85  
 
 86  
     /**
 87  
      * @parameter expression="${settings}"
 88  
      * @required
 89  
      * @readonly
 90  
      */
 91  
     protected Settings settings;
 92  
 
 93  
     /**
 94  
      * @parameter expression="${project}"
 95  
      * @required
 96  
      * @readonly
 97  
      */
 98  
     protected MavenProject project;
 99  
 
 100  
     /**
 101  
      * @component
 102  
      */
 103  
     protected ReleaseManager releaseManager;
 104  
 
 105  
     /**
 106  
      * Additional arguments to pass to the Maven executions, separated by spaces.
 107  
      * 
 108  
      * @parameter expression="${arguments}" alias="prepareVerifyArgs"
 109  
      */
 110  
     private String arguments;
 111  
 
 112  
     /**
 113  
      * The file name of the POM to execute any goals against.
 114  
      * 
 115  
      * @parameter expression="${pomFileName}"
 116  
      */
 117  
     private String pomFileName;
 118  
 
 119  
     /**
 120  
      * The message prefix to use for all SCM changes.
 121  
      * 
 122  
      * @parameter expression="${scmCommentPrefix}" default-value="[maven-release-plugin] "
 123  
      */
 124  
     private String scmCommentPrefix;
 125  
 
 126  
     /**
 127  
      * @parameter expression="${reactorProjects}"
 128  
      * @required
 129  
      * @readonly
 130  
      */
 131  
     protected List reactorProjects;
 132  
 
 133  
     /**
 134  
      * List of provider implementations.
 135  
      * 
 136  
      * @parameter
 137  
      */
 138  
     private Map providerImplementations;
 139  
 
 140  
     /**
 141  
      * The M2_HOME parameter to use for forked Maven invocations.
 142  
      * 
 143  
      * @parameter default-value="${maven.home}"
 144  
      */
 145  
     protected File mavenHome;
 146  
 
 147  
     /**
 148  
      * The JAVA_HOME parameter to use for forked Maven invocations.
 149  
      * 
 150  
      * @parameter default-value="${java.home}"
 151  
      */
 152  
     protected File javaHome;
 153  
 
 154  
     /**
 155  
      * The command-line local repository directory in use for this build (if specified).
 156  
      * 
 157  
      * @parameter default-value="${maven.repo.local}"
 158  
      */
 159  
     protected File localRepoDirectory;
 160  
 
 161  
     /**
 162  
      * Role hint of the {@link org.apache.maven.shared.release.exec.MavenExecutor} implementation to use.
 163  
      * 
 164  
      * @parameter expression="${mavenExecutorId}" default-value="invoker"
 165  
      */
 166  
     protected String mavenExecutorId;
 167  
 
 168  
     /**
 169  
      * The SCM manager.
 170  
      * 
 171  
      * @component
 172  
      */
 173  
     private ScmManager scmManager;
 174  
 
 175  
     /**
 176  
      * Gets the enviroment settings configured for this release.
 177  
      * 
 178  
      * @return The release environment, never <code>null</code>.
 179  
      */
 180  
     protected ReleaseEnvironment getReleaseEnvironment()
 181  
     {
 182  12
         return new DefaultReleaseEnvironment().setSettings( settings )
 183  
                                               .setJavaHome( javaHome )
 184  
                                               .setMavenHome( mavenHome )
 185  
                                               .setLocalRepositoryDirectory( localRepoDirectory )
 186  
                                               .setMavenExecutorId( mavenExecutorId );
 187  
     }
 188  
 
 189  
     /**
 190  
      * {@inheritDoc}
 191  
      */
 192  
     public void execute()
 193  
         throws MojoExecutionException, MojoFailureException
 194  
     {
 195  13
         if ( providerImplementations != null )
 196  
         {
 197  0
             for ( Iterator i = providerImplementations.keySet().iterator(); i.hasNext(); )
 198  
             {
 199  0
                 String providerType = (String) i.next();
 200  0
                 String providerImplementation = (String) providerImplementations.get( providerType );
 201  0
                 getLog().info( "Change the default '" + providerType + "' provider implementation to '"
 202  
                     + providerImplementation + "'." );
 203  0
                 scmManager.setScmProviderImplementation( providerType, providerImplementation );
 204  0
             }
 205  
         }
 206  13
     }
 207  
 
 208  
     /**
 209  
      * Creates the release descriptor from the various goal parameters.
 210  
      * 
 211  
      * @return The release descriptor, never <code>null</code>.
 212  
      */
 213  
     protected ReleaseDescriptor createReleaseDescriptor()
 214  
     {
 215  12
         ReleaseDescriptor descriptor = new ReleaseDescriptor();
 216  
 
 217  12
         descriptor.setInteractive( settings.isInteractiveMode() );
 218  
 
 219  12
         descriptor.setScmPassword( password );
 220  12
         descriptor.setScmReleaseLabel( tag );
 221  12
         descriptor.setScmTagBase( tagBase );
 222  12
         descriptor.setScmUsername( username );
 223  12
         descriptor.setScmCommentPrefix( scmCommentPrefix );
 224  
 
 225  12
         descriptor.setWorkingDirectory( basedir.getAbsolutePath() );
 226  
 
 227  12
         descriptor.setPomFileName( pomFileName );
 228  
 
 229  12
         List profiles = project.getActiveProfiles();
 230  
 
 231  12
         String arguments = this.arguments;
 232  12
         if ( profiles != null && !profiles.isEmpty() )
 233  
         {
 234  2
             if ( !StringUtils.isEmpty( arguments ) )
 235  
             {
 236  1
                 arguments += " -P ";
 237  
             }
 238  
             else
 239  
             {
 240  1
                 arguments = "-P ";
 241  
             }
 242  
 
 243  2
             for ( Iterator it = profiles.iterator(); it.hasNext(); )
 244  
             {
 245  4
                 Profile profile = (Profile) it.next();
 246  
 
 247  4
                 arguments += profile.getId();
 248  4
                 if ( it.hasNext() )
 249  
                 {
 250  2
                     arguments += ",";
 251  
                 }
 252  4
             }
 253  
 
 254  2
             String additionalProfiles = getAdditionalProfiles();
 255  2
             if ( additionalProfiles != null )
 256  
             {
 257  0
                 if ( !profiles.isEmpty() )
 258  
                 {
 259  0
                     arguments += ",";
 260  
                 }
 261  0
                 arguments += additionalProfiles;
 262  
             }
 263  
         }
 264  12
         descriptor.setAdditionalArguments( arguments );
 265  
 
 266  12
         return descriptor;
 267  
     }
 268  
 
 269  
     /**
 270  
      * Gets the comma separated list of additional profiles for the release build.
 271  
      * 
 272  
      * @return additional profiles to enable during release
 273  
      */
 274  
     protected String getAdditionalProfiles()
 275  
     {
 276  0
         return null;
 277  
     }
 278  
 
 279  
     /**
 280  
      * Sets the component used to perform release actions.
 281  
      * 
 282  
      * @param releaseManager The release manager implementation to use, must not be <code>null</code>.
 283  
      */
 284  
     void setReleaseManager( ReleaseManager releaseManager )
 285  
     {
 286  13
         this.releaseManager = releaseManager;
 287  13
     }
 288  
 
 289  
     /**
 290  
      * Gets the effective settings for this build.
 291  
      * 
 292  
      * @return The effective settings for this build, never <code>null</code>.
 293  
      */
 294  
     Settings getSettings()
 295  
     {
 296  0
         return settings;
 297  
     }
 298  
 
 299  
     /**
 300  
      * Sets the base directory of the build.
 301  
      * 
 302  
      * @param basedir The build's base directory, must not be <code>null</code>.
 303  
      */
 304  
     public void setBasedir( File basedir )
 305  
     {
 306  13
         this.basedir = basedir;
 307  13
     }
 308  
 
 309  
     /**
 310  
      * Gets the list of projects in the build reactor.
 311  
      * 
 312  
      * @return The list of reactor project, never <code>null</code>.
 313  
      */
 314  
     public List getReactorProjects()
 315  
     {
 316  1
         return reactorProjects;
 317  
     }
 318  
 
 319  
     /**
 320  
      * Add additional arguments.
 321  
      * 
 322  
      * @param argument The argument to add, must not be <code>null</code>.
 323  
      */
 324  
     protected void addArgument( String argument )
 325  
     {
 326  1
         if ( arguments != null )
 327  
         {
 328  0
             arguments += " " + argument;
 329  
         }
 330  
         else
 331  
         {
 332  1
             arguments = argument;
 333  
         }
 334  1
     }
 335  
 }