1 //
2 // ========================================================================
3 // Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
4 // ------------------------------------------------------------------------
5 // All rights reserved. This program and the accompanying materials
6 // are made available under the terms of the Eclipse Public License v1.0
7 // and Apache License v2.0 which accompanies this distribution.
8 //
9 // The Eclipse Public License is available at
10 // http://www.eclipse.org/legal/epl-v10.html
11 //
12 // The Apache License v2.0 is available at
13 // http://www.opensource.org/licenses/apache2.0.php
14 //
15 // You may elect to redistribute this code under either of these licenses.
16 // ========================================================================
17 //
18
19 package org.eclipse.jetty.maven.plugin;
20
21 import java.io.File;
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.apache.maven.plugin.MojoExecutionException;
26 import org.apache.maven.plugin.MojoFailureException;
27 import org.eclipse.jetty.util.Scanner;
28
29 /**
30 * <p>
31 * This goal is used to assemble your webapp into a war and automatically deploy it to Jetty.
32 * </p>
33 * <p>
34 * Once invoked, the plugin can be configured to run continuously, scanning for changes in the project and to the
35 * war file and automatically performing a
36 * hot redeploy when necessary.
37 * </p>
38 * <p>
39 * You may also specify the location of a jetty.xml file whose contents will be applied before any plugin configuration.
40 * This can be used, for example, to deploy a static webapp that is not part of your maven build.
41 * </p>
42 * <p>
43 * There is a <a href="run-war-mojo.html">reference guide</a> to the configuration parameters for this plugin, and more detailed information
44 * with examples in the <a href="http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin/">Configuration Guide</a>.
45 * </p>
46 *
47 * @goal run-war
48 * @requiresDependencyResolution compile+runtime
49 * @execute phase="package"
50 * @description Runs jetty on a war file
51 *
52 */
53 public class JettyRunWarMojo extends AbstractJettyMojo
54 {
55
56 /**
57 * The location of the war file.
58 * @parameter expression="${project.build.directory}/${project.build.finalName}.war"
59 * @required
60 */
61 private File war;
62
63
64 /**
65 * @see org.apache.maven.plugin.Mojo#execute()
66 */
67 public void execute() throws MojoExecutionException, MojoFailureException
68 {
69 super.execute();
70 }
71
72
73
74
75 public void configureWebApplication () throws Exception
76 {
77 super.configureWebApplication();
78
79 webApp.setWar(war.getCanonicalPath());
80 }
81
82
83
84
85 /**
86 * @see org.mortbay.jetty.plugin.AbstractJettyMojo#checkPomConfiguration()
87 */
88 public void checkPomConfiguration() throws MojoExecutionException
89 {
90 return;
91 }
92
93
94
95
96 /**
97 * @see org.eclipse.jetty.server.plugin.AbstractJettyMojo#configureScanner()
98 */
99 public void configureScanner() throws MojoExecutionException
100 {
101 scanList = new ArrayList();
102 scanList.add(project.getFile());
103 scanList.add(war);
104
105 scannerListeners = new ArrayList();
106 scannerListeners.add(new Scanner.BulkListener()
107 {
108 public void filesChanged(List changes)
109 {
110 try
111 {
112 boolean reconfigure = changes.contains(project.getFile().getCanonicalPath());
113 restartWebApp(reconfigure);
114 }
115 catch (Exception e)
116 {
117 getLog().error("Error reconfiguring/restarting webapp after change in watched files",e);
118 }
119 }
120 });
121 }
122
123
124
125
126 /**
127 * @see org.eclipse.jetty.maven.plugin.AbstractJettyMojo#restartWebApp(boolean)
128 */
129 public void restartWebApp(boolean reconfigureScanner) throws Exception
130 {
131 getLog().info("Restarting webapp ...");
132 getLog().debug("Stopping webapp ...");
133 webApp.stop();
134 getLog().debug("Reconfiguring webapp ...");
135
136 checkPomConfiguration();
137
138 // check if we need to reconfigure the scanner,
139 // which is if the pom changes
140 if (reconfigureScanner)
141 {
142 getLog().info("Reconfiguring scanner after change to pom.xml ...");
143 scanList.clear();
144 scanList.add(project.getFile());
145 scanList.add(war);
146 scanner.setScanDirs(scanList);
147 }
148
149 getLog().debug("Restarting webapp ...");
150 webApp.start();
151 getLog().info("Restart completed.");
152 }
153
154 }