//AbstractDeployMojo details package org.codehaus.mojo.tomcat; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */
import java.io.File; import java.io.IOException; import java.net.URL; import org.apache.maven.plugin.MojoExecutionException; /*** Deploy a WAR to Tomcat. * @author Mark Hobson <[email protected]> * @version $Id: AbstractDeployMojo.java 8855 2009-01-21 11:23:04Z olamy $ */ public abstract class AbstractDeployMojo extends AbstractWarCatalinaMojo { // ---------------------------------------------------------------------- // Mojo Parameters // ---------------------------------------------------------------------- /** * The deployment mode to use. This must be either <code>war</code> to deploy the war, <code>context</code> to * deploy the context XML file, or <code>both</code> to deploy the war with the context XML file. * * @parameter expression = "${maven.tomcat.mode}" default-value = "war" * @required */ private String mode; /** * The path of the Tomcat context XML file. This is not used for war deployment mode. * * Question how does project.build.finalName get baked into this folder name??? * * @parameter expression = "${project.build.directory}/${project.build.finalName}/META-INF/context.xml" */ private File contextFile; /** * Whether Tomcat should automatically undeploy webapps that already exist when deploying. * * @parameter expression = "${maven.tomcat.update}" default-value = "false" * @required */ private boolean update; /** * The Tomcat webapp tag name to use. * * @parameter expression = "${maven.tomcat.tag}" */ private String tag; // ---------------------------------------------------------------------- // Protected Methods // ---------------------------------------------------------------------- /** * {...@inheritdoc} */ @Override public void invokeManager() throws MojoExecutionException, TomcatManagerException, IOException { if ( "war".equals( mode ) ) { deployWar(); } else if ( "context".equals( mode ) ) { deployContext(); } else if ( "both".equals( mode ) ) { deployWarAndContext(); } else { throw new MojoExecutionException( getMessage( "AbstractDeployMojo.unknownMode", mode ) ); } } /** * Gets the Tomcat WAR file. This may be a file or a directory depending on the deployment mode. * * @return the Tomcat WAR file. */ protected abstract File getWarFile(); //concrete class will need to override /** * Ensures that the Tomcat WAR file exists and is the correct type for the deployment mode. * * @throws MojoExecutionException if the WAR file does not exist or is not the correct type for the deployment mode */ protected abstract void validateWarFile() //concrete class will need to override throws MojoExecutionException; /** * Gets the Tomcat context XML file. * * @return the Tomcat context XML file. */ protected File getContextFile() { return contextFile; } /** * Ensures that the Tomcat context XML file exists and is indeed a file. * * @throws MojoExecutionException if the context file does not exist or is not a file */ protected void validateContextFile() throws MojoExecutionException { if ( !contextFile.exists() || !contextFile.isFile() ) { throw new MojoExecutionException( getMessage( "AbstractDeployMojo.missingContext", contextFile.getPath() ) ); } } /** * Gets whether Tomcat should automatically undeploy webapps that already exist when deploying. * * @return whether Tomcat should automatically undeploy webapps that already exist when deploying */ protected boolean isUpdate() { return update; } /** * Gets the Tomcat webapp tag name to use. * @return the Tomcat webapp tag name to use */ protected String getTag() { return tag; } /** * Deploys the WAR to Tomcat. * * @throws MojoExecutionException if there was a problem locating the WAR * @throws TomcatManagerException if the Tomcat manager request fails * @throws IOException if an i/o error occurs */ protected void deployWar() throws MojoExecutionException, TomcatManagerException, IOException { validateWarFile(); getLog().info( getMessage( "AbstractDeployMojo.deployingWar", getDeployedURL() ) ); URL warURL = getWarFile().toURL(); log( getManager().deploy( getPath(), warURL, isUpdate(), getTag() ) ); } /** * Deploys the context XML file to Tomcat. * @throws MojoExecutionException if there was a problem locating the context XML file * @throws TomcatManagerException if the Tomcat manager request fails * @throws IOException if an i/o error occurs */ protected void deployContext() throws MojoExecutionException, TomcatManagerException, IOException { validateContextFile(); getLog().info( getMessage( "AbstractDeployMojo.deployingContext", getDeployedURL() ) ); URL contextURL = getContextFile().toURL(); log( getManager().deployContext( getPath(), contextURL, isUpdate(), getTag() ) ); } /** * Deploys the WAR and context XML file to Tomcat. * @throws MojoExecutionException if there was a problem locating either the WAR or the context XML file * @throws TomcatManagerException if the Tomcat manager request fails * @throws IOException if an i/o error occurs */ protected void deployWarAndContext() throws MojoExecutionException, TomcatManagerException, IOException { validateWarFile(); validateContextFile(); getLog().info( getMessage( "AbstractDeployMojo.deployingWarContext", getDeployedURL() ) ); URL warURL = getWarFile().toURL(); URL contextURL = getContextFile().toURL(); log( getManager().deployContext( getPath(), contextURL, warURL, isUpdate(), getTag() ) ); } } //and now concrete class which overrides Base package org.codehaus.mojo.tomcat; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import java.io.File; import org.apache.maven.plugin.MojoExecutionException; /** * Deploy an exploded WAR to Tomcat. * * @goal exploded * @author Mark Hobson <[email protected]> * @version $Id: ExplodedMojo.java 8855 2009-01-21 11:23:04Z olamy $ * @todo depend on war:exploded when MNG-1649 resolved */ public class ExplodedMojo extends AbstractDeployMojo { // ---------------------------------------------------------------------- // Mojo Parameters // ---------------------------------------------------------------------- /** * The path of the exploded WAR directory to deploy. * * @parameter expression = "${project.build.directory}/${project.build.finalName}" * @required */ private File warDirectory; //where is private File warFile?????????? // ---------------------------------------------------------------------- // Protected Methods // ---------------------------------------------------------------------- /** * {...@inheritdoc} */ @Override protected File getWarFile() { return warDirectory; //why not warFile??????? } /** * {...@inheritdoc} */ @Override protected void validateWarFile() throws MojoExecutionException { //well and good for check on warDirectory //where is the check on the warFile??????????? if ( !warDirectory.exists() || !warDirectory.isDirectory() ) { throw new MojoExecutionException( getMessage( "ExplodedMojo.missingWar", warDirectory.getPath() ) ); } } } it appears you found a BUG! good catch! Martin ______________________________________________ Please do not alter/modify this transmission. Thank You > Date: Thu, 17 Dec 2009 10:23:49 -0500 > Subject: Tomcat plugin doesn't seem to be using build final name for context > (seems to always use artifactId) > From: [email protected] > To: [email protected] > > I'm confused here. The docs > http://mojo.codehaus.org/tomcat-maven-plugin/usage.html state that the > default context is > Context path of /${project.build.finalName} if no explicit one is given. > > In my war pom I have: > > <artifactId>dataselector-web</artifactId> > > but I later have > > <build> > <finalName>dataselector</finalName> > > The war builds fine to the name "dataselector.war" and I can manually > deploy it just fine, yet when I try to use the tomcat plugin it tries > to deploy to the context dataselector-web which is the artificatId and > not the finalName. > > What did I do wrong? I don't mind declaring the name in the tomcat > module config but all the examples I see show a hardcoded path for the > context. I dont' want to to hardcode that context path (eg > /Users/rick/tomcat/webapps/dataselector ) > > > -- > Rick R > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > _________________________________________________________________ Hotmail: Trusted email with Microsoft’s powerful SPAM protection. http://clk.atdmt.com/GBL/go/177141664/direct/01/
