在部署应用程序时,简单性是最大的优势。 您将了解到,尤其是在项目发展且需要在环境中进行某些更改时。 将整个应用程序打包到一个独立且自足的JAR中似乎是个好主意,尤其是与在目标环境中安装和升级Tomcat相比。 过去,我通常将Tomcat JARs包含在我的Web应用程序中,并使用Tomcat API编写瘦命令行运行程序。 幸运的是,有一个tomcat7:exec-war maven目标可以做到这一点。 它需要您的WAR工件并将其与所有Tomcat依赖项打包在一起。 最后,它还包含要显示的Tomcat7RunnerCli Main-class

想尝试一下吗? 接受您现有的WAR项目并将以下内容添加到pom.xml

<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.0</version><executions><execution><id>tomcat-run</id><goals><goal>exec-war-only</goal></goals><phase>package</phase><configuration><path>/standalone</path><enableNaming>false</enableNaming><finalName>standalone.jar</finalName><charset>utf-8</charset></configuration></execution></executions>
</plugin>

运行mvn package,几秒钟后,您将在目标目录中找到闪亮的standalone.jar 。 运行您的Web应用程序从未如此简单:

$ java -jar target/standalone.jar

…您可以浏览localhost:8080/standalone 。 尽管path参数的文档说(重点是我):

用于正在运行的Web应用程序的webapp上下文路径。 将Webapp存储在exec jar中的名称。 不要在我们两个人之间使用 /,毕竟<path>/</path>似乎可以工作。 事实证明,内置main类实际上要灵活一些。 例如,您可以说(我希望这是不言而喻的):

$ java -jar standalone.jar -httpPort=7070

这有什么runnable JAR所做的就是第一个解压缩它的WAR文件中的一些目录( extract通过default1 ),并将其部署到Tomcat -所有必需的Tomcat JARs也包括在内。 空的standalone.jar(内部几乎没有KiB WAR)的权重约为8.5 MiB –如果您声称将每个版本的整个Tomcat与应用程序一起推送是浪费的,那么就不算多。

在谈论Tomcat JARs ,您应该想知道如何选择此runnable包含的Tomcat版本? 不幸的是,我找不到任何简单的选项,因此我们必须回到显式重新定义插件依赖项(2.0版已将7.0.30 Tomcat硬编码)。 这很无聊,但没有那么复杂,可能对将来的参考很有用:

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><tomcat7Version>7.0.33</tomcat7Version>
</properties><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.0</version><executions><execution><id>tomcat-run</id><goals><goal>exec-war-only</goal></goals><phase>package</phase><configuration><path>/standalone</path><enableNaming>false</enableNaming><finalName>standalone.jar</finalName><charset>utf-8</charset></configuration></execution></executions><dependencies><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-util</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-coyote</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-api</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jdbc</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-dbcp</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-servlet-api</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jsp-api</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jasper</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-jasper-el</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-el-api</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-catalina</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-tribes</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-catalina-ha</artifactId><version>${tomcat7Version}</version></dependency><dependency><groupId>org.apache.tomcat</groupId><artifactId>tomcat-annotations-api</artifactId><version>${tomcat7Version}</version></dependency></dependencies></plugin></plugins>
</build>

在下一篇文章中,我们将学习如何处理出现在终端java.util.logging这些讨厌的Tomcat内部日志( java.util.logging …)。与此同时,我发现并报告了MTOMCAT-186。关闭可执行文件JAR不会调用ServletContextListener.contextDestroyed() –看看这是否适合您。

1 -这可能是一个好主意,用指定不同的目录- extractDirectory与每次重新启动前清理- resetExtract

参考: Java和社区博客中来自JCG合作伙伴 Tomasz Nurkiewicz的带有可运行Tomcat的独立Web应用程序 。

翻译自: https://www.javacodegeeks.com/2012/11/standalone-web-application-with-executable-tomcat.html

