View Javadoc

1   /* ***** BEGIN LICENSE BLOCK *****
2    * Version: MPL 1.1
3    *
4    * The contents of this file are subject to the Mozilla Public License Version
5    * 1.1 (the "License"); you may not use this file except in compliance with
6    * the License. You may obtain a copy of the License at
7    * http://www.mozilla.org/MPL/
8    *
9    * Software distributed under the License is distributed on an "AS IS" basis,
10   * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11   * for the specific language governing rights and limitations under the
12   * License.
13   *
14   * The Original Code is the maven-har-plugin.
15   *
16   * The Initial Developer of the Original Code is
17   * the Vermont Department of Taxes.
18   * Portions created by the Initial Developer are Copyright (C) 2007
19   * the Initial Developer. All Rights Reserved.
20   *
21   * Contributor(s):
22   *   Tom Cort <tom.cort@state.vt.us>
23   *
24   * ***** END LICENSE BLOCK ***** */
25  
26  package net.sf.mavenhar;
27  
28  import java.io.File;
29  
30  import org.apache.maven.archiver.MavenArchiveConfiguration;
31  import org.apache.maven.archiver.MavenArchiver;
32  
33  import org.apache.maven.plugin.AbstractMojo;
34  import org.apache.maven.plugin.MojoExecutionException;
35  
36  import org.apache.maven.project.MavenProject;
37  import org.apache.maven.project.MavenProjectHelper;
38  
39  import org.codehaus.plexus.archiver.jar.JarArchiver;
40  
41  /**
42   * Creates a Hibernate Archive.
43   * 
44   * @goal har
45   * @phase package
46   * @requiresDependencyResolution runtime
47   */
48  public class HarMojo extends AbstractMojo {
49  
50      /**
51       * The Project.
52       * 
53       * @parameter expression="${project}"
54       * @required
55       * @readonly
56       */
57      private MavenProject project;
58  
59      /**
60       * The Project Helper.
61       * 
62       * @component
63       */
64      private MavenProjectHelper helper;
65  
66      /**
67       * Archive Configuration.
68       * 
69       * @parameter
70       */
71      private MavenArchiveConfiguration archiveConfig = new MavenArchiveConfiguration();
72  
73      /**
74       * The JAR Archiver.
75       * 
76       * @parameter expression="${component.org.codehaus.plexus.archiver.Archiver#jar}"
77       * @required
78       */
79      private JarArchiver jarArchiver;
80  
81      /**
82       * Directory where the har file should be written to.
83       * 
84       * @parameter expression="${project.build.directory}"
85       * @required
86       */
87      private File targetDir;
88  
89      /**
90       * Directory containing the classes (usually target/classes).
91       * 
92       * @parameter expression="${project.build.outputDirectory}"
93       * @required
94       */
95      private File classesDir;
96  
97      /**
98       * Name of the generated HAR (without the ".har" extension).
99       * 
100      * @parameter expression="${project.build.finalName}"
101      * @required
102      */
103     private String targetFile;
104 
105     /**
106      * Classifier to add to the artifact generated.
107      * 
108      * @parameter
109      */
110     private String classifier;
111 
112     /**
113      * List of files to exclude from the HAR.
114      */
115     private static final String[] EXCLUDES = new String[] { "**/*.html" };
116 
117     /**
118      * List of files in include in the HAR.
119      */
120     private static final String[] INCLUDES = new String[] { "META-INF/jboss-service.xml", "**/*.xml", "**/*.class" };
121 
122     /**
123      * Executes the task. In this case, packages the har.
124      * 
125      * @throws MojoExecutionException
126      *         on archiver error.
127      */
128     public final void execute() throws MojoExecutionException {
129 
130         getLog().info("====== MAVEN-HAR-PLUGIN ======");
131         getLog().info("targetDir  [" + targetDir + "]");
132         getLog().info("targetFile [" + targetFile + ".har]");
133         getLog().info("classesDir [" + classesDir.toString() + "]");
134 
135         File har = new File(targetDir, targetFile + ".har");
136 
137         MavenArchiver archiver = new MavenArchiver();
138         archiver.setArchiver(jarArchiver);
139         archiver.setOutputFile(har);
140 
141         try {
142 
143             // Attempt to locale jboss-service.xml, fail if not found.
144             File jbossServiceXml = new File(classesDir.toString() + "/META-INF/jboss-service.xml");
145 
146             if (!jbossServiceXml.exists()) {
147                 String msg = classesDir.toString() + "/META-INF/jboss-service.xml was not found.";
148                 throw new MojoExecutionException(msg);
149             }
150 
151             archiver.getArchiver().addDirectory(classesDir, INCLUDES, EXCLUDES);
152             archiver.createArchive(project, archiveConfig);
153 
154             if (classifier == null) {
155                 project.getArtifact().setFile(har);
156             } else {
157                 helper.attachArtifact(project, "har", classifier, har);
158             }
159 
160         } catch (Exception e) {
161             throw new MojoExecutionException("Error packaging HAR", e);
162         }
163 
164         getLog().info("====== MAVEN-HAR-PLUGIN ======");
165     }
166 }