maven-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From raf...@apache.org
Subject svn commit: r627622 - /maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/MavenArchetypeMojo.java
Date Thu, 14 Feb 2008 00:24:59 GMT
Author: rafale
Date: Wed Feb 13 16:24:51 2008
New Revision: 627622

URL: http://svn.apache.org/viewvc?rev=627622&view=rev
Log:
Changing 'create' goal to 'generate'. Restoring old 'create' mojo to ensure backward comaptibility

Added:
    maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/MavenArchetypeMojo.java
  (with props)

Added: maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/MavenArchetypeMojo.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/MavenArchetypeMojo.java?rev=627622&view=auto
==============================================================================
--- maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/MavenArchetypeMojo.java
(added)
+++ maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/MavenArchetypeMojo.java
Wed Feb 13 16:24:51 2008
@@ -0,0 +1,270 @@
+package org.apache.maven.archetype.mojos;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.archetype.old.OldArchetype;
+import org.apache.maven.archetype.old.ArchetypeDescriptorException;
+import org.apache.maven.archetype.old.ArchetypeNotFoundException;
+import org.apache.maven.archetype.old.ArchetypeTemplateProcessingException;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * The archetype creation goal looks for an archetype with a given groupId, 
+ * artifactId, and version and retrieves it from the remote repository. Once the
+ * archetype is retrieved, it is then processed against a set of user parameters
+ * to create a working Maven project.
+ *
+ * @description Creates archetype containers.
+ * @requiresProject false
+ * @goal create
+ */
+public class MavenArchetypeMojo
+    extends AbstractMojo
+{
+    /**
+     * Used to create the Archetype specified by the groupId, artifactId, and 
+     * version from the remote repository.
+     * 
+     * @component
+     */
+    private OldArchetype archetype;
+
+    /**
+     * Used to create ArtifactRepository objects given the urls of the remote
+     * repositories.
+     * 
+     * @component
+     */
+    private ArtifactRepositoryFactory artifactRepositoryFactory;
+
+    /**
+     * Determines whether the layout is legacy or not.
+     * 
+     * @component role="org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout"
roleHint="default"
+     */
+    private ArtifactRepositoryLayout defaultArtifactRepositoryLayout;
+
+
+    /**
+     * Maven's local repository.
+     * 
+     * @parameter expression="${localRepository}"
+     * @required
+     */
+    private ArtifactRepository localRepository;
+
+    /**
+     * The Archetype Group Id to be used.
+     * 
+     * @parameter expression="${archetypeGroupId}" default-value="org.apache.maven.archetypes"
+     * @required
+     */
+    private String archetypeGroupId;
+
+    /**
+     * The Archetype Artifact Id to be used.
+     * 
+     * @parameter expression="${archetypeArtifactId}" default-value="maven-archetype-quickstart"
+     * @required
+     */
+    private String archetypeArtifactId;
+
+    /**
+     * The Archetype Version to be used.
+     * 
+     * @parameter expression="${archetypeVersion}" default-value="RELEASE"
+     * @required
+     */
+    private String archetypeVersion;
+
+    /**
+     * The Group Id of the project to be build.
+     * 
+     * @parameter expression="${groupId}"
+     */
+    private String groupId;
+
+    /**
+     * The Artifact Id of the project to be build.
+     * 
+     * @parameter expression="${artifactId}"
+     */
+    private String artifactId;
+
+    /**
+     * The Version of the project to be build.
+     * 
+     * @parameter expression="${version}" default-value="1.0-SNAPSHOT"
+     * @required
+     */
+    private String version;
+
+    /**
+     * The Package Name of the project to be build.
+     * 
+     * @parameter expression="${packageName}" alias="package"
+     */
+    private String packageName;
+
+    /**
+     * The remote repositories available for discovering dependencies and extensions as indicated
+     * by the POM.
+     * 
+     * @parameter expression="${project.remoteArtifactRepositories}"
+     * @required
+     */
+    private List pomRemoteRepositories;
+
+    /**
+     * Other remote repositories available for discovering dependencies and extensions.
+     * 
+     * @parameter expression="${remoteRepositories}"
+     */
+    private String remoteRepositories;
+
+    /**
+     * The project to be created an archetype of.
+     * 
+     * @parameter expression="${project}"
+     */
+    private MavenProject project;
+
+    /**
+     * @parameter expression="${basedir}" default-value="${user.dir}"
+     */
+    private String basedir;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        // TODO: prompt for missing values
+        // TODO: configurable license
+
+        // ----------------------------------------------------------------------
+        // archetypeGroupId
+        // archetypeArtifactId
+        // archetypeVersion
+        //
+        // localRepository
+        // remoteRepository
+        // parameters
+        // ----------------------------------------------------------------------
+
+        if ( project.getFile() != null && groupId == null )
+        {
+            groupId = project.getGroupId();
+        }
+
+        if ( packageName == null )
+        {
+            getLog().info( "Defaulting package to group ID: " + groupId );
+
+            packageName = groupId;
+        }
+
+        // TODO: context mojo more appropriate?
+        Map map = new HashMap();
+
+        map.put( "basedir", basedir );
+
+        map.put( "package", packageName );
+
+        map.put( "packageName", packageName );
+
+        map.put( "groupId", groupId );
+
+        map.put( "artifactId", artifactId );
+
+        map.put( "version", version );
+
+        List archetypeRemoteRepositories = new ArrayList( pomRemoteRepositories );
+
+        if ( remoteRepositories != null )
+        {
+            getLog().info( "We are using command line specified remote repositories: " +
remoteRepositories );
+
+            archetypeRemoteRepositories = new ArrayList();
+
+            String[] s = StringUtils.split( remoteRepositories, "," );
+
+            for ( int i = 0; i < s.length; i++ )
+            {
+                archetypeRemoteRepositories.add( createRepository( s[i], "id" + i ) );
+            }
+        }
+
+        try
+        {
+            archetype.createArchetype( 
+                    archetypeGroupId, 
+                    archetypeArtifactId, 
+                    archetypeVersion, 
+                    createRepository( "http://repo1.maven.org/maven2", "central" ),
+                    localRepository,
+                    archetypeRemoteRepositories, 
+                    map );
+        }
+        catch ( ArchetypeNotFoundException e )
+        {
+            throw new MojoExecutionException( "Error creating from archetype", e );
+        }
+        catch ( ArchetypeDescriptorException e )
+        {
+            throw new MojoExecutionException( "Error creating from archetype", e );
+        }
+        catch ( ArchetypeTemplateProcessingException e )
+        {
+            throw new MojoExecutionException( "Error creating from archetype", e );
+        }
+    }
+
+    //TODO: this should be put in John's artifact utils and used from there instead of being
repeated here. Creating
+    // artifact repositories is someowhat cumbersome atm.
+    public ArtifactRepository createRepository( String url, String repositoryId )
+    {
+        // snapshots vs releases
+        // offline = to turning the update policy off
+
+        //TODO: we'll need to allow finer grained creation of repositories but this will
do for now
+
+        String updatePolicyFlag = ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS;
+
+        String checksumPolicyFlag = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
+
+        ArtifactRepositoryPolicy snapshotsPolicy =
+            new ArtifactRepositoryPolicy( true, updatePolicyFlag, checksumPolicyFlag );
+
+        ArtifactRepositoryPolicy releasesPolicy =
+            new ArtifactRepositoryPolicy( true, updatePolicyFlag, checksumPolicyFlag );
+
+        return artifactRepositoryFactory.createArtifactRepository( repositoryId, url, defaultArtifactRepositoryLayout,
+                                                                   snapshotsPolicy, releasesPolicy
);
+    }
+}
+

Propchange: maven/archetype/trunk/archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/MavenArchetypeMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message