You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Rick R <ri...@gmail.com> on 2009/12/17 16:23:49 UTC
Tomcat plugin doesn't seem to be using build final name for context
(seems to always use artifactId)
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: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org
Re: Tomcat plugin doesn't seem to be using build final name for
context (seems to always use artifactId)
Posted by Olivier Lamy <ol...@apache.org>.
Hi,
Please fill an issue here http://jira.codehaus.org/browse/MTOMCAT
2009/12/17 Martin Gainty <mg...@hotmail.com>:
>
> //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 <ma...@gmail.com>
> * @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 <ma...@gmail.com>
> * @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: rickcr@gmail.com
>> To: users@maven.apache.org
>>
>> 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: users-unsubscribe@maven.apache.org
>> For additional commands, e-mail: users-help@maven.apache.org
>>
>
> _________________________________________________________________
> Hotmail: Trusted email with Microsoft’s powerful SPAM protection.
> http://clk.atdmt.com/GBL/go/177141664/direct/01/
--
Olivier
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org
RE: Tomcat plugin doesn't seem to be using build final name for
context (seems to always use artifactId)
Posted by Martin Gainty <mg...@hotmail.com>.
//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 <ma...@gmail.com>
* @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 <ma...@gmail.com>
* @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: rickcr@gmail.com
> To: users@maven.apache.org
>
> 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: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
_________________________________________________________________
Hotmail: Trusted email with Microsoft’s powerful SPAM protection.
http://clk.atdmt.com/GBL/go/177141664/direct/01/