this is similar to what I've read in that book "definitive guide". can it be
published to codehaus or maven repository?

On 10/9/07, Tom Huybrechts <[EMAIL PROTECTED]> wrote:
>
> On 10/8/07, Yan Huang <[EMAIL PROTECTED]> wrote:
> > Hello,
> >
> > I have these requirements to package a module:
> >
> >    - it's group ID is different from what I have at the top level
> >    - no compilation or test is required
> >    - it just needs to be packaged in "zip" format
> >    - it needs to be deployed to a maven2 repository as part of deploy
> >    phase
> >
> > Do you think I need to separate this module out from the overall package
> > because of different group ID? If I need to build it separately, what's
> > going to be the "packaging" type? Maven does not support "zip" packaging
> > type though, and I don't want an empty jar being created in order to
> attach
> > "zip" file in the "package" phase by using assembly plugin.
> >
> > Any thoughts or suggestions?
> >
> > Thanks
> > Yan
> >
>
> Creating a plugin that provides a ZIP packaging is not that hard:
>
> Use this mojo:
>
> ================
>
> import java.io.File;
>
> 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.zip.ZipArchiver;
>
> /**
> * Creates a zip from the output directory, and sets it as the project
> artifact.
> *
> * @goal zip
> * @phase package
> * @requiresProject true
> */
> public class ZipMojo extends AbstractMojo {
>
>    public static final String[] DEFAULT_EXCLUDES = {
>        // Miscellaneous typical temporary files
>        "**/*~",
>        "**/#*#",
>        "**/.#*",
>        "**/%*%",
>        "**/._*",
>
>        // CVS
>        "**/CVS",
>        "**/CVS/**",
>        "**/.cvsignore",
>
>        // SCCS
>        "**/SCCS",
>        "**/SCCS/**",
>
>        // Visual SourceSafe
>        "**/vssver.scc",
>
>        // Subversion
>        "**/.svn",
>        "**/.svn/**",
>
>        // Arch/Bazaar
>        "**/.arch-ids", "**/.arch-ids/**",
>
>        // Mac
>        "**/.DS_Store"
>    };
>
>    private static final String[] DEFAULT_INCLUDES = new String[]{"**/**"};
>
>    /**
>     * Directory containing the generated ZIP.
>     *
>     * @parameter expression="${project.build.directory}"
>     * @required
>     */
>    private File outputDirectory;
>
>    /**
>     * Name of the generated ZIP.
>     *
>     * @parameter alias="zipName" expression="${project.build.finalName}"
>     * @required
>     */
>    private String finalName;
>
>    /**
>     * The Jar archiver.
>     *
>     * @parameter
> expression="${component.org.codehaus.plexus.archiver.Archiver#zip}"
>     * @required
>     */
>    private ZipArchiver zipArchiver;
>
>    /**
>     * The maven project.
>     *
>     * @parameter expression="${project}"
>     * @required
>     * @readonly
>     */
>    private MavenProject project;
>
>    /**
>     * @component
>     */
>    private MavenProjectHelper projectHelper;
>
>    /**
>     * Whether creating the archive should be forced.
>     * @parameter expression="${jar.forceCreation}" default-value="false"
>     */
>    private boolean forceCreation;
>
>    /**
>     * Directory containing the classes.
>     *
>     * @parameter expression="${project.build.outputDirectory}"
>     * @required
>     */
>    private File classesDirectory;
>
>    /**
>     * Classifier to add to the artifact generated. If given, the
> artifact will be an attachment instead.
>     *
>     * @parameter
>     */
>    private String classifier;
>
>    protected String getClassifier()
>    {
>        return classifier;
>    }
>
>    /**
>     * Return the main classes directory, so it's used as the root of the
> jar.
>     */
>    protected File getClassesDirectory()
>    {
>        return classesDirectory;
>    }
>
>
>    protected final MavenProject getProject()
>    {
>        return project;
>    }
>
>    protected static File getZipFile( 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 + ".zip" );
>    }
>
>    /**
>     * Generates the ZIP.
>     *
>     * @todo Add license files in META-INF directory.
>     */
>    public File createArchive()
>        throws MojoExecutionException
>    {
>        File zipFile = getZipFile( outputDirectory, finalName,
> getClassifier() );
>
>        try
>        {
>            File contentDirectory = getClassesDirectory();
>            if ( !contentDirectory.exists() )
>            {
>                getLog().warn( "ZIP will be empty - no content was
> marked for inclusion!" );
>            }
>            else
>            {
>                zipArchiver.addDirectory( contentDirectory,
> DEFAULT_INCLUDES, DEFAULT_EXCLUDES );
>            }
>
>            zipArchiver.setForced(forceCreation);
>            zipArchiver.setDestFile(zipFile);
>            zipArchiver.createArchive();
>
>
>            return zipFile;
>        }
>        catch ( Exception e )
>        {
>            throw new MojoExecutionException( "Error assembling ZIP", e );
>        }
>    }
>
>    /**
>     * Generates the ZIP.
>     *
>     * @todo Add license files in META-INF directory.
>     */
>    public void execute()
>        throws MojoExecutionException
>    {
>        File zipFile = createArchive();
>
>        String classifier = getClassifier();
>        if ( classifier != null )
>        {
>            projectHelper.attachArtifact( getProject(), "zip",
> classifier, zipFile );
>        }
>        else
>        {
>            getProject().getArtifact().setFile( zipFile );
>        }
>    }
> }
>
> ==================
>
> and put this in META-INF\plexus\components.xml:
>
> <component-set>
>        <components>
>                <component>
>
> <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
>                        <role-hint>zip</role-hint>
>                        <implementation>
>
> org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
>                        </implementation>
>                        <configuration>
>                                <phases>
>                                        <process-resources>
>
> org.apache.maven.plugins:maven-resources-plugin:resources
>                                        </process-resources>
>
> <package>groupId:maven-zip-plugin:zip</package>
>
> <install>org.apache.maven.plugins:maven-install-plugin:install</install>
>
> <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
>                                </phases>
>                        </configuration>
>                </component>
>                <component>
>
> <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
>                        <role-hint>zip</role-hint>
>                        <implementation>
>
> org.apache.maven.artifact.handler.DefaultArtifactHandler
>                        </implementation>
>                        <configuration>
>                                <extension>zip</extension>
>                                <type>zip</type>
>                                <packaging>zip</packaging>
>                                <addedToClasspath>false</addedToClasspath>
>
> <includesDependencies>true</includesDependencies>
>                        </configuration>
>                </component>
>        </components>
> </component-set>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to