Как мне упаковать свое веб-приложение и tomcat вместе, используя maven? - PullRequest
5 голосов
/ 05 апреля 2011

Я хотел бы распространять свое приложение, упакованное как WAR, встроенное в Apache Tomcat. То есть я хочу распространять Tomcat вместе с моим приложением.

Как можно сделать такую ​​дистрибутивную упаковку с Maven?

Я видел Maven Cargo Plugin , но, похоже, он предназначен для локального развертывания приложений в контейнерах. Возможно, мне нужен дополнительный шаг над плагином Cargo. cargo:package представляется интересным, но не хватает документации.

Ответы [ 2 ]

8 голосов
/ 06 апреля 2011

Разработав комментарий Томаша, вы можете сделать следующее для достижения этой цели.

  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

Вы можете сослаться на этот pom.xml и этот дескриптор сборки.

4 голосов
/ 11 ноября 2013

Лучшим способом может быть что-то, как указано в документации 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();
    }
}
...