2011-04-05 41 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(); 
    } 
} 
相關問題