具有可执行Tomcat的独立Web应用程序相关推荐

  1. tomcat web应用_具有可执行Tomcat的独立Web应用程序

    tomcat web应用 在部署应用程序时,简单性是最大的优势. 您将了解到,尤其是在项目发展且需要在环境中进行某些更改时. 将您的整个应用程序打包到一个独立且自足的JAR中似乎是个好主意,特别是与在 ...

  2. 用Eclipse远程调试部署在Tomcat下的Web应用程序

    今天同事告诉了我一个用Eclipse远程调试部署在Tomcat下的Web应用程序的方法: 安装解压版本的Tomcat,因为现在好像Tomcat的Windows安装版目录下没有catalina.sh(. ...

  3. Tomcat配置和Web应用程序开发

    引自友人blog: [url]http://blog.csdn.net/senton[/url] ◆tomcat是一个专门用于web服务的服务器软件. 1.运行 : 设置完毕后就可以运行tomcat服 ...

  4. Linux下Tomcat与Apache Web服务器的整合

    原文:http://os.51cto.com/art/200709/57327.htm ◆1.引言 基于Web技术的Internet/Intranet近年来已经得到了广泛的应用,Intranet是以T ...

  5. java项目如何启动tomcat服务器,Java web项目启动Tomcat报错解决方案

    Java web项目启动Tomcat报错解决方案 点击运行项目时显示 A Java Exception has occurred. 'Starting Tomcat v9.0 Server at lo ...

  6. tomcat 目录结构 web 目录结构

    TOMCAT的目录结构 /bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件 /conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web ...

  7. jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

    jpa jsf 我们创建了这篇文章,将展示如何使用以下工具创建完整的Web应用程序:Tomcat7,带有Primefaces的JSF2(Facelets和Libraries)(具有AutoComple ...

  8. jpa jsf_完整Web应用程序Tomcat JSF Primefaces JPA Hibernate –第2部分

    jpa jsf 托管豆 这篇文章是本教程第1部分的继续. 在" com.mb"包中,您将需要创建以下类: package com.mb;import org.primefaces. ...

  9. jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第3部分

    jpa jsf Primefaces AutoComplete,JSF转换器 这篇文章从第一部分和第二部分继续. JSF拥有Converter工具,可以帮助我们从用户视图中获取一些数据并将其转换为从数 ...

最新文章

  1. 发现一个浏览器很奇怪的问题
  2. MySQL通过存储过程使用循环结构循环创建数据,以及批量数据的导入导出
  3. iservice封装有哪些方法_请问这段Java代码能不能封装成一个方法
  4. 时艳强对话酒儿:gate首发平台币的时机选择
  5. 远控免杀专题12--Green-Hat-Suite免杀
  6. 0基础入门VTD-实操静态道路建模3
  7. ADAS视觉方案盘点:摄像头、芯片和算法
  8. 微信群如何实现语音多群转播
  9. (转)技嘉 MA790FXT-UD5P搭配AMD X4 965超频解析
  10. python里如何打开文件_python如何打开一个txt文件
  11. esp32 红外接收
  12. 一分钟学会看k线图_教你一分钟就能学会看k线图 不信来试 (图文)
  13. 腾讯实习生腾讯云后台一面面经
  14. 哈啰:学拼多多的套路,走美团的老路
  15. 在Linux安装Kafka监控系统EFAK
  16. 如何写一个好的Github项目文档
  17. AV1和开放媒体联盟(AOM)的发展、成果与未来
  18. 解决Pixel手机时间不能自动同步
  19. R语言时间序列函数整理[不断更新]
  20. 【PostgreSQL】数据表的增删改查

热门文章

  1. jvm(2)-JVM内存的设置(解决eclipse下out of memory问题)
  2. 朝着理想坚实迈进_坚实原则:单一责任原则
  3. 参数化测试 junit_JUnit 5 –参数化测试
  4. junit5和junit4_JUnit 5 –架构
  5. drill apache_使用Apache Drill REST API通过Node构建ASCII仪表盘
  6. mycat和应用程序集成_企业应用程序集成简介
  7. 在AWS第1部分中使用Terraform自动缩放组:基本步骤
  8. spring 异常捕获异常_使用Spring跟踪异常–第2部分–委托模式
  9. junit动态忽略测试_有条件忽略测试的JUnit规则
  10. 通过Spring Boot了解H2 InMemory数据库