View Javadoc

1   package org.apache.tomcat.maven.plugin.tomcat6;
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  
25  import java.io.File;
26  import java.io.IOException;
27  import java.net.URL;
28  
29  /**
30   * Deploy a WAR to Tomcat.
31   *
32   * @author Mark Hobson <markhobson@gmail.com>
33   * @version $Id: AbstractDeployMojo.html 1305321 2012-03-26 12:01:12Z olamy $
34   */
35  public abstract class AbstractDeployMojo
36      extends AbstractWarCatalinaMojo
37  {
38      // ----------------------------------------------------------------------
39      // Mojo Parameters
40      // ----------------------------------------------------------------------
41  
42      /**
43       * The deployment mode to use. This must be either <code>war</code> to deploy the war, <code>context</code> to
44       * deploy the context XML file, or <code>both</code> to deploy the war with the context XML file.
45       *
46       * @parameter expression = "${maven.tomcat.mode}" default-value = "war"
47       * @required
48       */
49      private String mode;
50  
51      /**
52       * The path of the Tomcat context XML file. This is not used for war deployment mode.
53       *
54       * @parameter expression = "${project.build.directory}/${project.build.finalName}/META-INF/context.xml"
55       */
56      private File contextFile;
57  
58      /**
59       * Whether Tomcat should automatically undeploy webapps that already exist when deploying.
60       *
61       * @parameter expression = "${maven.tomcat.update}" default-value = "false"
62       * @required
63       */
64      private boolean update;
65  
66      /**
67       * The Tomcat webapp tag name to use.
68       *
69       * @parameter expression = "${maven.tomcat.tag}"
70       */
71      private String tag;
72  
73      // ----------------------------------------------------------------------
74      // Protected Methods
75      // ----------------------------------------------------------------------
76  
77      /**
78       * {@inheritDoc}
79       */
80      @Override
81      public void invokeManager()
82          throws MojoExecutionException, TomcatManagerException, IOException
83      {
84          if ( "war".equals( mode ) )
85          {
86              deployWar();
87          }
88          else if ( "context".equals( mode ) )
89          {
90              deployContext();
91          }
92          else if ( "both".equals( mode ) )
93          {
94              deployWarAndContext();
95          }
96          else
97          {
98              throw new MojoExecutionException( messagesProvider.getMessage( "AbstractDeployMojo.unknownMode", mode ) );
99          }
100     }
101 
102     /**
103      * Gets the Tomcat WAR file. This may be a file or a directory depending on the deployment mode.
104      *
105      * @return the Tomcat WAR file.
106      */
107     protected abstract File getWarFile();
108 
109     /**
110      * Ensures that the Tomcat WAR file exists and is the correct type for the deployment mode.
111      *
112      * @throws MojoExecutionException if the WAR file does not exist or is not the correct type for the deployment mode
113      */
114     protected abstract void validateWarFile()
115         throws MojoExecutionException;
116 
117     /**
118      * Gets the Tomcat context XML file.
119      *
120      * @return the Tomcat context XML file.
121      */
122     protected File getContextFile()
123     {
124         return contextFile;
125     }
126 
127     /**
128      * Ensures that the Tomcat context XML file exists and is indeed a file.
129      *
130      * @throws MojoExecutionException if the context file does not exist or is not a file
131      */
132     protected void validateContextFile()
133         throws MojoExecutionException
134     {
135         if ( !contextFile.exists() || !contextFile.isFile() )
136         {
137             throw new MojoExecutionException(
138                 messagesProvider.getMessage( "AbstractDeployMojo.missingContext", contextFile.getPath() ) );
139         }
140     }
141 
142     /**
143      * Gets whether Tomcat should automatically undeploy webapps that already exist when deploying.
144      *
145      * @return whether Tomcat should automatically undeploy webapps that already exist when deploying
146      */
147     protected boolean isUpdate()
148     {
149         return update;
150     }
151 
152     /**
153      * Gets the Tomcat webapp tag name to use.
154      *
155      * @return the Tomcat webapp tag name to use
156      */
157     protected String getTag()
158     {
159         return tag;
160     }
161 
162     /**
163      * Deploys the WAR to Tomcat.
164      *
165      * @throws MojoExecutionException if there was a problem locating the WAR
166      * @throws TomcatManagerException if the Tomcat manager request fails
167      * @throws IOException            if an i/o error occurs
168      */
169     protected void deployWar()
170         throws MojoExecutionException, TomcatManagerException, IOException
171     {
172         validateWarFile();
173 
174         getLog().info( messagesProvider.getMessage( "AbstractDeployMojo.deployingWar", getDeployedURL() ) );
175 
176         URL warURL = getWarFile().toURL();
177         log( getManager().deploy( getPath(), warURL, isUpdate(), getTag() ).getHttpResponseBody() );
178     }
179 
180     /**
181      * Deploys the context XML file to Tomcat.
182      *
183      * @throws MojoExecutionException if there was a problem locating the context XML file
184      * @throws TomcatManagerException if the Tomcat manager request fails
185      * @throws IOException            if an i/o error occurs
186      */
187     protected void deployContext()
188         throws MojoExecutionException, TomcatManagerException, IOException
189     {
190         validateContextFile();
191 
192         getLog().info( messagesProvider.getMessage( "AbstractDeployMojo.deployingContext", getDeployedURL() ) );
193 
194         URL contextURL = getContextFile().toURL();
195         log( getManager().deployContext( getPath(), contextURL, isUpdate(), getTag() ).getHttpResponseBody() );
196     }
197 
198     /**
199      * Deploys the WAR and context XML file to Tomcat.
200      *
201      * @throws MojoExecutionException if there was a problem locating either the WAR or the context XML file
202      * @throws TomcatManagerException if the Tomcat manager request fails
203      * @throws IOException            if an i/o error occurs
204      */
205     protected void deployWarAndContext()
206         throws MojoExecutionException, TomcatManagerException, IOException
207     {
208         validateWarFile();
209         validateContextFile();
210 
211         getLog().info( messagesProvider.getMessage( "AbstractDeployMojo.deployingWarContext", getDeployedURL() ) );
212 
213         URL warURL = getWarFile().toURL();
214         URL contextURL = getContextFile().toURL();
215         log( getManager().deployContext( getPath(), contextURL, warURL, isUpdate(), getTag() ).getHttpResponseBody() );
216     }
217 }