Tomcat 8与Maven的集成

17

听起来 Eclipse (Kepler) 没有适用于 Tomcat 8 的合适插件。我想通过 Maven pom.xml 文件将我的 .war 部署到 Tomcat 8 并运行它。请问有人可以提供逐步指导或任何资源吗?

我的 POM 文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>Test-App</groupId>
  <artifactId>test-rest</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>test-rest Maven Webapp</name>
  <url>http://maven.apache.org</url>
     <!-- Tomcat plugin -->


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
  <plugins>
  <plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
     <path>/${project.build.finalName}</path>
     <update>true</update>
     <url>http:// localhost:8080/manager/text</url>
     <username>tomcat</username>
     <password>tomcatuser</password>
    </configuration>
   </plugin>
   </plugins>
    <finalName>test-rest</finalName>
  </build>
</project>

1
这篇文章声称maven tomcat-7插件也可以部署到tomcat 8。你是否还需要eclipse集成?或者你只是想在命令行上进行部署? - John
@John。谢谢。我已经尝试过了,但是出现了一个错误“http://cwiki.apache.org/confluence/display/MAVEN/LifecyclePhaseNotFoundException”,对我来说不太清楚。集成Eclipse并不是必需的。我需要的是将我的Web应用程序构建为war文件,并部署到Tomcat 8中。如果有任何可行的解决方案,即使是命令行方式也足够了。 - Débora
也许最好发布你的pom.xml文件。哪个命令触发了“LifecyclePhaseNotFoundException”? - John
2
就记录而言,使用与上述相同的配置(不包括用户名/密码条目)在Tomcat 8.0.21上,tomcat7-maven-plugin对我来说运行良好 - 我依赖于默认凭据'admin'而没有密码。听起来LifecyclePhaseNotFoundException可能与Tomcat maven插件无关。 - John Rix
@JohnRix,你能解释一下它是如何使用Tomcat 8.0.21的吗?因为插件中没有定义任何Tomcat版本。 - Jess
抱歉@Jess,这是很久以前的事情了!不过如果我没记错,我当时部署到的Tomcat实例是8.0.21版本。正如你所说,maven插件本身并不关心您指定的URL另一端的Tomcat版本是什么,只要它像Tomcat7一样就可以。 - John Rix
4个回答

8
您可以使用Cargo插件,这对我很有用,可将其部署到tomcat8:
             <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.4.8</version>
                <configuration>
                    <container>
                        <containerId>tomcat8x</containerId>
                        <home>${env.CATALINA_HOME}</home>
                    </container>
                    <configuration>
                        <type>existing</type>
                        <home>${env.CATALINA_HOME}</home>
                    </configuration>
                    <deployables>
                        <deployable>
                            <groupId>com.yourcompany</groupId>
                            <artifactId>ROOT</artifactId>
                            <type>war</type>
                            <properties>
                                <context>${project.build.finalName}</context>
                            </properties>
                        </deployable>
                    </deployables>
                    <deployer>
                        <type>installed</type>
                    </deployer>
                </configuration>
            </plugin>

