Coverage Report - org.apache.maven.archetype.mojos.MavenArchetypeMojo
 
Classes in this File Line Coverage Branch Coverage Complexity
MavenArchetypeMojo
0 %
0/31
0 %
0/10
7,5
 
 1  
 package org.apache.maven.archetype.mojos;
 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.archetype.ArchetypeGenerationRequest;
 23  
 import org.apache.maven.archetype.exception.UnknownArchetype;
 24  
 import org.apache.maven.archetype.old.OldArchetype;
 25  
 import org.apache.maven.archetype.old.ArchetypeDescriptorException;
 26  
 import org.apache.maven.archetype.old.ArchetypeNotFoundException;
 27  
 import org.apache.maven.archetype.old.ArchetypeTemplateProcessingException;
 28  
 import org.apache.maven.artifact.repository.ArtifactRepository;
 29  
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
 30  
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 31  
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 32  
 import org.apache.maven.plugin.AbstractMojo;
 33  
 import org.apache.maven.plugin.MojoExecutionException;
 34  
 import org.apache.maven.project.MavenProject;
 35  
 import org.codehaus.plexus.util.StringUtils;
 36  
 
 37  
 import java.util.ArrayList;
 38  
 import java.util.List;
 39  
 
 40  
 /**
 41  
  * The archetype creation goal looks for an archetype with a given groupId,
 42  
  * artifactId, and version and retrieves it from the remote repository. Once the
 43  
  * archetype is retrieved, it is then processed against a set of user parameters
 44  
  * to create a working Maven project.
 45  
  *
 46  
  * @description Creates a project from an archetype.
 47  
  * @requiresProject false
 48  
  * @goal create
 49  
  * @deprecated Please use the generate mojo instead.
 50  
  */
 51  0
 public class MavenArchetypeMojo
 52  
     extends AbstractMojo
 53  
 {
 54  
     /**
 55  
      * Used to create the Archetype specified by the groupId, artifactId, and
 56  
      * version from the remote repository.
 57  
      *
 58  
      * @component
 59  
      */
 60  
     private OldArchetype archetype;
 61  
 
 62  
     /**
 63  
      * Used to create ArtifactRepository objects given the urls of the remote
 64  
      * repositories.
 65  
      *
 66  
      * @component
 67  
      */
 68  
     private ArtifactRepositoryFactory artifactRepositoryFactory;
 69  
 
 70  
     /**
 71  
      * Determines whether the layout is legacy or not.
 72  
      *
 73  
      * @component role="org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout" roleHint="default"
 74  
      */
 75  
     private ArtifactRepositoryLayout defaultArtifactRepositoryLayout;
 76  
 
 77  
 
 78  
     /**
 79  
      * Maven's local repository.
 80  
      *
 81  
      * @parameter expression="${localRepository}"
 82  
      * @required
 83  
      */
 84  
     private ArtifactRepository localRepository;
 85  
 
 86  
     /**
 87  
      * The Archetype Group Id to be used.
 88  
      *
 89  
      * @parameter expression="${archetypeGroupId}" default-value="org.apache.maven.archetypes"
 90  
      * @required
 91  
      */
 92  
     private String archetypeGroupId;
 93  
 
 94  
     /**
 95  
      * The Archetype Artifact Id to be used.
 96  
      *
 97  
      * @parameter expression="${archetypeArtifactId}" default-value="maven-archetype-quickstart"
 98  
      * @required
 99  
      */
 100  
     private String archetypeArtifactId;
 101  
 
 102  
     /**
 103  
      * The Archetype Version to be used.
 104  
      *
 105  
      * @parameter expression="${archetypeVersion}" default-value="RELEASE"
 106  
      * @required
 107  
      */
 108  
     private String archetypeVersion;
 109  
 
 110  
     /**
 111  
      * The Group Id of the project to be build.
 112  
      *
 113  
      * @parameter expression="${groupId}"
 114  
      */
 115  
     private String groupId;
 116  
 
 117  
     /**
 118  
      * The Artifact Id of the project to be build.
 119  
      *
 120  
      * @parameter expression="${artifactId}"
 121  
      */
 122  
     private String artifactId;
 123  
 
 124  
     /**
 125  
      * The Version of the project to be build.
 126  
      *
 127  
      * @parameter expression="${version}" default-value="1.0-SNAPSHOT"
 128  
      * @required
 129  
      */
 130  
     private String version;
 131  
 
 132  
     /**
 133  
      * The Package Name of the project to be build.
 134  
      *
 135  
      * @parameter expression="${packageName}" alias="package"
 136  
      */
 137  
     private String packageName;
 138  
 
 139  
     /**
 140  
      * The remote repositories available for discovering dependencies and extensions as indicated
 141  
      * by the POM.
 142  
      *
 143  
      * @parameter expression="${project.remoteArtifactRepositories}"
 144  
      * @required
 145  
      */
 146  
     private List<ArtifactRepository> pomRemoteRepositories;
 147  
 
 148  
     /**
 149  
      * Other remote repositories available for discovering dependencies and extensions.
 150  
      *
 151  
      * @parameter expression="${remoteRepositories}"
 152  
      */
 153  
     private String remoteRepositories;
 154  
 
 155  
     /**
 156  
      * The project to be created an archetype of.
 157  
      *
 158  
      * @parameter expression="${project}"
 159  
      */
 160  
     private MavenProject project;
 161  
 
 162  
     /**
 163  
      * @parameter expression="${basedir}" default-value="${user.dir}"
 164  
      */
 165  
     private String basedir;
 166  
 
 167  
     public void execute()
 168  
         throws MojoExecutionException
 169  
     {
 170  0
         getLog().warn( "This goal is deprecated. Please use mvn archetype:generate instead" );
 171  
         // TODO: prompt for missing values
 172  
         // TODO: configurable license
 173  
 
 174  
         // ----------------------------------------------------------------------
 175  
         // archetypeGroupId
 176  
         // archetypeArtifactId
 177  
         // archetypeVersion
 178  
         //
 179  
         // localRepository
 180  
         // remoteRepository
 181  
         // parameters
 182  
         // ----------------------------------------------------------------------
 183  
 
 184  0
         if ( project.getFile() != null && groupId == null )
 185  
         {
 186  0
             groupId = project.getGroupId();
 187  
         }
 188  
 
 189  0
         if ( packageName == null )
 190  
         {
 191  0
             getLog().info( "Defaulting package to group ID: " + groupId );
 192  
 
 193  0
             packageName = groupId;
 194  
         }
 195  
 
 196  
 
 197  0
         List<ArtifactRepository> archetypeRemoteRepositories = new ArrayList<ArtifactRepository>( pomRemoteRepositories );
 198  
 
 199  0
         if ( remoteRepositories != null )
 200  
         {
 201  0
             getLog().info( "We are using command line specified remote repositories: " + remoteRepositories );
 202  
 
 203  0
             archetypeRemoteRepositories = new ArrayList<ArtifactRepository>();
 204  
 
 205  0
             String[] s = StringUtils.split( remoteRepositories, "," );
 206  
 
 207  0
             for ( int i = 0; i < s.length; i++ )
 208  
             {
 209  0
                 archetypeRemoteRepositories.add( createRepository( s[i], "id" + i ) );
 210  
             }
 211  
         }
 212  
 
 213  
         try
 214  
         {
 215  0
             ArchetypeGenerationRequest request = new ArchetypeGenerationRequest()
 216  
                 .setPackage( packageName )
 217  
                 .setGroupId( groupId )
 218  
                 .setArtifactId( artifactId )
 219  
                 .setVersion( version )
 220  
                 .setArchetypeGroupId( archetypeGroupId )
 221  
                 .setArchetypeArtifactId( archetypeArtifactId )
 222  
                 .setArchetypeVersion( archetypeVersion )
 223  
                 .setLocalRepository( localRepository )
 224  
                 .setRemoteArtifactRepositories( archetypeRemoteRepositories )
 225  
                 .setOutputDirectory( basedir );
 226  
 
 227  0
             archetype.createArchetype( request, createRepository( "http://repo1.maven.org/maven2", "central" ) );
 228  
         }
 229  0
         catch ( UnknownArchetype e )
 230  
         {
 231  0
             throw new MojoExecutionException( "Error creating from archetype", e );
 232  
         }
 233  0
         catch ( ArchetypeNotFoundException e )
 234  
         {
 235  0
             throw new MojoExecutionException( "Error creating from archetype", e );
 236  
         }
 237  0
         catch ( ArchetypeDescriptorException e )
 238  
         {
 239  0
             throw new MojoExecutionException( "Error creating from archetype", e );
 240  
         }
 241  0
         catch ( ArchetypeTemplateProcessingException e )
 242  
         {
 243  0
             throw new MojoExecutionException( "Error creating from archetype", e );
 244  0
         }
 245  0
     }
 246  
 
 247  
     //TODO: this should be put in John's artifact utils and used from there instead of being repeated here. Creating
 248  
     // artifact repositories is somewhat cumbersome atm.
 249  
     private ArtifactRepository createRepository( String url, String repositoryId )
 250  
     {
 251  
         // snapshots vs releases
 252  
         // offline = to turning the update policy off
 253  
 
 254  
         //TODO: we'll need to allow finer grained creation of repositories but this will do for now
 255  
 
 256  0
         String updatePolicyFlag = ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS;
 257  
 
 258  0
         String checksumPolicyFlag = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
 259  
 
 260  0
         ArtifactRepositoryPolicy snapshotsPolicy =
 261  
             new ArtifactRepositoryPolicy( true, updatePolicyFlag, checksumPolicyFlag );
 262  
 
 263  0
         ArtifactRepositoryPolicy releasesPolicy =
 264  
             new ArtifactRepositoryPolicy( true, updatePolicyFlag, checksumPolicyFlag );
 265  
 
 266  0
         return artifactRepositoryFactory.createArtifactRepository( repositoryId, url, defaultArtifactRepositoryLayout,
 267  
                                                                    snapshotsPolicy, releasesPolicy );
 268  
     }
 269  
 }
 270