package org.sakaiproject.maven.plugin.component; import java.io.File; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.*; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; import org.codehaus.plexus.archiver.zip.ZipArchiver; /** * Package Configuration as a Zip for later deployment. */ @Mojo(name="configuration", defaultPhase = LifecyclePhase.PACKAGE, requiresDependencyResolution = ResolutionScope.RUNTIME, threadSafe = true) public class ConfigurationMojo extends AbstractMojo { /** * The maven project. */ @Parameter(defaultValue="${project}", required = true, readonly = true) protected MavenProject project; /** * The Zip archiver. */ @Component(role = org.codehaus.plexus.archiver.Archiver.class, hint = "zip") private ZipArchiver zipArchiver; /** * Directory containing the build files. */ @Parameter(defaultValue="${project.build.directory}/configuration") private String configurationDirectory; /** * Directory containing the build files. */ @Parameter(defaultValue="${project.build.directory}") private String outputDirectory; /** * The name of the generated Configuration. */ @Parameter(defaultValue="${project.build.finalName}", required = true) private String configurationName; /** */ @Component private MavenProjectHelper projectHelper; /** * Whether this is the main artifact being built. Set to <code>false</code> if you don't want to install or * deploy it to the local repository instead of the default one in an execution. */ @Parameter(property="primaryArtifact", defaultValue = "true") private boolean primaryArtifact; /** * Classifier to add to the artifact generated. If given, the artifact will be an attachment instead. */ @Parameter private String classifier; protected static File getConfigurationFile( File basedir, String finalName, String classifier ) { if ( classifier == null ) { classifier = ""; } else if ( classifier.trim().length() > 0 && !classifier.startsWith( "-" ) ) { classifier = "-" + classifier; } return new File( basedir, finalName + classifier + ".configuration" ); } public void execute() throws MojoExecutionException { try { File outputDirectoryFile = new File(outputDirectory); File buildDirectoryFile = new File(configurationDirectory); File outputFile = getConfigurationFile( outputDirectoryFile, configurationName, classifier); zipArchiver.addDirectory( buildDirectoryFile, new String[]{"**/**"}, new String[]{"**/"+outputFile.getName()} ); zipArchiver.setDestFile( outputFile ); zipArchiver.createArchive(); String classifier = this.classifier; if ( classifier != null ) { projectHelper.attachArtifact( getProject(), "configuration", classifier, outputFile ); } else { Artifact artifact = getProject().getArtifact(); if ( primaryArtifact ) { artifact.setFile( outputFile ); } else if ( artifact.getFile() == null || artifact.getFile().isDirectory() ) { artifact.setFile( outputFile ); } } } catch( Exception e ) { throw new MojoExecutionException( "Could not zip configuration settings", e ); } } public MavenProject getProject() { return project; } public void setProject(MavenProject project) { this.project = project; } }