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

发布于 2024-10-31 00:16:17 字数 287 浏览 1 评论 0原文

我想分发打包为嵌入 Apache Tomcat 中的 WAR 的应用程序。也就是说,我想将 Tomcat 与我的应用程序一起分发。

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

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

I would like to distribute my application packaged as WAR embedded in Apache Tomcat. That is I want to distribute Tomcat along with my application.

How can this sort of distribution packaging can be done with Maven?

I have seen the Maven Cargo Plugin, but it appears to be geared towards deploying applications in containers locally. Perhaps an additional step over Cargo plugin is what I need. cargo:package appears to be interesting but lacks documentation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜`诱少女 2024-11-07 00:16:17

详细阐述 Tomasz 的评论,您可以执行以下操作来实现此目的。

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

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

  2. 使用 unpack 目标 < code>maven dependencyplugin 将 tomcat 解压到工作文件夹

  3. 使用 < code>maven assembly plugin 将应用程序war放在webapps文件夹中并创建zip

您可以参考 pom.xml 和这个 程序集描述符。

Elaborating Tomasz's comment, you can do the following to achieve this.

  1. Download and install tomcat to your local repository.

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

  2. Use unpack goal of maven dependency plugin to unzip tomcat to a work folder

  3. Use maven assembly plugin to place the application war in webapps folder and create a zip

You can refer to this pom.xml and this assembly descriptor.

何必那么矫情 2024-11-07 00:16:17

更好的方法可能是 Heroku 中指定的方法文档(虽然它也应该适用于非 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();
    }
}

A better way could be something as specified in the Heroku documentation (Though it should work on non-heroku apps as well)

To summarize (Just in case the link dies)

Tomcat embed package can give you a Tomcat API which you can refer in one of your main class,

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

And you would need a main class something like,

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();
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文