如何使用maven将我的Web应用程序和tomcat打包在一起?

时间:2011-04-05 15:11:29

标签: tomcat maven maven-cargo

我想将我的应用程序分发为嵌入在Apache Tomcat中的WAR。那就是我想要将Tomcat与我的应用程序一起分发。

如何使用Maven完成这种分发包装?

我见过Maven Cargo Plugin,但它似乎是为了在本地容器中部署应用程序。也许我需要的是对Cargo插件的额外步骤。 cargo:package似乎很有趣,但缺乏文档。

2 个答案:

答案 0 :(得分:8)

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

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

    mvn install:install-file -DgroupId = org.apache -DartifactId = tomcat -Dversion = 7.0.10 -Dpackaging = zip -Dfile = / path / to / file

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

  3. 使用maven assembly plugin将应用程序战争置于webapps文件夹中并创建一个zip
  4. 您可以参考this pom.xml和this汇编描述符。

答案 1 :(得分:4)

更好的方式可能是Heroku documentation中指定的内容(虽然它也适用于非Heroku应用程序)

总结(以防链接死亡)

Tomcat embed包可以为您提供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();
    }
}