package org.mortbay.jetty.openspaces.plugin; /*======================================================================== * $Id:$ * Copyright 2000-2008 Mort Bay Consulting Pty. Ltd. *------------------------------------------------------------------------ * 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.IOException; import java.util.Iterator; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.jar.JarArchiver; import org.codehaus.plexus.util.FileUtils; /* todo: * allow mechanism for specifying other artifacts to be included in the pu jar * artifact name that implies its a pu? * */ /** * Simple plugin that takes a bundled war file, a pu.xml file and the jetty dependencies of this plugin * itself to create an artifact suitable for deployment with os:deploy * * @goal generate-pu * @requiresDependencyResolution runtime * @phase package * @description Generates an openspaces PU for a war project */ public class JOSGeneratePUMojo extends AbstractMojo { /** * @parameter expression="${project.build.directory}/${project.artifactId}-${project.version}.war" */ private String warFile; /** * @parameter expression="src/main/openspaces/pu.xml" */ private String puXMLFile; /** * @parameter expression="${project.build.directory}/${project.artifactId}-${project.version}-pu" */ private String serverDirectory; /** * @parameter expression="${project.build.directory}/${project.artifactId}-${project.version}.jar" */ private String artifactName; /** * @parameter expression="${plugin.artifacts}" */ private java.util.List pluginArtifacts; /** * The Jar archiver. * * @parameter expression="${component.org.codehaus.plexus.archiver.Archiver#jar}" * @required */ private JarArchiver jarArchiver; /** * */ public void execute() throws MojoExecutionException, MojoFailureException { if ( puXMLFile == null || !FileUtils.fileExists( puXMLFile ) ) { throw new MojoExecutionException( "missing pu.xml file" ); } if ( warFile == null || !FileUtils.fileExists( warFile ) ) { throw new MojoExecutionException( "missing war file" ); } try { String puTargetDir = serverDirectory + File.separator + "META-INF" + File.separator + "spring"; String libTargetDir = serverDirectory + File.separator + "lib"; FileUtils.mkdir( serverDirectory ); FileUtils.mkdir( puTargetDir ); FileUtils.mkdir( libTargetDir ); FileUtils.copyFileToDirectory( new File( puXMLFile ), new File( puTargetDir ) ); FileUtils.copyFileToDirectory( new File( warFile ), new File( serverDirectory ) ); for (Iterator artifactIterator = pluginArtifacts.iterator(); artifactIterator.hasNext();) { Artifact artifact = (Artifact) artifactIterator.next(); if (artifact.getGroupId().equals("org.mortbay.jetty") ) { FileUtils.copyFileToDirectory( artifact.getFile().getPath(), libTargetDir ); } } jarArchiver.addDirectory( new File(serverDirectory) ); jarArchiver.setDestFile( new File(artifactName) ); jarArchiver.createArchive(); } catch ( IOException ioe ) { throw new MojoExecutionException( "unable to assemble",ioe ); } catch ( ArchiverException ae ) { throw new MojoExecutionException( "unable to assembly jar", ae ); } } }