View Javadoc

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                  /* AMP Files do not have a classes folder  */
33                  generateJarArchive( context );
34  
35      }
36  
37      protected void generateJarArchive( AmpPackagingContext context )
38          throws MojoExecutionException
39      {
40          //TODO use ArtifactFactory and resolve the final name the usual way instead
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  }