1 package org.alfresco.maven.plugin.amp.packaging;
2
3 import org.apache.maven.archiver.MavenArchiver;
4 import org.apache.maven.artifact.DependencyResolutionRequiredException;
5 import org.apache.maven.plugin.MojoExecutionException;
6 import org.alfresco.maven.plugin.amp.Overlay;
7 import org.codehaus.plexus.archiver.ArchiverException;
8 import org.codehaus.plexus.archiver.jar.ManifestException;
9
10 import java.io.File;
11 import java.io.IOException;
12
13 /***
14 * Handles the classes directory that needs to be packaged in the web application.
15 * <p/>
16 * Based on the {@link AmpPackagingContext#archiveClasses()} flag the resources
17 * either copied into to <tt>WEB-INF/classes</tt> directory or archived in a jar
18 * within the <tt>WEB-INF/lib</tt> directory.
19 *
20 * @author Stephane Nicoll
21 */
22 public class ClassesPackagingTask
23 extends AbstractAmpPackagingTask
24 {
25
26 private static final String LIB_PATH = "lib/";
27
28 public void performPackaging( AmpPackagingContext context )
29 throws MojoExecutionException
30 {
31
32
33 generateJarArchive( context );
34
35 }
36
37 protected void generateJarArchive( AmpPackagingContext context )
38 throws MojoExecutionException
39 {
40
41 final String archiveName = context.getProject().getBuild().getFinalName() + ".jar";
42
43 final String targetFilename = LIB_PATH + archiveName;
44
45 if ( context.getAmpStructure().registerFile( Overlay.currentProjectInstance().getId(), targetFilename ) )
46 {
47
48 final File libDirectory = new File( context.getAmpDirectory(), LIB_PATH );
49 final File jarFile = new File( libDirectory, archiveName );
50
51 try
52 {
53 final MavenArchiver archiver = new MavenArchiver();
54 archiver.setArchiver( context.getJarArchiver() );
55 archiver.setOutputFile( jarFile );
56 archiver.getArchiver().addDirectory( context.getClassesDirectory(), context.getAmpJarIncludes(),
57 context.getAmpJarExcludes());
58 context.getLog().debug("Archiving AMP classes JAR with default excludes: " + context.getAmpJarExcludes());
59 archiver.createArchive( context.getProject(), context.getArchive() );
60 }
61 catch ( ArchiverException e )
62 {
63 throw new MojoExecutionException( "Could not create classes archive", e );
64 }
65 catch ( ManifestException e )
66 {
67 throw new MojoExecutionException( "Could not create classes archive", e );
68 }
69 catch ( IOException e )
70 {
71 throw new MojoExecutionException( "Could not create classes archive", e );
72 }
73 catch ( DependencyResolutionRequiredException e )
74 {
75 throw new MojoExecutionException( "Could not create classes archive", e );
76 }
77 }
78 else
79 {
80 context.getLog().warn(
81 "Could not generate archive classes file[" + targetFilename + "] has already been copied." );
82 }
83 }
84 }