5
votes

I am creating a dummy maven project with two modules, and I have included a general pom.xml file. I am able to build from the root pom.xml file and run all the tests but when it comes to deploying the files to Tomcat, it falls down. The plugin I have is:

<build>
    <finalName>dummy</finalName>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>tomcat-maven-plugin</artifactId>
            <configuration>
                <url>http://127.0.0.1:8090/manager/text</url>
                <server>TomcatServer</server>
                <path>/dummy</path>
            </configuration>
        </plugin>
    </plugins>
</build>

settings.xml

<server>
    <id>TomcatServer</id>
    <username>admin</username>
    <password>admin</password>
</server>

However, when I run the build it uses the default configuration values and I get the following error message:

Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.1:deploy (default-cli) on project webapp: Cannot invoke Tomcat manager: http://localhost:8080/manager/deploy?path=%2Fwebapp&war= -> [Help 1]

Does anyone know how I can get the plugin to be using my config?

More output:

[INFO] --- maven-war-plugin:2.1.1:war (default-war) @ webapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [webapp] in [C:\Websites\www.dummy.app\webapp\target\webapp]
[INFO] Processing war project
[INFO] Copying webapp resources [C:\Websites\www.dummy.app\webapp\src\main\webapp]
[INFO] Webapp assembled in [15 msecs]
[INFO] Building war: C:\Websites\www.dummy.app\webapp\target\webapp.war
[WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored
(webxml attribute is missing from war task, or ignoreWebxml attribute is specified as 'true')
[INFO]
[INFO] <<< tomcat-maven-plugin:1.1:deploy (default-cli) @ webapp <<<
[INFO]
[INFO] --- tomcat-maven-plugin:1.1:deploy (default-cli) @ webapp ---
[INFO] Deploying war to http://localhost:8080/webapp
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] my-app ............................................ SUCCESS [4.747s]
[INFO] webapp ............................................ FAILURE [3.313s]
[INFO] dummy ............................................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.376s
[INFO] Finished at: Mon Jan 23 22:46:11 GMT 2012
[INFO] Final Memory: 18M/245M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.1:deploy (default-cli) on project webapp: Cannot invoke Tomcat manager: http://localhost:8080/manager/deploy?path=%2Fwebapp&war= -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :webapp

Thanks

3
Your manager URL looks weird - why is there a /text in the name? Also, have you verified Tomcat is properly configured to run on port 8080 and that the manager app is installed?Perception
For deployment on Tomcat7, the URL needs to end in /html or /text. I think it should be /text but I havent gotten that far to test :). Tomcat is running on the right port because 127.0.0.1:8090/manager/html resolves to the Tomcat ManagerBIGDeutsch
Could you post the relevant console log running it in debug mode (mvn -X)?Raghuram
More output added above - thanksBIGDeutsch
Have you tried the 2.0-SNAPSHOT version of the tomcat-plugin? tomcat.apache.org/maven-plugin-2.0-SNAPSHOTPeter Svensson

3 Answers

3
votes
<properties>
   <maven.tomcat.url>http://localhost:8080/manager/text</maven.tomcat.url>
</properties>

Fixed it for me.

1
votes

I also had the same problem.Here is how I resolved.Though this is a late answer,I think this answer will hold true even today.

I am using tomcat7.The tomcat-maven-plugin:1.1 defaults to tomcat deployment url http://localhost:8080/manager/html , but for tomcat 7 the url has changed to http://localhost:8080/manager/text.

Step 1 : Find the url & role for tomcat to deploy war files.

I found that by manually going to

apache-tomcat-7.0.41\webapps\manager\WEB-INF\web.xml

The url used to deploy is : /text , so maven should use http://localhost:8080/manager/text The role for this url is "manager-script"

   <security-constraint>
    <web-resource-collection>
      <web-resource-name>Text Manager interface (for scripts)</web-resource-name>
      <url-pattern>/text/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
       <role-name>manager-script</role-name>
    </auth-constraint>
  </security-constraint>

Step 2 : Configure tomcat credentials for the role

So now we have found the URL to deploy the war and the role.If you havent configured tomcat users.Below is how to add the roles to apache-tomcat-7.0.41\conf\tomcat-users.xml.

<tomcat-users>

  <role rolename="manager"/>
  <role rolename="manager-gui"/>
  <role rolename="manager-script"/>
  <role rolename="admin"/>
  <user username="admin" password="admin" roles="admin,manager,manager-gui,manager-script"/>

</tomcat-users>

Step 3: Configure tomcat-maven-plugin in pom.xml to use the tomcat url for deployment.

Now we need to configure tomcat-maven-plugin to use these.Below is my plugin configuration in the pom.xml.This will override the tomcat-maven-plugin's default tomcat deploy url.

    <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>tomcat-maven-plugin</artifactId>
            <configuration>
                <server>mytomcatserver</server>
                <url>http://localhost:8080/manager/text</url>
            </configuration>
    </plugin>

Step 4 : Configure maven's settings.xml for the tomcat url credentials.

Now for the maven plugin to deploy the war file to tomcat , it needs the username & password for your tomcat server. Find out settings.xml of maven is located ( mine was at apache-maven-3.2.3\conf ) and apply the below config to the

<servers>
  <server>
      <id>mytomcatserver</id>
      <username>admin</username>
      <password>admin</password>
    </server>
</servers>

Step 5 : Moment of truth

Start tomcat.

mvn package ( war file created )

mvn tomcat:deploy ( watch tomcat console for the war deployment )

Your webapp will be available at http://localhost:8080/{context}