Class CommonsDistributionStagingMojo

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

    @Mojo(name="stage-distributions",
          defaultPhase=DEPLOY,
          threadSafe=true,
          aggregator=true)
    public class CommonsDistributionStagingMojo
    extends org.apache.maven.plugin.AbstractMojo
    This class checks out the dev distribution location, copies the distributions into that directory structure under the target/commons-release-plugin/scm directory. Then commits the distributions back up to SVN. Also, we include the built and zipped site as well as the RELEASE-NOTES.txt.
    Since:
    1.0
    • Field Detail

      • project

        @Parameter(defaultValue="${project}",
                   required=true)
        private org.apache.maven.project.MavenProject project
        The MavenProject object is essentially the context of the maven build at a given time.
      • baseDir

        @Parameter(defaultValue="${basedir}")
        private File baseDir
        The File that contains a file to the root directory of the working project. Typically this directory is where the pom.xml resides.
      • siteDirectory

        @Parameter(defaultValue="${project.build.directory}/site",
                   property="commons.siteOutputDirectory")
        private File siteDirectory
        The location to which the site gets built during running mvn site.
      • workingDirectory

        @Parameter(defaultValue="${project.build.directory}/commons-release-plugin",
                   property="commons.outputDirectory")
        private File workingDirectory
        The main working directory for the plugin, namely target/commons-release-plugin, but that assumes that we're using the default maven ${project.build.directory}.
      • distCheckoutDirectory

        @Parameter(defaultValue="${project.build.directory}/commons-release-plugin/scm",
                   property="commons.distCheckoutDirectory")
        private File distCheckoutDirectory
        The location to which to check out the dist subversion repository under our working directory, which was given above.
      • releaseNotesFile

        @Parameter(defaultValue="${basedir}/RELEASE-NOTES.txt",
                   property="commons.releaseNotesLocation")
        private File releaseNotesFile
        The location of the RELEASE-NOTES.txt file such that multi-module builds can configure it.
      • dryRun

        @Parameter(property="commons.release.dryRun",
                   defaultValue="false")
        private Boolean dryRun
        A boolean that determines whether or not we actually commit the files up to the subversion repository. If this is set to true, we do all but make the commits. We do checkout the repository in question though.
      • distSvnStagingUrl

        @Parameter(defaultValue="",
                   property="commons.distSvnStagingUrl")
        private String distSvnStagingUrl
        The url of the subversion repository to which we wish the artifacts to be staged. Typically this would need to be of the form: scm:svn:https://dist.apache.org/repos/dist/dev/commons/foo/version-RC#. Note. that the prefix to the substring https is a requirement.
      • isDistModule

        @Parameter(defaultValue="false",
                   property="commons.release.isDistModule")
        private Boolean isDistModule
        A parameter to generally avoid running unless it is specifically turned on by the consuming module.
      • commonsReleaseVersion

        @Parameter(property="commons.release.version")
        private String commonsReleaseVersion
        The release version of the artifact to be built.
      • commonsRcVersion

        @Parameter(property="commons.rc.version")
        private String commonsRcVersion
        The RC version of the release. For example the first voted on candidate would be "RC1".
      • distServer

        @Parameter(property="commons.distServer")
        private String distServer
        The ID of the server (specified in settings.xml) which should be used for dist authentication. This will be used in preference to username/password.
      • username

        @Parameter(property="user.name")
        private String username
        The username for the distribution subversion repository. This is typically your Apache id.
      • password

        @Parameter(property="user.password")
        private String password
        The password associated with username.
      • settings

        @Parameter(defaultValue="${settings}",
                   readonly=true,
                   required=true)
        private org.apache.maven.settings.Settings settings
        Maven Settings.
      • settingsDecrypter

        @Component
        private org.apache.maven.settings.crypto.SettingsDecrypter settingsDecrypter
        Maven SettingsDecrypter component.
      • distRcVersionDirectory

        private File distRcVersionDirectory
        A subdirectory of the dist directory into which we are going to stage the release candidate. We build this up in the execute() method. And, for example, the directory should look like https://dist.apache.org/repos/dist/dev/commons/text/1.4-RC1.
    • 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
      • listNotHiddenFilesAndDirectories

        private void listNotHiddenFilesAndDirectories​(File directory,
                                                      List<File> files)
        Lists all directories and files to a flat list.
        Parameters:
        directory - File containing directory to list
        files - a List of File to which to append the files.
      • copyDistributionsIntoScmDirectoryStructureAndAddToSvn

        private List<FilecopyDistributionsIntoScmDirectoryStructureAndAddToSvn​(File copiedReleaseNotes,
                                                                                 org.apache.maven.scm.provider.ScmProvider provider,
                                                                                 org.apache.maven.scm.repository.ScmRepository repository)
                                                                          throws org.apache.maven.plugin.MojoExecutionException
        Copies the list of files at the root of the workingDirectory into the directory structure of the distribution staging repository. Specifically:
        • root:
          • site
          • site.zip
          • RELEASE-NOTES.txt
          • source:
            • -src artifacts....
          • binaries:
            • -bin artifacts....
        Parameters:
        copiedReleaseNotes - is the RELEASE-NOTES.txt file that exists in the target/commons-release-plugin/scm directory.
        provider - is the ScmProvider that we will use for adding the files we wish to commit.
        repository - is the ScmRepository that we will use for adding the files that we wish to commit.
        Returns:
        a List of File's in the directory for the purpose of adding them to the maven ScmFileSet.
        Throws:
        org.apache.maven.plugin.MojoExecutionException - if an IOException occurs so that Maven can handle it properly.
      • copySignatureValidatorScriptToScmDirectory

        private File copySignatureValidatorScriptToScmDirectory()
                                                         throws org.apache.maven.plugin.MojoExecutionException
        Copies our signature-validator.sh script into ${basedir}/target/commons-release-plugin/scm/signature-validator.sh.
        Returns:
        the File for the signature-validator.sh
        Throws:
        org.apache.maven.plugin.MojoExecutionException - if an error occurs while the resource is being copied
      • copySiteToScmDirectory

        private List<FilecopySiteToScmDirectory()
                                           throws org.apache.maven.plugin.MojoExecutionException
        Copies ${basedir}/target/site to ${basedir}/target/commons-release-plugin/scm/site.
        Returns:
        the List of File's contained in ${basedir}/target/commons-release-plugin/scm/site, after the copy is complete.
        Throws:
        org.apache.maven.plugin.MojoExecutionException - if the site copying fails for some reason.
      • buildReadmeAndHeaderHtmlFiles

        private List<FilebuildReadmeAndHeaderHtmlFiles()
                                                  throws org.apache.maven.plugin.MojoExecutionException
        Builds up README.html and HEADER.html that reside in following.
        • distRoot
          • binaries/HEADER.html (symlink)
          • binaries/README.html (symlink)
          • source/HEADER.html (symlink)
          • source/README.html (symlink)
          • HEADER.html
          • README.html
        Returns:
        the List of created files above
        Throws:
        org.apache.maven.plugin.MojoExecutionException - if an IOException occurs in the creation of these files fails.
      • copyHeaderAndReadmeToSubdirectories

        private List<FilecopyHeaderAndReadmeToSubdirectories​(File headerFile,
                                                               File readmeFile)
                                                        throws org.apache.maven.plugin.MojoExecutionException
        Copies README.html and HEADER.html to the source and binaries directories.
        Parameters:
        headerFile - The originally created HEADER.html file.
        readmeFile - The originally created README.html file.
        Returns:
        a List of created files.
        Throws:
        org.apache.maven.plugin.MojoExecutionException - if the SharedFunctions.copyFile(Log, File, File) fails.
      • setBaseDir

        protected void setBaseDir​(File baseDir)
        This method is the setter for the baseDir field, specifically for the usage in the unit tests.
        Parameters:
        baseDir - is the File to be used as the project's root directory when this mojo is invoked.