Class 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 org.apache.maven.plugin.AbstractMojo
    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.

    Version:
    $Id: CreateMojo.java 19675 2014-04-26 21:50:31Z baptiste $
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.io.File buildNumberPropertiesFileLocation
      Properties file to be created when "format" is not null and item has "buildNumber".
      private java.lang.String buildNumberPropertyName
      You can rename the buildNumber property name to another property name if desired.
      private static java.lang.String DEFAULT_BRANCH_NAME  
      private static int DEFAULT_SHORT_REVISION_DISABLED  
      private boolean doCheck
      If this is made true, we check for modified files, and if there are any, we fail the build.
      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.
      private java.lang.String format
      Specify a message as specified by java.text.MessageFormat.
      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.
      private java.util.List items
      Specify the corresponding items for the format message, as specified by java.text.MessageFormat.
      private java.lang.String locale
      The locale used for date and time formatting.
      private org.apache.maven.scm.log.ScmLogDispatcher logger  
      private java.lang.String password
      The password that is used when connecting to the SCM system.
      private org.apache.maven.project.MavenProject project  
      private java.util.Map<java.lang.String,​java.lang.String> providerImplementations
      Selects alternative SCM provider implementations.
      private java.util.List reactorProjects
      Contains the full list of projects in the reactor.
      private java.lang.String readUrlScm  
      private java.lang.String revision  
      private java.lang.String revisionOnScmFailure
      Setting this value allows the build to continue even in the event of an SCM failure.
      private java.lang.String scmBranchPropertyName
      You can rename the buildScmBranch property name to another property name if desired.
      private java.io.File scmDirectory
      Local directory to be used to issue SCM actions
      private org.apache.maven.scm.manager.ScmManager scmManager  
      protected org.apache.maven.execution.MavenSession session  
      private int shortRevisionLength
      Max length of a revision id (used only for git)
      private boolean skip
      Whether to skip this execution.
      private java.lang.String timestampFormat
      Apply this java.text.MessageFormat to the timestamp only (as opposed to the format parameter).
      private java.lang.String timestampPropertyName
      You can rename the timestamp property name to another property name if desired.
      private java.lang.String urlScm  
      private boolean useLastCommittedRevision
      whether to retrieve the revision for the last commit, or the last revision of the repository.
      private java.lang.String username
      The username that is used when connecting to the SCM system.
      private boolean useScm  
      • Fields inherited from interface org.apache.maven.plugin.Mojo

        ROLE
    • Constructor Summary

      Constructors 
      Constructor Description
      CreateMojo()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void checkForLocalModifications()  
      private void checkResult​(org.apache.maven.scm.ScmResult result)  
      private void closeStream​(java.io.Closeable stream)  
      void execute()  
      protected java.lang.String filterBranchFromScmUrl​(java.lang.String scmUrl)  
      private java.lang.String format​(java.lang.Object[] arguments)
      Formats the given argument using the configured format template and locale.
      private org.apache.maven.scm.log.ScmLogger getLogger()  
      java.lang.String getRevision()
      Get the revision info from the repository.
      java.lang.String getScmBranch()
      Get the branch info for this revision from the repository.
      protected java.lang.String getScmBranchFromUrl()  
      private org.apache.maven.scm.repository.ScmRepository getScmRepository()  
      java.util.List<org.apache.maven.scm.ScmFile> getStatus()  
      org.apache.maven.scm.command.info.InfoScmResult info​(org.apache.maven.scm.repository.ScmRepository repository, org.apache.maven.scm.ScmFileSet fileSet)
      Get info from scm.
      void setBuildNumberPropertiesFileLocation​(java.io.File buildNumberPropertiesFileLocation)  
      void setDoCheck​(boolean doCheck)  
      void setDoUpdate​(boolean doUpdate)  
      (package private) void setFormat​(java.lang.String format)  
      (package private) void setItems​(java.util.List items)  
      (package private) void setLocale​(java.lang.String locale)  
      void setPassword​(java.lang.String password)  
      void setRevisionOnScmFailure​(java.lang.String revisionOnScmFailure)  
      void setScmDirectory​(java.io.File scmDirectory)  
      void setScmManager​(org.apache.maven.scm.manager.ScmManager scmManager)  
      void setShortRevisionLength​(int shortRevision)  
      void setUrlScm​(java.lang.String urlScm)  
      void setUsername​(java.lang.String username)  
      java.util.List<org.apache.maven.scm.ScmFile> update()  
      • 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

      • DEFAULT_BRANCH_NAME

        private static final java.lang.String DEFAULT_BRANCH_NAME
        See Also:
        Constant Field Values
      • urlScm

        @Parameter(defaultValue="${project.scm.developerConnection}",
                   readonly=true)
        private java.lang.String urlScm
      • readUrlScm

        @Parameter(defaultValue="${project.scm.connection}",
                   readonly=true)
        private java.lang.String readUrlScm
        Since:
        1.0-beta-5
      • username

        @Parameter(property="username")
        private java.lang.String username
        The username that is used when connecting to the SCM system.
        Since:
        1.0-beta-1
      • password

        @Parameter(property="password")
        private java.lang.String password
        The password that is used when connecting to the SCM system.
        Since:
        1.0-beta-1
      • scmDirectory

        @Parameter(property="maven.buildNumber.scmDirectory",
                   defaultValue="${basedir}")
        private java.io.File scmDirectory
        Local directory to be used to issue SCM actions
        Since:
        1.0-beta-
      • buildNumberPropertyName

        @Parameter(property="maven.buildNumber.buildNumberPropertyName",
                   defaultValue="buildNumber")
        private java.lang.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 java.lang.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, and if there are any, we fail the build. Note that this used to be inverted (skipCheck), but needed to be changed to allow releases to work. This corresponds to 'svn status'.
        Since:
        1.0-beta-1
      • 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 java.lang.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 java.io.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 java.util.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 java.lang.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
      • useLastCommittedRevision

        @Parameter(property="maven.buildNumber.useLastCommittedRevision",
                   defaultValue="false")
        private boolean useLastCommittedRevision
        whether to retrieve the revision for the last commit, or the last revision of the repository.
        Since:
        1.0-beta-2
      • timestampFormat

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

        @Parameter(property="maven.buildNumber.revisionOnScmFailure")
        private java.lang.String revisionOnScmFailure
        Setting this value allows the build to continue even in the event of an SCM failure. The value set will be used as the revision string in the event of a failure to retrieve the revision it from the SCM.
        Since:
        1.0-beta-2
      • providerImplementations

        @Parameter
        private java.util.Map<java.lang.String,​java.lang.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 substitition mapping for SCM providers.
        Since:
        1.0-beta-3
      • scmManager

        @Component
        private org.apache.maven.scm.manager.ScmManager scmManager
      • project

        @Parameter(defaultValue="${project}",
                   required=true,
                   readonly=true)
        private org.apache.maven.project.MavenProject project
      • reactorProjects

        @Parameter(defaultValue="${reactorProjects}",
                   readonly=true,
                   required=true)
        private java.util.List reactorProjects
        Contains the full list of projects in the reactor.
        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 java.lang.String scmBranchPropertyName
        You can rename the buildScmBranch property name to another property name if desired.
        Since:
        1.0-beta-4
      • skip

        @Parameter(property="maven.buildNumber.skip",
                   defaultValue="false")
        private boolean skip
        Whether to skip this execution.
        Since:
        1.3
      • session

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

        private org.apache.maven.scm.log.ScmLogDispatcher logger
      • revision

        private java.lang.String revision
      • shortRevisionLength

        @Parameter
        private int shortRevisionLength
        Max length of a revision id (used only for git)
        Since:
        1.1
      • DEFAULT_SHORT_REVISION_DISABLED

        private static final int DEFAULT_SHORT_REVISION_DISABLED
        Since:
        1.1
        See Also:
        Constant Field Values
      • useScm

        private boolean useScm
    • Constructor Detail

      • CreateMojo

        public CreateMojo()
    • 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
      • closeStream

        private void closeStream​(java.io.Closeable stream)
      • format

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

        private void checkForLocalModifications()
                                         throws org.apache.maven.plugin.MojoExecutionException
        Throws:
        org.apache.maven.plugin.MojoExecutionException
      • update

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

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

        public java.lang.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

        protected java.lang.String getScmBranchFromUrl()
                                                throws org.apache.maven.plugin.MojoExecutionException
        Throws:
        org.apache.maven.plugin.MojoExecutionException
      • filterBranchFromScmUrl

        protected java.lang.String filterBranchFromScmUrl​(java.lang.String scmUrl)
      • getRevision

        public java.lang.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
      • info

        public org.apache.maven.scm.command.info.InfoScmResult info​(org.apache.maven.scm.repository.ScmRepository repository,
                                                                    org.apache.maven.scm.ScmFileSet fileSet)
                                                             throws org.apache.maven.scm.ScmException
        Get info from scm.
        Parameters:
        repository -
        fileSet -
        Returns:
        Throws:
        org.apache.maven.scm.ScmException
      • getLogger

        private org.apache.maven.scm.log.ScmLogger getLogger()
        Returns:
      • getScmRepository

        private org.apache.maven.scm.repository.ScmRepository getScmRepository()
                                                                        throws org.apache.maven.scm.ScmException
        Throws:
        org.apache.maven.scm.ScmException
      • checkResult

        private void checkResult​(org.apache.maven.scm.ScmResult result)
                          throws org.apache.maven.scm.ScmException
        Throws:
        org.apache.maven.scm.ScmException
      • setScmManager

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

        public void setUrlScm​(java.lang.String urlScm)
      • setUsername

        public void setUsername​(java.lang.String username)
      • setPassword

        public void setPassword​(java.lang.String password)
      • setDoCheck

        public void setDoCheck​(boolean doCheck)
      • setDoUpdate

        public void setDoUpdate​(boolean doUpdate)
      • setFormat

        void setFormat​(java.lang.String format)
      • setLocale

        void setLocale​(java.lang.String locale)
      • setItems

        void setItems​(java.util.List items)
      • setBuildNumberPropertiesFileLocation

        public void setBuildNumberPropertiesFileLocation​(java.io.File buildNumberPropertiesFileLocation)
      • setScmDirectory

        public void setScmDirectory​(java.io.File scmDirectory)
      • setRevisionOnScmFailure

        public void setRevisionOnScmFailure​(java.lang.String revisionOnScmFailure)
      • setShortRevisionLength

        public void setShortRevisionLength​(int shortRevision)