Class CreateArchetypeFromProjectMojo
- All Implemented Interfaces:
org.apache.maven.plugin.ContextEnabled
,org.apache.maven.plugin.Mojo
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 stringorg.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 forpropertyFile
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
andverify.groovy
files. Thearchetype.properties
file is the file used to generate a new project from the newly created archetype and thegoal.txt
a single-line file to specify the maven goal to invoke after generation of the test-project. Finally theverify.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
FieldsModifier and TypeFieldDescriptionprivate String
File extensions which are checked for project's text files (vs binary files).private String
Directory names which are checked for project's sources main package.private String
The property telling which phase to call on the generated archetype.private ArchetypeCreationConfigurator
private String
Velocity templates encoding.private boolean
Enable the interactive mode to define the archetype from the project.private boolean
POMs in archetype are created with their initial parent.private ArchetypeManager
private File
The directory where the archetype should be created.private String
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
Create a partial archetype.private boolean
Create pom's velocity templates with CDATA preservation.private org.apache.maven.project.MavenProject
The Maven project to create an archetype from.private File
The property file that holds the plugin configuration.private org.apache.maven.execution.MavenSession
private boolean
Fields inherited from interface org.apache.maven.plugin.Mojo
ROLE
-
Constructor Summary
Constructors -
Method Summary
Methods inherited from class org.apache.maven.plugin.AbstractMojo
getLog, getPluginContext, setLog, setPluginContext
-
Field Details
-
configurator
-
interactive
@Parameter(property="interactive", defaultValue="false") private boolean interactiveEnable the interactive mode to define the archetype from the project. -
manager
-
archetypeFilteredExtentions
File extensions which are checked for project's text files (vs binary files). -
archetypeLanguages
Directory names which are checked for project's sources main package. -
defaultEncoding
Velocity templates encoding. -
partialArchetype
@Parameter(property="archetype.partialArchetype") private boolean partialArchetypeCreate a partial archetype. -
preserveCData
@Parameter(property="archetype.preserveCData") private boolean preserveCDataCreate pom's velocity templates with CDATA preservation. This uses theString.replaceAll()
method and risks to have some overly replacement capabilities (beware of '1.0' value). -
keepParent
@Parameter(property="archetype.keepParent") private boolean keepParentPOMs 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 projectThe Maven project to create an archetype from. -
propertyFile
@Parameter(defaultValue="archetype.properties", property="archetype.properties") private File propertyFileThe 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 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 the2.5.1-SNAPSHOT
string and replace them with references to a velocity macrocxf-version. It will then list
cxf-version
as arequiredProperty
in thearchetype-metadata.xml
, with2.5.1-SNAPSHOT
as the default value. -
archetypePostPhase
@Parameter(property="archetype.postPhase", defaultValue="package") private String archetypePostPhaseThe property telling which phase to call on the generated archetype. Interesting values are:package
,integration-test
,install
anddeploy
. -
outputDirectory
@Parameter(defaultValue="${project.build.directory}/generated-sources/archetype") private File outputDirectoryThe directory where the archetype should be created. -
testMode
@Parameter(property="testMode") private boolean testMode -
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 Details
-
CreateArchetypeFromProjectMojo
public CreateArchetypeFromProjectMojo()
-
-
Method Details
-
execute
public void execute() throws org.apache.maven.plugin.MojoExecutionException- Throws:
org.apache.maven.plugin.MojoExecutionException
-
getFilteredExtensions
private List<String> getFilteredExtensions(String archetypeFilteredExtentions, File propertyFile) throws IOException - Throws:
IOException
-
getLanguages
- Throws:
IOException
-