Class CreateMojo

java.lang.Object
org.apache.maven.plugin.AbstractMojo
org.codehaus.mojo.build.AbstractScmMojo
org.codehaus.mojo.build.CreateMojo
All Implemented Interfaces:
org.apache.maven.plugin.ContextEnabled, org.apache.maven.plugin.Mojo

@Mojo(name="create", defaultPhase=INITIALIZE, requiresProject=true, threadSafe=true) public class CreateMojo extends AbstractScmMojo
This mojo is designed to give you a build number. So when you might make 100 builds of version 1.0-SNAPSHOT, you can differentiate between them all.

The build number is based on the revision number retrieved from SCM. It is known to work with Subversion, GIT, and Mercurial.

This mojo can also check to make sure that you have checked everything into SCM, before issuing the build number. That behaviour can be suppressed, and then the latest local build number is used.

Build numbers are not automatically reflected in your artifact's filename, but can be added to the metadata. You can access the build number in your pom with ${buildNumber}. You can also access ${timestamp} and the SCM branch of the build (if applicable) in ${scmBranch}

Note that there are several doFoo parameters. These parameters (doCheck, doUpdate, etc) are the first thing evaluated. If there is no matching expression, we get the default-value. If there is (ie -Dmaven.buildNumber.doUpdate=false), we get that value. So if the XML contains <doCheck>true</doCheck>, then normally that's the final value of the param in question. However, this mojo reverses that behaviour, such that the command line parameters get the last say.

  • Field Details

    • DEFAULT_BRANCH_NAME

      private static final String DEFAULT_BRANCH_NAME
      See Also:
    • buildNumberPropertyName

      @Parameter(property="maven.buildNumber.buildNumberPropertyName", defaultValue="buildNumber") private String buildNumberPropertyName
      You can rename the buildNumber property name to another property name if desired.
      Since:
      1.0-beta-1
    • timestampPropertyName

      @Parameter(property="maven.buildNumber.timestampPropertyName", defaultValue="timestamp") private String timestampPropertyName
      You can rename the timestamp property name to another property name if desired.
      Since:
      1.0-beta-1
    • doCheck

      @Parameter(property="maven.buildNumber.doCheck", defaultValue="false") private boolean doCheck
      If this is made true, we check for modified files but does not fail the build. If you like to fail the build such cases you have to set the failTheBuild property as well. Settings doCheck to true a property is set to true if there are changes
      Since:
      1.0-beta-1
    • failTheBuild

      @Parameter(property="maven.buildNumber.failTheBuild", defaultValue="true") private boolean failTheBuild
      This will fail the build in cases where doCheck is set to true.
      Since:
      3.0.0
    • buildTaintedPropertyName

      @Parameter(property="maven.buildNumber.buildTaintedPropertyName", defaultValue="buildIsTainted") private String buildTaintedPropertyName
      In cases where the doCheck shows that there are changes in the current working copy this property will be set with the value tainted otherwise it will be ok.
    • doUpdate

      @Parameter(property="maven.buildNumber.doUpdate", defaultValue="false") private boolean doUpdate
      If this is made true, then the revision will be updated to the latest in the repo, otherwise it will remain what it is locally. Note that this used to be inverted (skipUpdate), but needed to be changed to allow releases to work. This corresponds to 'svn update'.
      Since:
      1.0-beta-1
    • format

      @Parameter(property="maven.buildNumber.format") private String format
      Specify a message as specified by java.text.MessageFormat. This triggers "items" configuration to be read
      Since:
      1.0-beta-1
    • buildNumberPropertiesFileLocation

      @Parameter(defaultValue="${basedir}/buildNumber.properties") private File buildNumberPropertiesFileLocation
      Properties file to be created when "format" is not null and item has "buildNumber". See Usage for details
      Since:
      1.0-beta-2
    • items

      @Parameter private List<?> items
      Specify the corresponding items for the format message, as specified by java.text.MessageFormat. Special item values are "scmVersion", "timestamp" and "buildNumber[digits]", where [digits] are optional digits added to the end of the number to select a property.
      Since:
      1.0-beta-1
    • locale

      @Parameter(property="maven.buildNumber.locale") private String locale
      The locale used for date and time formatting. The locale name should be in the format defined in Locale.toString(). The default locale is the platform default returned by Locale.getDefault().
      Since:
      1.0-beta-2
    • timestampFormat

      @Parameter(property="maven.buildNumber.timestampFormat") private String timestampFormat
      Apply this SimpleDateFormat to the timestamp only (as opposed to the format parameter).
      Since:
      1.0-beta-2
    • timezone

      @Parameter(property="maven.buildNumber.timestampTimeZone", defaultValue="") private String timezone
      The timezone of the generated timestamp. If blank will default to
      invalid reference
      TimeZone#getDefault()
      Since:
      3.0.0
    • providerImplementations

      @Parameter private Map<String,String> providerImplementations
      Selects alternative SCM provider implementations. Each map key denotes the original provider type as given in the SCM URL like "cvs" or "svn", the map value specifies the provider type of the desired implementation to use instead. In other words, this map configures a substitution mapping for SCM providers.
      Since:
      1.0-beta-3
    • getRevisionOnlyOnce

      @Parameter(property="maven.buildNumber.getRevisionOnlyOnce", defaultValue="false") private boolean getRevisionOnlyOnce
      If set to true, will get the scm revision once for all modules of a multi-module project instead of fetching once for each module.
      Since:
      1.0-beta-3
    • scmBranchPropertyName

      @Parameter(property="maven.buildNumber.scmBranchPropertyName", defaultValue="scmBranch") private String scmBranchPropertyName
      You can rename the buildScmBranch property name to another property name if desired.
      Since:
      1.0-beta-4
    • reactorProjects

      @Parameter(defaultValue="${reactorProjects}", readonly=true, required=true) private List<org.apache.maven.project.MavenProject> reactorProjects
      Contains the full list of projects in the reactor.
      Since:
      1.0-beta-3
    • session

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

      private String revision
    • useScm

      private boolean useScm
  • Constructor Details

    • CreateMojo

      public CreateMojo()
  • Method Details

    • 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
    • handleItems

      private Object[] handleItems(Date now) throws org.apache.maven.plugin.MojoExecutionException
      Throws:
      org.apache.maven.plugin.MojoExecutionException
    • createPropertiesFileIfNotExists

      private void createPropertiesFileIfNotExists(File propertiesFile) throws org.apache.maven.plugin.MojoExecutionException
      Throws:
      org.apache.maven.plugin.MojoExecutionException
    • buildNumberAndTimeStampForReactorProjects

      private void buildNumberAndTimeStampForReactorProjects(Date now, String taintedValue) throws org.apache.maven.plugin.MojoExecutionException
      Throws:
      org.apache.maven.plugin.MojoExecutionException
    • changeProviderImplementation

      private void changeProviderImplementation()
    • format

      private String format(Object[] arguments)
      Formats the given argument using the configured format template and locale.
      Parameters:
      arguments - arguments to be formatted @ @return formatted result
    • doLocalModificationExist

      private boolean doLocalModificationExist(StringBuilder message) throws org.apache.maven.plugin.MojoExecutionException
      Throws:
      org.apache.maven.plugin.MojoExecutionException
    • update

      public List<org.apache.maven.scm.ScmFile> update() throws org.apache.maven.plugin.MojoExecutionException
      Throws:
      org.apache.maven.plugin.MojoExecutionException
    • getStatus

      public List<org.apache.maven.scm.ScmFile> getStatus() throws org.apache.maven.scm.ScmException
      Throws:
      org.apache.maven.scm.ScmException
    • getScmBranch

      public String getScmBranch() throws org.apache.maven.plugin.MojoExecutionException
      Get the branch info for this revision from the repository. For svn, it is in svn info.
      Returns:
      Throws:
      org.apache.maven.plugin.MojoExecutionException
      org.apache.maven.plugin.MojoExecutionException
    • getScmBranchFromUrl

      private String getScmBranchFromUrl() throws org.apache.maven.plugin.MojoExecutionException
      Throws:
      org.apache.maven.plugin.MojoExecutionException
    • filterBranchFromScmUrl

      protected String filterBranchFromScmUrl(String scmUrl)
    • getRevision

      public String getRevision() throws org.apache.maven.plugin.MojoExecutionException
      Get the revision info from the repository. For svn, it is svn info
      Returns:
      Throws:
      org.apache.maven.plugin.MojoExecutionException
    • setScmManager

      public void setScmManager(org.apache.maven.scm.manager.ScmManager scmManager)
    • setUrlScm

      public void setUrlScm(String urlScm)
    • setUsername

      public void setUsername(String username)
    • setPassword

      public void setPassword(String password)
    • setDoCheck

      public void setDoCheck(boolean doCheck)
    • setDoUpdate

      public void setDoUpdate(boolean doUpdate)
    • getBooleanProperty

      private boolean getBooleanProperty(String key, boolean defaultValue)
    • setFormat

      void setFormat(String format)
    • setLocale

      void setLocale(String locale)
    • setItems

      void setItems(List<?> items)
    • setBuildNumberPropertiesFileLocation

      public void setBuildNumberPropertiesFileLocation(File buildNumberPropertiesFileLocation)
    • setScmDirectory

      public void setScmDirectory(File scmDirectory)
    • setRevisionOnScmFailure

      public void setRevisionOnScmFailure(String revisionOnScmFailure)
    • setShortRevisionLength

      public void setShortRevisionLength(int shortRevision)