1 //========================================================================
2 //$Id: Jetty6RunWar.java 3591 2008-09-03 21:31:12Z jesse $
3 //Copyright 2000-2004 Mort Bay Consulting Pty. Ltd.
4 //------------------------------------------------------------------------
5 //Licensed under the Apache License, Version 2.0 (the "License");
6 //you may not use this file except in compliance with the License.
7 //You may obtain a copy of the License at
8 //http://www.apache.org/licenses/LICENSE-2.0
9 //Unless required by applicable law or agreed to in writing, software
10 //distributed under the License is distributed on an "AS IS" BASIS,
11 //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 //See the License for the specific language governing permissions and
13 //limitations under the License.
14 //========================================================================
15
16 package org.mortbay.jetty.plugin;
17
18 import java.io.File;
19 import java.util.ArrayList;
20 import java.util.List;
21
22 import org.apache.maven.plugin.MojoExecutionException;
23 import org.apache.maven.plugin.MojoFailureException;
24 import org.mortbay.util.Scanner;
25
26 /**
27 * <p>
28 * This goal is used to assemble your webapp into a war and automatically deploy it to Jetty.
29 * </p>
30 * <p>
31 * Once invoked, the plugin can be configured to run continuously, scanning for changes in the project and to the
32 * war file and automatically performing a
33 * hot redeploy when necessary.
34 * </p>
35 * <p>
36 * You may also specify the location of a jetty.xml file whose contents will be applied before any plugin configuration.
37 * This can be used, for example, to deploy a static webapp that is not part of your maven build.
38 * </p>
39 * <p>
40 * There is a <a href="run-war-mojo.html">reference guide</a> to the configuration parameters for this plugin, and more detailed information
41 * with examples in the <a href="http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin/">Configuration Guide</a>.
42 * </p>
43 *
44 * @goal run-war
45 * @requiresDependencyResolution runtime
46 * @execute phase="package"
47 * @description Runs jetty6 on a war file
48 *
49 */
50 public class Jetty6RunWar extends AbstractJetty6Mojo
51 {
52
53 /**
54 * The location of the war file.
55 * @parameter expression="${project.build.directory}/${project.build.finalName}.war"
56 * @required
57 */
58 private File webApp;
59
60
61
62 /**
63 * @see org.apache.maven.plugin.Mojo#execute()
64 */
65 public void execute() throws MojoExecutionException, MojoFailureException
66 {
67 super.execute();
68 }
69
70
71
72 public void configureWebApplication () throws Exception
73 {
74 super.configureWebApplication();
75
76 webAppConfig.setWar(webApp.getCanonicalPath());
77 webAppConfig.configure();
78 }
79
80
81
82 /**
83 * @see org.mortbay.jetty.plugin.AbstractJettyMojo#checkPomConfiguration()
84 */
85 public void checkPomConfiguration() throws MojoExecutionException
86 {
87 return;
88 }
89
90
91
92 /* (non-Javadoc)
93 * @see org.mortbay.jetty.plugin.util.AbstractJettyMojo#configureScanner()
94 */
95 public void configureScanner() throws MojoExecutionException
96 {
97 final ArrayList scanList = new ArrayList();
98 scanList.add(getProject().getFile());
99 scanList.add(webApp);
100 setScanList(scanList);
101
102 ArrayList listeners = new ArrayList();
103 listeners.add(new Scanner.BulkListener()
104 {
105 public void filesChanged(List changes)
106 {
107 try
108 {
109 boolean reconfigure = changes.contains(getProject().getFile().getCanonicalPath());
110 restartWebApp(reconfigure);
111 }
112 catch (Exception e)
113 {
114 getLog().error("Error reconfiguring/restarting webapp after change in watched files",e);
115 }
116 }
117 });
118 setScannerListeners(listeners);
119
120 }
121
122
123
124
125 public void restartWebApp(boolean reconfigureScanner) throws Exception
126 {
127 getLog().info("Restarting webapp ...");
128 getLog().debug("Stopping webapp ...");
129 webAppConfig.stop();
130 getLog().debug("Reconfiguring webapp ...");
131
132 checkPomConfiguration();
133
134 // check if we need to reconfigure the scanner,
135 // which is if the pom changes
136 if (reconfigureScanner)
137 {
138 getLog().info("Reconfiguring scanner after change to pom.xml ...");
139 ArrayList scanList = getScanList();
140 scanList.clear();
141 scanList.add(getProject().getFile());
142 scanList.add(webApp);
143 setScanList(scanList);
144 getScanner().setScanDirs(scanList);
145 }
146
147 getLog().debug("Restarting webapp ...");
148 webAppConfig.start();
149 getLog().info("Restart completed.");
150 }
151
152
153 /**
154 * @see org.mortbay.jetty.plugin.AbstractJettyMojo#finishConfigurationBeforeStart()
155 */
156 public void finishConfigurationBeforeStart()
157 {
158 return;
159 }
160
161
162
163
164 }