You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by fg...@apache.org on 2006/04/17 15:58:01 UTC

svn commit: r394668 - /maven/plugins/trunk/maven-repository-plugin/src/main/java/org/apache/maven/plugins/repository/BundlePackMojo.java

Author: fgiust
Date: Mon Apr 17 06:58:00 2006
New Revision: 394668

URL: http://svn.apache.org/viewcvs?rev=394668&view=rev
Log:
simple mojo that can be used to generate upload bundles for artifacts already available in the local maven repo

Added:
    maven/plugins/trunk/maven-repository-plugin/src/main/java/org/apache/maven/plugins/repository/BundlePackMojo.java   (with props)

Added: maven/plugins/trunk/maven-repository-plugin/src/main/java/org/apache/maven/plugins/repository/BundlePackMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-repository-plugin/src/main/java/org/apache/maven/plugins/repository/BundlePackMojo.java?rev=394668&view=auto
==============================================================================
--- maven/plugins/trunk/maven-repository-plugin/src/main/java/org/apache/maven/plugins/repository/BundlePackMojo.java (added)
+++ maven/plugins/trunk/maven-repository-plugin/src/main/java/org/apache/maven/plugins/repository/BundlePackMojo.java Mon Apr 17 06:58:00 2006
@@ -0,0 +1,297 @@
+package org.apache.maven.plugins.repository;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+import org.apache.maven.artifact.resolver.ArtifactResolver;
+import org.apache.maven.model.License;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.codehaus.plexus.archiver.ArchiverException;
+import org.codehaus.plexus.archiver.jar.JarArchiver;
+import org.codehaus.plexus.components.interactivity.InputHandler;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+/**
+ * Packs artifacts already available in a local repository in a bundle for upload requests. It will require an existing
+ * POM in the local repository, and it will check for mandatory elements, asking interactively for missing values.
+ * Can be used to generate bundles for third parties artifacts that have been manually added to the local repository.
+ *
+ * @goal bundle-pack
+ * @requiresProject false
+ */
+public class BundlePackMojo
+    extends AbstractMojo
+{
+    public static final String POM = "pom.xml";
+
+    /**
+     * @parameter expression="${component.org.codehaus.plexus.archiver.Archiver#jar}"
+     */
+    private JarArchiver jarArchiver;
+
+    /**
+     * Artifact resolver.
+     * 
+     * @component role="org.apache.maven.artifact.resolver.ArtifactResolver"
+     * @required
+     * @readonly
+     */
+    private ArtifactResolver artifactResolver;
+
+    /**
+     * Artifact factory.
+     * 
+     * @component role="org.apache.maven.artifact.factory.ArtifactFactory"
+     * @required
+     * @readonly
+     */
+    protected ArtifactFactory artifactFactory;
+
+    /**
+     * Local maven repository.
+     * 
+     * @parameter expression="${localRepository}"
+     * @required
+     * @readonly
+     */
+    protected ArtifactRepository localRepository;
+
+    /**
+     * @parameter expression="${groupId}"
+     */
+    private String groupId;
+
+    /**
+     * @parameter expression="${artifactId}"
+     */
+    private String artifactId;
+
+    /**
+     * @parameter expression="${version}"
+     */
+    private String version;
+
+    /**
+     * @component
+     */
+    private InputHandler inputHandler;
+
+    /**
+     * @parameter expression="${basedir}"
+     */
+    private String basedir;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        try
+        {
+            if ( groupId == null )
+            {
+                getLog().info( "groupId? " );
+
+                groupId = inputHandler.readLine();
+
+            }
+
+            if ( artifactId == null )
+            {
+                getLog().info( "artifactId? " );
+                artifactId = inputHandler.readLine();
+            }
+
+            if ( version == null )
+            {
+                getLog().info( "version? " );
+                version = inputHandler.readLine();
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( e.getMessage(), e );
+        }
+
+        Artifact artifact = artifactFactory.createProjectArtifact( groupId, artifactId, version );
+
+        try
+        {
+            artifactResolver.resolve( artifact, Collections.EMPTY_LIST, localRepository );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            throw new MojoExecutionException( "Unable to resolve artifact " + artifact.getId(), e );
+        }
+        catch ( ArtifactNotFoundException e )
+        {
+            throw new MojoExecutionException( "Artifact " + artifact.getId() + " not found in local repository", e );
+        }
+
+        File pom = artifact.getFile();
+
+        File dir = pom.getParentFile();
+
+        Model model;
+        try
+        {
+            model = new MavenXpp3Reader().read( new FileReader( pom ) );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new MojoExecutionException(
+                                              "Unable to parse pom at " + pom.getAbsolutePath() + ": " + e.getMessage(),
+                                              e );
+        }
+        catch ( FileNotFoundException e )
+        {
+            throw new MojoExecutionException( "Unable to read pom at " + pom.getAbsolutePath() + ": " + e.getMessage(),
+                                              e );
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( "Unable to read pom at " + pom.getAbsolutePath() + ": " + e.getMessage(),
+                                              e );
+        }
+
+        boolean rewrite = false;
+        try
+        {
+
+            if ( model.getName() == null )
+            {
+                getLog().info( "Project name is missing, please type the project name [" + artifactId + "]:" );
+                model.setName( inputHandler.readLine() );
+                if ( model.getName() == null )
+                {
+                    model.setName( artifactId );
+                }
+                rewrite = true;
+            }
+            if ( model.getUrl() == null )
+            {
+                getLog().info( "Project Url is missing, please type the project URL:" );
+                model.setUrl( inputHandler.readLine() );
+                rewrite = true;
+            }
+            if ( model.getPackaging() == null )
+            {
+                model.setPackaging( "jar" );
+                rewrite = true;
+            }
+            if ( model.getDescription() == null )
+            {
+                getLog().info( "Project Description is missing, please type the project Description:" );
+                model.setDescription( inputHandler.readLine() );
+                rewrite = true;
+            }
+
+            List licenses = model.getLicenses();
+            if ( licenses.isEmpty() )
+            {
+                License license = new License();
+
+                getLog().info( "License name is missing, please type the license name:" );
+                license.setName( inputHandler.readLine() );
+                getLog().info( "License URL is missing, please type the license URL:" );
+                license.setUrl( inputHandler.readLine() );
+                licenses.add( license );
+                rewrite = true;
+            }
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( e.getMessage(), e );
+        }
+
+        try
+        {
+
+            if ( rewrite )
+            {
+                new MavenXpp3Writer().write( new FileWriter( pom ), model );
+            }
+
+            String finalName = null;
+
+            if ( model.getBuild() != null )
+            {
+                finalName = model.getBuild().getFinalName();
+            }
+            if ( finalName == null )
+            {
+                finalName = model.getArtifactId() + "-" + model.getVersion();
+            }
+
+            File mainArtifact = new File( dir, finalName + "." + model.getPackaging() );
+            File sourceArtifact = new File( dir, finalName + "-sources.jar" );
+            File javadocArtifact = new File( dir, finalName + "-javadoc.jar" );
+            File bundle = new File( basedir, finalName + "-bundle.jar" );
+
+            jarArchiver.addFile( pom, POM );
+
+            jarArchiver.addFile( mainArtifact, mainArtifact.getName() );
+
+            if ( sourceArtifact.exists() )
+            {
+                jarArchiver.addFile( sourceArtifact, sourceArtifact.getName() );
+            }
+            else
+            {
+                getLog().warn( "Sources not included in upload bundle." );
+            }
+
+            if ( javadocArtifact.exists() )
+            {
+                jarArchiver.addFile( javadocArtifact, javadocArtifact.getName() );
+            }
+            else
+            {
+                getLog().warn( "Javadoc not included in upload bundle." );
+            }
+
+            jarArchiver.setDestFile( bundle );
+
+            jarArchiver.createArchive();
+
+        }
+        catch ( IOException e )
+        {
+            throw new MojoExecutionException( e.getMessage(), e );
+        }
+        catch ( ArchiverException e )
+        {
+            throw new MojoExecutionException( e.getMessage(), e );
+        }
+
+    }
+
+}

Propchange: maven/plugins/trunk/maven-repository-plugin/src/main/java/org/apache/maven/plugins/repository/BundlePackMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-repository-plugin/src/main/java/org/apache/maven/plugins/repository/BundlePackMojo.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision