Class CreateArchetypeFromProjectMojo

  • All Implemented Interfaces:
    org.apache.maven.plugin.ContextEnabled, org.apache.maven.plugin.Mojo

    @Mojo(name="create-from-project",
          requiresProject=true,
          aggregator=true)
    @Execute(phase=GENERATE_SOURCES)
    public class CreateArchetypeFromProjectMojo
    extends org.apache.maven.plugin.AbstractMojo

    Creates an archetype project from the current project.

    This goal reads your source and resource files, the values of its parameters, and properties you specify in a .property file, and uses them to create a Maven archetype project using the maven-archetype packaging. If you build the resulting project, it will create the archetype. You can then use this archetype to create new projects that resemble the original.

    The maven-archetype-plugin uses Velocity to expand template files, and this documentation talks about 'Velocity Properties', which are values substituted into Velocity templates. See The Velocity User's Guide for more information.

    This goal modifies the text of the files of the current project to form the Velocity template files that make up the archetype.

    GAV
    The GAV values for the current project are replaced by properties: groupId, artifactId, and version. The user chooses new values for these when generating a project from the archetype.
    package
    All the files under one specified Java (or cognate) package are relocated to a project that the user chooses when generating a project. References to the class name are replaced by a property reference. For example, if the current project's sources are in the package org.apache.saltedpeanuts, then any example of the string org.apache.saltedpeanuts is replaced with the Velocity property reference ${packageName}. When the user generates a project, this is in turn replaced by his or her choice of a package.
    custom properties
    You may identify additional strings that should be replaced by parameters. To add custom properties, you must use the propertyFile parameter to specify a property file. See the documentation for propertyFile for the details.
    integration tests
    You may also specify a set of integration tests to be executed right after you create archetype from the project. Each test consists of a separate folder under src/it/projects folder and in there you specify archetype.properties, goal.txt and verify.groovy files. The archetype.properties file is the file used to generate a new project from the newly created archetype and the goal.txt a single-line file to specify the maven goal to invoke after generation of the test-project. Finally the verify.groovy is a groovy file that you can use to specify your assertions on the generated project.

    Note that you may need to edit the results of this goal. This goal has no way to exclude unwanted files, or add copyright notices to the Velocity templates, or add more complex elements to the archetype metadata file.

    This goal also generates a simple integration-test that exercises the generated archetype.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.String archetypeFilteredExtentions
      File extensions which are checked for project's text files (vs binary files).
      private java.lang.String archetypeLanguages
      Directory names which are checked for project's sources main package.
      private java.lang.String archetypePostPhase
      The property telling which phase to call on the generated archetype.
      private ArchetypeCreationConfigurator configurator  
      private java.lang.String defaultEncoding
      Velocity templates encoding.
      private boolean interactive
      Enable the interactive mode to define the archetype from the project.
      private boolean keepParent
      POMs in archetype are created with their initial parent.
      private org.apache.maven.artifact.repository.ArtifactRepository localRepository  
      private ArchetypeManager manager  
      private java.io.File outputDirectory
      The directory where the archetype should be created.
      private java.lang.String packageName
      The package name for Java source files to be incorporated in the archetype and and relocated to the package that the user selects.
      private boolean partialArchetype
      Create a partial archetype.
      private boolean preserveCData
      Create pom's velocity templates with CDATA preservation.
      private org.apache.maven.project.MavenProject project
      The Maven project to create an archetype from.
      private java.io.File propertyFile
      The property file that holds the plugin configuration.
      private org.apache.maven.execution.MavenSession session  
      private boolean testMode  
      • Fields inherited from interface org.apache.maven.plugin.Mojo

        ROLE
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void execute()  
      private java.util.List<java.lang.String> getFilteredExtensions​(java.lang.String archetypeFilteredExtentions, java.io.File propertyFile)  
      private java.util.List<java.lang.String> getLanguages​(java.lang.String archetypeLanguages, java.io.File propertyFile)  
      • Methods inherited from class org.apache.maven.plugin.AbstractMojo

        getLog, getPluginContext, setLog, setPluginContext
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • interactive

        @Parameter(property="interactive",
                   defaultValue="false")
        private boolean interactive
        Enable the interactive mode to define the archetype from the project.
      • archetypeFilteredExtentions

        @Parameter(property="archetype.filteredExtentions")
        private java.lang.String archetypeFilteredExtentions
        File extensions which are checked for project's text files (vs binary files).
      • archetypeLanguages

        @Parameter(property="archetype.languages")
        private java.lang.String archetypeLanguages
        Directory names which are checked for project's sources main package.
      • defaultEncoding

        @Parameter(property="archetype.encoding",
                   defaultValue="UTF-8")
        private java.lang.String defaultEncoding
        Velocity templates encoding.
      • partialArchetype

        @Parameter(property="archetype.partialArchetype")
        private boolean partialArchetype
        Create a partial archetype.
      • preserveCData

        @Parameter(property="archetype.preserveCData")
        private boolean preserveCData
        Create pom's velocity templates with CDATA preservation. This uses the String.replaceAll() method and risks to have some overly replacement capabilities (beware of '1.0' value).
      • localRepository

        @Parameter(defaultValue="${localRepository}",
                   readonly=true)
        private org.apache.maven.artifact.repository.ArtifactRepository localRepository
      • keepParent

        @Parameter(property="archetype.keepParent")
        private boolean keepParent
        POMs in archetype are created with their initial parent. This property is ignored when preserveCData is true.
      • project

        @Parameter(defaultValue="${project}",
                   readonly=true,
                   required=true)
        private org.apache.maven.project.MavenProject project
        The Maven project to create an archetype from.
      • propertyFile

        @Parameter(defaultValue="archetype.properties",
                   property="archetype.properties")
        private java.io.File propertyFile
        The property file that holds the plugin configuration. If this is provided, then the plugin reads properties from here. The properties in here can be standard properties listed below or custom properties for this archetype. The standard properties are below. Several of them overlap parameters of this goal; it's better to just set the parameter.

        package
        See the packageName parameter.
        archetype.languages
        See the archetypeLanguages parameter.
        groupId
        The default groupId of the generated project.
        artifactId
        The default artifactId of the generated project.
        version
        The default version of the generated project.
        excludePatterns
        A comma-separated list of paths that will not be included in the resulting archetype.
        archetype.filteredExtensions
        See the filteredExensions parameter.
        Custom Properties

        Custom properties allow you to replace some constant values in the project's files with Velocity macro references. When a user generates a project from your archetype he or she gets the opportunity to replace the value from the source project.

        Custom property names may not contain the '.' character.

        For example, if you include a line like the following in your property file:

        cxf-version=2.5.1-SNAPSHOT
        the plugin will search your files for the 2.5.1-SNAPSHOT string and replace them with references to a velocity macro cxf-version. It will then list cxf-version as a requiredProperty in the archetype-metadata.xml, with 2.5.1-SNAPSHOT as the default value.

      • archetypePostPhase

        @Parameter(property="archetype.postPhase",
                   defaultValue="package")
        private java.lang.String archetypePostPhase
        The property telling which phase to call on the generated archetype. Interesting values are: package, integration-test, install and deploy.
      • outputDirectory

        @Parameter(defaultValue="${project.build.directory}/generated-sources/archetype")
        private java.io.File outputDirectory
        The directory where the archetype should be created.
      • testMode

        @Parameter(property="testMode")
        private boolean testMode
      • packageName

        @Parameter(property="packageName")
        private java.lang.String packageName
        The package name for Java source files to be incorporated in the archetype and and relocated to the package that the user selects.
      • session

        @Parameter(defaultValue="${session}",
                   readonly=true,
                   required=true)
        private org.apache.maven.execution.MavenSession session
    • Constructor Detail

      • CreateArchetypeFromProjectMojo

        public CreateArchetypeFromProjectMojo()
    • Method Detail

      • execute

        public void execute()
                     throws org.apache.maven.plugin.MojoExecutionException,
                            org.apache.maven.plugin.MojoFailureException
        Throws:
        org.apache.maven.plugin.MojoExecutionException
        org.apache.maven.plugin.MojoFailureException
      • getFilteredExtensions

        private java.util.List<java.lang.String> getFilteredExtensions​(java.lang.String archetypeFilteredExtentions,
                                                                       java.io.File propertyFile)
                                                                throws java.io.IOException
        Throws:
        java.io.IOException
      • getLanguages

        private java.util.List<java.lang.String> getLanguages​(java.lang.String archetypeLanguages,
                                                              java.io.File propertyFile)
                                                       throws java.io.IOException
        Throws:
        java.io.IOException