Author: aadamchik Date: Mon Dec 25 01:07:18 2006 New Revision: 490118 URL: http://svn.apache.org/viewvc?view=rev&rev=490118 Log: CAY-719:Finalize Maven assembly scripts for the upcoming 3.0 milestone releases (refactoring; added support for aggregate-sources goal)
Added: incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/util/ incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/util/PatternGroup.java - copied, changed from r490115, incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/PatternGroup.java Removed: incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/PatternGroup.java Modified: incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/AbstractAggregatorMojo.java incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/BinAggregatorMojo.java incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/SourcesAggregatorMojo.java Modified: incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/AbstractAggregatorMojo.java URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/AbstractAggregatorMojo.java?view=diff&rev=490118&r1=490117&r2=490118 ============================================================================== --- incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/AbstractAggregatorMojo.java (original) +++ incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/AbstractAggregatorMojo.java Mon Dec 25 01:07:18 2006 @@ -24,6 +24,9 @@ import java.util.Iterator; import java.util.List; +import org.apache.cayenne.maven.plugin.util.PatternGroup; +import org.apache.maven.archiver.MavenArchiveConfiguration; +import org.apache.maven.archiver.MavenArchiver; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.repository.ArtifactRepository; @@ -34,15 +37,26 @@ import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; +import org.apache.maven.project.MavenProjectHelper; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.UnArchiver; +import org.codehaus.plexus.archiver.jar.JarArchiver; import org.codehaus.plexus.archiver.manager.ArchiverManager; import org.codehaus.plexus.archiver.manager.NoSuchArchiverException; import org.codehaus.plexus.util.FileUtils; -// copied from Maven Dependency plugin v. 1.0, AbstractFromConfigurationMojo. +/** + * A superclass of aggregator mojos. + * + * @author Andrus Adamchik + */ public abstract class AbstractAggregatorMojo extends AbstractMojo { + // by default exclude maven entries from other jars and overlapping manifests + static final String[] DEFAULT_EXCLUDES = new String[] { + "META-INF/maven/**", "META-INF/MANIFEST.MF" + }; + /** * Used to look up Artifacts in the remote repository. * @@ -107,44 +121,105 @@ */ protected MavenProject project; - protected abstract File getUnpackDirectory(); + /** + * @component + */ + private MavenProjectHelper projectHelper; /** - * Preprocesses the list of ArtifactItems. This method defaults the outputDirectory if - * not set and creates the output Directory if it doesn't exist. - * - * @return An ArrayList of preprocessed ArtifactItems - * @throws MojoExecutionException with a message if an error occurs. - * @see ArtifactItem + * Preprocesses the list of ArtifactItems and unpacks them to the provided directory. */ - protected ArrayList getArtifactItems() throws MojoExecutionException { + protected void unpackArtifacts(File unpackDirectory, String classifier) + throws MojoExecutionException { + + Iterator it = artifactItems.iterator(); + while (it.hasNext()) { + ArtifactItem artifactItem = (ArtifactItem) it.next(); + artifactItem.setClassifier(classifier); - Iterator iter = artifactItems.iterator(); - while (iter.hasNext()) { - ArtifactItem artifactItem = (ArtifactItem) iter.next(); getLog().debug("Configured artifact: " + artifactItem.toString()); if (artifactItem.getOutputDirectory() == null) { - artifactItem.setOutputDirectory(getUnpackDirectory()); + artifactItem.setOutputDirectory(unpackDirectory); } artifactItem.getOutputDirectory().mkdirs(); + unpackArtifact(artifactItem); + } + } + + /** + * Creates a filtered aggregated jar file from unpacked artifacts. + */ + protected void packAggregatedArtifact( + File unpackDirectory, + String finalName, + String classifier, + File excludesFile, + File includesFile) throws MojoExecutionException { + + if (classifier != null) { + finalName += "-" + classifier; + } + + File outputDirectory = new File(project.getBuild().getDirectory()); + File destinationFile = new File(outputDirectory, finalName + ".jar"); + + JarArchiver jarArchiver; + try { + jarArchiver = (JarArchiver) archiverManager.getArchiver("jar"); + } + catch (NoSuchArchiverException e) { + throw new MojoExecutionException("Unknown archiver type", e); + } + + PatternGroup excludes = new PatternGroup(excludesFile); + excludes.addPatterns(DEFAULT_EXCLUDES); + + PatternGroup includes = new PatternGroup(includesFile); + if (includes.size() == 0) { + includes.addPatterns(new String[] { + "**/**" + }); + } + + // MavenArchiver adds Maven stuff into META-INF + MavenArchiver archiver = new MavenArchiver(); + archiver.setArchiver(jarArchiver); + archiver.setOutputFile(destinationFile); + + MavenArchiveConfiguration archive = new MavenArchiveConfiguration(); + + try { + if (!unpackDirectory.exists()) { + getLog().warn("Jar will be empty, no unpack directory."); + } + else { + archiver.getArchiver().addDirectory( + unpackDirectory, + includes.getPatterns(), + excludes.getPatterns()); + } + + archiver.createArchive(project, archive); + } + catch (Exception e) { + throw new MojoExecutionException("Error assembling JAR", e); + } + + if (classifier == null) { + project.getArtifact().setFile(destinationFile); + } + else { + projectHelper.attachArtifact(project, "jar", classifier, destinationFile); } - return artifactItems; } /** * Resolves the Artifact from the remote repository if nessessary. If no version is * specified, it will be retrieved from the DependencyManagement section of the pom. - * - * @param artifactItem containing information about artifact from plugin - * configuration. - * @return Artifact object representing the specified file. - * @throws MojoExecutionException with a message if the version can't be found in - * DependencyManagement. */ - protected Artifact getArtifact(ArtifactItem artifactItem) - throws MojoExecutionException { + private Artifact getArtifact(ArtifactItem artifactItem) throws MojoExecutionException { Artifact artifact; if (artifactItem.getVersion() == null) { @@ -219,13 +294,9 @@ } /** - * This method gets the Artifact object and calls DependencyUtil.unpackFile. - * - * @param artifactItem containing the information about the Artifact to unpack. - * @throws MojoExecutionException with a message if an error occurs. + * Unpacks an artifact item. */ - protected void unpackArtifact(ArtifactItem artifactItem) - throws MojoExecutionException { + private void unpackArtifact(ArtifactItem artifactItem) throws MojoExecutionException { Artifact artifact = getArtifact(artifactItem); File location = artifactItem.getOutputDirectory(); Modified: incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/BinAggregatorMojo.java URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/BinAggregatorMojo.java?view=diff&rev=490118&r1=490117&r2=490118 ============================================================================== --- incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/BinAggregatorMojo.java (original) +++ incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/BinAggregatorMojo.java Mon Dec 25 01:07:18 2006 @@ -1,14 +1,8 @@ package org.apache.cayenne.maven.plugin.aggregator; import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import org.apache.maven.archiver.MavenArchiveConfiguration; -import org.apache.maven.archiver.MavenArchiver; import org.apache.maven.plugin.MojoExecutionException; -import org.codehaus.plexus.archiver.jar.JarArchiver; -import org.codehaus.plexus.archiver.manager.NoSuchArchiverException; /** * A goal to build aggregated jar artifacts from multiple other artifacts. @@ -20,11 +14,6 @@ */ public class BinAggregatorMojo extends AbstractAggregatorMojo { - // by default exclude maven entries from otehr jars and overlapping manifests - static final String[] DEFAULT_EXCLUDES = new String[] { - "META-INF/maven/**", "META-INF/MANIFEST.MF" - }; - /** * Default location used for mojo unless overridden in ArtifactItem * @@ -56,71 +45,13 @@ */ private File includesFile; - protected File getUnpackDirectory() { - return unpackDirectory; - } - public void execute() throws MojoExecutionException { - ArrayList artifactItems = getArtifactItems(); - Iterator iter = artifactItems.iterator(); - while (iter.hasNext()) { - ArtifactItem artifactItem = (ArtifactItem) iter.next(); - unpackArtifact(artifactItem); - } - - File file = packArtifact(); - getLog().warn("created jar " + file.getAbsolutePath()); - project.getArtifact().setFile(file); - } - - private File packArtifact() throws MojoExecutionException { - - File outputDirectory = new File(project.getBuild().getDirectory()); - File destinationFile = new File(outputDirectory, finalName + ".jar"); - - JarArchiver jarArchiver; - try { - jarArchiver = (JarArchiver) archiverManager.getArchiver("jar"); - } - catch (NoSuchArchiverException e) { - throw new MojoExecutionException("Unknown archiver type", e); - } - - PatternGroup excludes = new PatternGroup(excludesFile); - excludes.addPatterns(DEFAULT_EXCLUDES); - - PatternGroup includes = new PatternGroup(includesFile); - if (includes.size() == 0) { - includes.addPatterns(new String[] { - "**/**" - }); - } - - // MavenArchiver adds Maven stuff into META-INF - MavenArchiver archiver = new MavenArchiver(); - archiver.setArchiver(jarArchiver); - archiver.setOutputFile(destinationFile); - - MavenArchiveConfiguration archive = new MavenArchiveConfiguration(); - - try { - File contentDirectory = getUnpackDirectory(); - if (!contentDirectory.exists()) { - getLog().warn("JAR will be empty - no content was marked for inclusion!"); - } - else { - archiver.getArchiver().addDirectory( - contentDirectory, - includes.getPatterns(), - excludes.getPatterns()); - } - - archiver.createArchive(project, archive); - } - catch (Exception e) { - throw new MojoExecutionException("Error assembling JAR", e); - } - - return destinationFile; + unpackArtifacts(unpackDirectory, null); + packAggregatedArtifact( + unpackDirectory, + finalName, + null, + excludesFile, + includesFile); } } Modified: incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/SourcesAggregatorMojo.java URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/SourcesAggregatorMojo.java?view=diff&rev=490118&r1=490117&r2=490118 ============================================================================== --- incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/SourcesAggregatorMojo.java (original) +++ incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/SourcesAggregatorMojo.java Mon Dec 25 01:07:18 2006 @@ -40,11 +40,35 @@ */ private File unpackDirectory; - protected File getUnpackDirectory() { - return unpackDirectory; - } + /** + * Name of the generated JAR. + * + * @parameter expression="${project.build.finalName}" + * @required + */ + private String finalName; + + /** + * A file that contains excludes patterns. + * + * @parameter + */ + private File excludesFile; + + /** + * A file that contains includes patterns. + * + * @parameter + */ + private File includesFile; public void execute() throws MojoExecutionException, MojoFailureException { - // TODO + unpackArtifacts(unpackDirectory, "sources"); + packAggregatedArtifact( + unpackDirectory, + finalName, + "sources", + excludesFile, + includesFile); } } Copied: incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/util/PatternGroup.java (from r490115, incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/PatternGroup.java) URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/util/PatternGroup.java?view=diff&rev=490118&p1=incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/PatternGroup.java&r1=490115&p2=incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/util/PatternGroup.java&r2=490118 ============================================================================== --- incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/aggregator/PatternGroup.java (original) +++ incubator/cayenne/main/trunk/other/build-maven-plugin/src/main/java/org/apache/cayenne/maven/plugin/util/PatternGroup.java Mon Dec 25 01:07:18 2006 @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.maven.plugin.aggregator; +package org.apache.cayenne.maven.plugin.util; import java.io.BufferedReader; import java.io.File;