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/