谢谢。我尝试了这个。然后出现错误:在当前项目和插件组[org.apache.maven.plugins,org.codehaus.mojo]中找不到前缀“tomcat8”的插件,可从存储库[local(/ ../ .m2 / repository),central(http://repo.maven.apache.org/maven2)]中获取-> [帮助1] 要查看错误的完整堆栈跟踪,请使用-e重新运行Maven .... - Débora
1
请问您能否添加使用说明,或者说运行war包的maven命令与“tomcat7:run-war-only”相同吗? - Jess

6

使用cargo和tomcat8来运行war包的示例

mvn clean verify org.codehaus.cargo:cargo-maven2-plugin:run -Dcargo.maven.containerId=tomcat8x -Dcargo.maven.containerUrl=http://repo1.maven.org/maven2/org/apache/tomcat/tomcat/8.5.9/tomcat-8.5.9.zip

如果你想将其添加到你的pom中。
<plugin>
  <groupId>org.codehaus.cargo</groupId>
  <artifactId>cargo-maven2-plugin</artifactId>
  <version>${cargo.version}</version>
  <configuration>
    <container>
      <containerId>tomcat8x</containerId>
      <zipUrlInstaller>
          <url>http://repo1.maven.org/maven2/org/apache/tomcat/tomcat/8.5.9/tomcat-8.5.9.zip</url>
      </zipUrlInstaller>
    </container>
  </configuration>
</plugin>

然后运行你的war包(如果你的pom是一个war包)。
mvn cargo:run

要运行调试(不需要内存选项)

<plugin>
  <groupId>org.codehaus.cargo</groupId>
  <artifactId>cargo-maven2-plugin</artifactId>
  <version>${cargo.version}</version>
  <configuration>
    <container>
      <containerId>tomcat8x</containerId>
      <zipUrlInstaller>
          <url>http://repo1.maven.org/maven2/org/apache/tomcat/tomcat/8.5.9/tomcat-8.5.9.zip</url>
      </zipUrlInstaller>
    </container>
    <configuration>
      <properties>
        <!-- <cargo.servlet.port>8200</cargo.servlet.port> -->
        <cargo.jvmargs>-Xmx2048m -Xms512m</cargo.jvmargs>
        <cargo.start.jvmargs>-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000</cargo.start.jvmargs>
      </properties>
    </configuration>
  </configuration>
</plugin>

然后您需要在IDE中创建一个远程调试配置,端口为8000(如果未指定端口,则默认为8000)

更多命令请参见:https://codehaus-cargo.github.io/cargo/Maven2+plugin.html#Maven2plugin-TheCargoMavenpluginindetail


3

如果您使用单独的Tomcat本地服务器,请注意以下内容。如果您使用嵌入式Tomcat,这不适用。

在您的pom.xml中,添加Tomcat插件。(Tomcat 7和8均可使用):

pom.xml

<!-- Tomcat plugin -->  
<plugin>  
 <groupId>org.apache.tomcat.maven</groupId>  
 <artifactId>tomcat7-maven-plugin</artifactId>  
 <version>2.2</version>  
 <configuration>  
  <url>http:// localhost:8080/manager/text</url>  
  <server>TomcatServer</server>    *(From maven > settings.xml)*
  <username>*yourtomcatusername*</username>  
  <password>*yourtomcatpassword*</password>   
 </configuration>   
</plugin>   

tomcat-users.xml

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

settings.xml (maven > conf)

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

* 部署/重新部署

使用以下命令进行部署或重新部署:
mvn tomcat7:deploy 或者 mvn tomcat7:redeploy

已在 Ubuntu 和 Windows 8/10 上尝试过:
* Jdk 7 & Tomcat 7
* Jdk 7 & Tomcat 8
* Jdk 8 & Tomcat 7
* Jdk 8 & Tomcat 8

已测试可用于 Jdk 7/8 和 Tomcat 7/8。同样适用于 Tomcat 8.5,将很快测试 Tomcat 9。

注意:
在使用 maven 之前,请确保 Tomcat 管理器正在运行或已正确设置。


如果使用的是 tomcat7-maven-plugin,你如何测试Tomcat 8? - Robert Gabriel
我已经在我的两台笔记本电脑上安装了Tomcat 8进行开发......一台运行在Ubuntu上,另一台运行在Windows上。顺便说一下,我将我的Tomcat和JDK从7升级到了8......它甚至仍然可以在相同的插件“tomcat7-maven-plugin”上运行。 - Borgy Manotoy
所以你不是每次从Maven运行它时都启动Tomcat实例?该插件只是构建war文件。 - Robert Gabriel
是的,就像我在答案中所指示的那样...这仅适用于您拥有单独的Tomcat服务器的情况。 - Borgy Manotoy
如何使用命令行Maven部署传递tomcat-users.xml和server.xml更改? - DShah

2

对于Tomcat 8,您应该使用cargo-maven2-plugin插件,它适用于maven 2和maven 3。在配置cargo插件时,请确保Container Id的值为"tomcat8x"。请勿省略tomcat8后面的"x"。


2
如果我省略了 x 会发生什么? - Pablo Jomer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接