1 package org.apache.tomcat.maven.plugin.tomcat7.deploy;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import org.apache.maven.plugin.MojoExecutionException;
23 import org.apache.tomcat.maven.common.deployer.TomcatManagerException;
24 import org.apache.tomcat.maven.plugin.tomcat7.AbstractWarCatalinaMojo;
25
26 import java.io.File;
27 import java.io.IOException;
28 import java.net.URL;
29
30 /**
31 * Deploy a WAR to Tomcat.
32 *
33 * @author Mark Hobson <markhobson@gmail.com>
34 * @version $Id: AbstractDeployMojo.html 1305321 2012-03-26 12:01:12Z olamy $
35 */
36 public abstract class AbstractDeployMojo
37 extends AbstractWarCatalinaMojo
38 {
39 // ----------------------------------------------------------------------
40 // Mojo Parameters
41 // ----------------------------------------------------------------------
42
43 /**
44 * The deployment mode to use. This must be either <code>war</code> to deploy the war, <code>context</code> to
45 * deploy the context XML file, or <code>both</code> to deploy the war with the context XML file.
46 *
47 * @parameter expression = "${maven.tomcat.mode}" default-value = "war"
48 * @required
49 */
50 private String mode;
51
52 /**
53 * The path of the Tomcat context XML file. This is not used for war deployment mode.
54 *
55 * @parameter expression = "${project.build.directory}/${project.build.finalName}/META-INF/context.xml"
56 */
57 private File contextFile;
58
59 /**
60 * Whether Tomcat should automatically undeploy webapps that already exist when deploying.
61 *
62 * @parameter expression = "${maven.tomcat.update}" default-value = "false"
63 * @required
64 */
65 private boolean update;
66
67 /**
68 * The Tomcat webapp tag name to use.
69 *
70 * @parameter expression = "${maven.tomcat.tag}"
71 */
72 private String tag;
73
74 // ----------------------------------------------------------------------
75 // Protected Methods
76 // ----------------------------------------------------------------------
77
78 /**
79 * {@inheritDoc}
80 */
81 @Override
82 public void invokeManager()
83 throws MojoExecutionException, TomcatManagerException, IOException
84 {
85 if ( "war".equals( mode ) )
86 {
87 deployWar();
88 }
89 else if ( "context".equals( mode ) )
90 {
91 deployContext();
92 }
93 else if ( "both".equals( mode ) )
94 {
95 deployWarAndContext();
96 }
97 else
98 {
99 throw new MojoExecutionException( messagesProvider.getMessage( "AbstractDeployMojo.unknownMode", mode ) );
100 }
101 }
102
103 /**
104 * Gets the Tomcat WAR file. This may be a file or a directory depending on the deployment mode.
105 *
106 * @return the Tomcat WAR file.
107 */
108 protected abstract File getWarFile();
109
110 /**
111 * Ensures that the Tomcat WAR file exists and is the correct type for the deployment mode.
112 *
113 * @throws org.apache.maven.plugin.MojoExecutionException
114 * if the WAR file does not exist or is not the correct type for the deployment mode
115 */
116 protected abstract void validateWarFile()
117 throws MojoExecutionException;
118
119 /**
120 * Gets the Tomcat context XML file.
121 *
122 * @return the Tomcat context XML file.
123 */
124 protected File getContextFile()
125 {
126 return contextFile;
127 }
128
129 /**
130 * Ensures that the Tomcat context XML file exists and is indeed a file.
131 *
132 * @throws org.apache.maven.plugin.MojoExecutionException
133 * if the context file does not exist or is not a file
134 */
135 protected void validateContextFile()
136 throws MojoExecutionException
137 {
138 if ( !contextFile.exists() || !contextFile.isFile() )
139 {
140 throw new MojoExecutionException(
141 messagesProvider.getMessage( "AbstractDeployMojo.missingContext", contextFile.getPath() ) );
142 }
143 }
144
145 /**
146 * Gets whether Tomcat should automatically undeploy webapps that already exist when deploying.
147 *
148 * @return whether Tomcat should automatically undeploy webapps that already exist when deploying
149 */
150 protected boolean isUpdate()
151 {
152 return update;
153 }
154
155 /**
156 * Gets the Tomcat webapp tag name to use.
157 *
158 * @return the Tomcat webapp tag name to use
159 */
160 protected String getTag()
161 {
162 return tag;
163 }
164
165 /**
166 * Deploys the WAR to Tomcat.
167 *
168 * @throws org.apache.maven.plugin.MojoExecutionException
169 * if there was a problem locating the WAR
170 * @throws org.apache.tomcat.maven.common.deployer.TomcatManagerException
171 * if the Tomcat manager request fails
172 * @throws java.io.IOException if an i/o error occurs
173 */
174 protected void deployWar()
175 throws MojoExecutionException, TomcatManagerException, IOException
176 {
177 validateWarFile();
178
179 getLog().info( messagesProvider.getMessage( "AbstractDeployMojo.deployingWar", getDeployedURL() ) );
180
181 URL warURL = getWarFile().toURL();
182 log( getManager().deploy( getPath(), warURL, isUpdate(), getTag() ).getHttpResponseBody() );
183 }
184
185 /**
186 * Deploys the context XML file to Tomcat.
187 *
188 * @throws org.apache.maven.plugin.MojoExecutionException
189 * if there was a problem locating the context XML file
190 * @throws org.apache.tomcat.maven.common.deployer.TomcatManagerException
191 * if the Tomcat manager request fails
192 * @throws java.io.IOException if an i/o error occurs
193 */
194 protected void deployContext()
195 throws MojoExecutionException, TomcatManagerException, IOException
196 {
197 validateContextFile();
198
199 getLog().info( messagesProvider.getMessage( "AbstractDeployMojo.deployingContext", getDeployedURL() ) );
200
201 URL contextURL = getContextFile().toURL();
202 log( getManager().deployContext( getPath(), contextURL, isUpdate(), getTag() ).getHttpResponseBody() );
203 }
204
205 /**
206 * Deploys the WAR and context XML file to Tomcat.
207 *
208 * @throws org.apache.maven.plugin.MojoExecutionException
209 * if there was a problem locating either the WAR or the context XML file
210 * @throws org.apache.tomcat.maven.common.deployer.TomcatManagerException
211 * if the Tomcat manager request fails
212 * @throws java.io.IOException if an i/o error occurs
213 */
214 protected void deployWarAndContext()
215 throws MojoExecutionException, TomcatManagerException, IOException
216 {
217 validateWarFile();
218 validateContextFile();
219
220 getLog().info( messagesProvider.getMessage( "AbstractDeployMojo.deployingWarContext", getDeployedURL() ) );
221
222 URL warURL = getWarFile().toURL();
223 URL contextURL = getContextFile().toURL();
224 log( getManager().deployContext( getPath(), contextURL, warURL, isUpdate(), getTag() ).getHttpResponseBody() );
225 }
226 }