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]
>
>