import org.apache.maven.project.MavenProject import org.apache.maven.scm.provider.ScmUrlUtils import org.codehaus.gmaven.mojo.GroovyMojo /** * @goal commit-projects */ public class CommitProjectsMojo extends GroovyMojo { /** * @parameter expression="${project}" * @required * @readonly */ MavenProject project /** * The SCM connection URL for developers. * * @parameter default-value="${project.scm.developerConnection}" * @required */ private String developerConnectionUrl; /** * @parameter expression="${commit-projects.svnUserName}" */ private String svnUsername; /** * @parameter expression="${commit-projects.svnPassword}" */ private String svnPassword; void execute() { if (!ScmUrlUtils.isValid(developerConnectionUrl)) { log.info('developerConnectionUrl is not valid: ' + developerConnectionUrl) log.info('skipping...') return } def providerSpecificPart = ScmUrlUtils.getProviderSpecificPart(developerConnectionUrl) if(svnUsername == null) { ant.input(message: 'SVN Username: ', addproperty: 'commit-projects.svnUserName') svnUsername = ant.project.properties.'commit-projects.svnUserName' System.properties.setProperty('commit-projects.svnUserName', svnUsername) } if(svnPassword == null) { ant.input(message: 'SVN Password: ', addproperty: 'commit-projects.svnPassword') { handler(classname: "org.apache.tools.ant.input.SecureInputHandler") } svnPassword = ant.project.properties.'commit-projects.svnPassword' System.properties.setProperty('commit-projects.svnPassword', svnPassword) } log.info('Getting ready to create: ' + providerSpecificPart) ant.input(message: 'Press Return key to continue...') ant.exec(executable: 'svn', dir: project.basedir, failonerror: true) { arg(value: 'mkdir') arg(value: '--parents') arg(value: '-m') arg(value: '[wizard-archetype-maven-plugin] Create project directory.') arg(value: providerSpecificPart) arg(value: '--username') arg(value: svnUsername) arg(value: '--password') arg(value: svnPassword) } log.info('Checking out: ' + providerSpecificPart) ant.exec(executable: 'svn', dir: project.basedir, failonerror: true) { arg(value: 'checkout') arg(value: providerSpecificPart) arg(value: '-r') arg(value: 'HEAD') arg(value: '--depth=immediates') arg(value: '--force') arg(value: '--username') arg(value: svnUsername) arg(value: '--password') arg(value: svnPassword) arg(value: project.basedir) } log.info('Adding src') ant.exec(executable: 'svn', dir: project.basedir, failonerror: true) { arg(value: 'add') arg(value: 'src') arg(value: '--force') } log.info('Adding pom.xml') ant.exec(executable: 'svn', dir: project.basedir, failonerror: true) { arg(value: 'add') arg(value: 'pom.xml') arg(value: '--force') } def CrLf = "\r\n"; def ignores = '.checkstyle' + CrLf + '.classpath' + CrLf + '.fbprefs' + CrLf + '.project' + CrLf + '.settings' + CrLf + 'META-INF' + CrLf + 'bin' + CrLf + 'plugin.xml' + CrLf + 'target' + CrLf + 'OSGI-INF' log.info('Ignoring: ' + ignores) ant.exec(executable: 'svn', dir: project.basedir, failonerror: true) { arg(value: 'propset') arg(value: 'svn:ignore') arg(value: ignores) arg(value: project.basedir) } log.info('Committing project') ant.exec(executable: 'svn', dir: project.basedir) { arg(value: 'commit') arg(value: '-m') arg(value: '[wizard-archetype-maven-plugin] Create initial project.') arg(value: '--username') arg(value: svnUsername) arg(value: '--password') arg(value: svnPassword) } } }