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

如何使用maven将web应用程序和tomcat打包在一起?,tomcat,maven,maven-cargo,Tomcat,Maven,Maven Cargo,我希望将我的应用程序打包为嵌入在ApacheTomcat中的WAR。也就是说,我希望将Tomcat与我的应用程序一起分发 如何使用Maven完成这种分发包装 我已经看到了,但它似乎是面向在本地容器中部署应用程序的。也许我需要的是在Cargo插件上多做一步货物:包裹看起来很有趣,但缺少文档。详细阐述Tomasz的评论,您可以执行以下操作来实现这一点 下载tomcat并将其安装到本地存储库中 mvn安装:安装文件-DgroupId=org.apache-DartifactId=tomcat-Dver

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

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


我已经看到了,但它似乎是面向在本地容器中部署应用程序的。也许我需要的是在Cargo插件上多做一步<代码>货物:包裹看起来很有趣,但缺少文档。

详细阐述Tomasz的评论,您可以执行以下操作来实现这一点

  • 下载tomcat并将其安装到本地存储库中

    mvn安装:安装文件-DgroupId=org.apache-DartifactId=tomcat-Dversion=7.0.10-dpacking=zip-Dfile=/path/to/file

  • 使用
    maven依赖插件的
    unpack
    目标将tomcat解压到工作文件夹中

  • 使用
    maven assembly plugin
    将应用程序war放置在webapps文件夹中并创建一个zip文件

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

    更好的方法可能是中指定的内容(尽管它也适用于非heroku应用程序)

    总结(以防链接失效)

    Tomcat嵌入包可以为您提供一个
    Tomcat
    API,您可以在一个主类中引用它

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

    你看过maven汇编插件吗?不,现在检查。感谢链接请记住,将您的应用程序与Tomcat一起打包可能意味着您的用户将不会使用最新版本的Tomcat。Tomcat还需要安装Java(JRE)。如果你包括Tomcat,还可以包括一个JRE。@Tomasz:你知道你提到的文章中“独立模块”是什么意思吗?它的意思是“与其他模块分离”,就在它们的某个地方。看起来,本文的作者正在将单独的Tomcat JAR聚合为构建Tomcat发行版的单个项目的依赖项。您可以让它简单一点,只需手动压缩Tomcat并将其安装到您的本地存储库中,稍后在汇编插件中将其作为ZIP引用。谢谢Raghuram。虽然我还没有尝试过,但看看你提供的链接,maven dependency plugin似乎是一种更好的方法,如果项目在github上,它是一种更好的方法吗?(而不是要求贡献者下载并安装tomcat)
    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();
        }
    }