View Javadoc

1   /*
2    * Copyright (c) 2006 Your Corporation. All Rights Reserved.
3    */
4   package org.apache.maven.plugin.archetype;
5   
6   import org.apache.maven.plugin.AbstractMojo;
7   import org.apache.maven.plugin.MojoExecutionException;
8   import org.apache.maven.archetype.Archetype;
9   import org.apache.maven.archetype.ArchetypeNotFoundException;
10  import org.apache.maven.archetype.ArchetypeDescriptorException;
11  import org.apache.maven.archetype.ArchetypeTemplateProcessingException;
12  import org.apache.maven.archetype.ArchetypeCreator;
13  import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
14  import org.apache.maven.artifact.repository.ArtifactRepository;
15  import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
16  import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
17  import org.apache.maven.project.MavenProject;
18  import org.apache.maven.project.MavenProjectHelper;
19  import org.codehaus.plexus.util.StringUtils;
20  
21  import java.util.List;
22  import java.util.Map;
23  import java.util.HashMap;
24  import java.util.ArrayList;
25  import java.util.Properties;
26  import java.io.File;
27  import java.io.FileInputStream;
28  
29  /**
30   * Builds archetype containers based from an existing Maven project (currently
31   * under development).
32   *
33   * @goal create-from-project
34   * @description Create an archetype from an existing Maven project.
35   * @requiresProject true
36   */
37  public class CreateArchetypeFromProjectMojo
38      extends AbstractMojo
39  {
40      /**
41       * The Maven Project to be used as the basis for the creating of the archetype.
42       * 
43       * @parameter expression="${project}"
44       * @required
45       */
46      private MavenProject project;
47  
48      /**
49       * Maven's local repository.
50       * 
51       * @parameter expression="${localRepository}"
52       * @required
53       */
54      private ArtifactRepository localRepository;
55  
56      /**
57       * Output build directory.
58       *  
59       * @parameter expression="${targetDirectory}" default-value="${project.build.directory}"
60       * @required
61       */
62      private File targetDirectory;
63  
64      /**
65       * Maven ArchetypeCreator
66       * 
67       * @component
68       */
69      private ArchetypeCreator archetypeCreator;
70  
71      /**
72       * Maven ProjectHelper
73       *
74       * @component
75       */
76      private MavenProjectHelper projectHelper;
77  
78  
79      /**
80       * Contains Archetype Properties.
81       * 
82       * @parameter expression="${archetypeProperties}" default-value="${basedir}/src/main/archetype/archetype.properties"
83       * @required
84       */
85      private File archetypeProperties;
86  
87      public void execute()
88          throws MojoExecutionException
89      {
90          try
91          {
92              Properties p = new Properties();
93  
94              p.load( new FileInputStream( archetypeProperties ) );
95  
96              File archetypeJar = archetypeCreator.createArchetype( project, localRepository, targetDirectory, p );
97  
98              projectHelper.attachArtifact( project, "jar", "archetype", archetypeJar );
99          }
100         catch ( Exception e )
101         {
102             throw new MojoExecutionException( "Cannot create archetype from this project.", e );
103         }
104     }
105 }