2011-04-05 21 views
5

我想分发我的应用程序打包为WAR嵌入在Apache Tomcat中。这是我想分配Tomcat和我的应用程序。如何使用maven将我的web应用程序和tomcat打包在一起?

这种分发包装怎么能用Maven完成?

我看过Maven Cargo Plugin,但它似乎适合在本地部署容器中的应用程序。也许在Cargo插件上再增加一个步骤就是我需要的。 cargo:package似乎很有趣,但缺乏文档。

+1

你见过'maven assembly plugin'吗? http://docs.codehaus.org/display/MAVENUSER/Delivery+with+Tomcat – 2011-04-05 15:21:18

+0

不,现在检查。感谢您的链接 – 2011-04-05 15:24:12

+2

请记住,将您的应用程序与Tomcat打包在一起可能意味着您的用户将不会使用最新版本的Tomcat。 Tomcat还需要安装Java(JRE)。如果你包含Tomcat,也可能包含JRE。 – Bernard 2011-04-05 16:41:15

回答

8

详细阐述Tomasz的评论,你可以做到以下几点来实现这一点。

  1. 将tomcat下载并安装到您的本地存储库。

    MVN安装:安装文件-DgroupId = org.apache -DartifactId = tomcat的-Dversion = 7.0.10 -Dpackaging =拉链-Dfile = /路径/到/文件

  2. 使用unpack到目标maven dependency plugin解压缩到tomcat的工作文件夹

  3. 使用maven assembly plugin放置在文件夹中的webapps应用战争,创建一个zip

您可以参考this的pom.xml和this装配描述符。

+0

感谢Raghuram。虽然我还没有尝试过,但看看你提供的链接,似乎maven依赖插件是一条路 – 2011-04-06 15:14:54

4

一个更好的办法可能是作为Heroku documentation规定(不过,在非Heroku的应用以及工作)的东西

总结(以防万一链接死亡)

Tomcat的嵌入包装罐给你一个Tomcat API,你可以在你的主类的一个参考,

<dependency> 
    <groupId>org.apache.tomcat.embed</groupId> 
    <artifactId>tomcat-embed-core</artifactId> 
    <version>${tomcat.version}</version> 
</dependency> 

而且你需要一个主类类似,

package launch; 

import java.io.File; 
import org.apache.catalina.startup.Tomcat; 

public class Main { 

    public static void main(String[] args) throws Exception { 

     String webappDirLocation = "src/main/webapp/"; 
     Tomcat tomcat = new Tomcat(); 
     tomcat.setPort(8080); 

     tomcat.addWebapp("/", new File(webappDirLocation).getAbsolutePath()); 
     System.out.println("configuring app with basedir: " + 
      new File("./" + webappDirLocation).getAbsolutePath()); 

     tomcat.start(); 
     tomcat.getServer().await(); 
    } 
} 
相关问题