具有可执行Tomcat的独立Web应用程序
在部署应用程序时,简单性是最大的优势。 您将了解到,尤其是在项目发展且需要在环境中进行某些更改时。 将整个应用程序打包到一个独立且自足的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应用程序相关推荐
- tomcat web应用_具有可执行Tomcat的独立Web应用程序
tomcat web应用 在部署应用程序时,简单性是最大的优势. 您将了解到,尤其是在项目发展且需要在环境中进行某些更改时. 将您的整个应用程序打包到一个独立且自足的JAR中似乎是个好主意,特别是与在 ...
- 用Eclipse远程调试部署在Tomcat下的Web应用程序
今天同事告诉了我一个用Eclipse远程调试部署在Tomcat下的Web应用程序的方法: 安装解压版本的Tomcat,因为现在好像Tomcat的Windows安装版目录下没有catalina.sh(. ...
- Tomcat配置和Web应用程序开发
引自友人blog: [url]http://blog.csdn.net/senton[/url] ◆tomcat是一个专门用于web服务的服务器软件. 1.运行 : 设置完毕后就可以运行tomcat服 ...
- Linux下Tomcat与Apache Web服务器的整合
原文:http://os.51cto.com/art/200709/57327.htm ◆1.引言 基于Web技术的Internet/Intranet近年来已经得到了广泛的应用,Intranet是以T ...
- java项目如何启动tomcat服务器,Java web项目启动Tomcat报错解决方案
Java web项目启动Tomcat报错解决方案 点击运行项目时显示 A Java Exception has occurred. 'Starting Tomcat v9.0 Server at lo ...
- tomcat 目录结构 web 目录结构
TOMCAT的目录结构 /bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件 /conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web ...
- jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第1部分
jpa jsf 我们创建了这篇文章,将展示如何使用以下工具创建完整的Web应用程序:Tomcat7,带有Primefaces的JSF2(Facelets和Libraries)(具有AutoComple ...
- jpa jsf_完整Web应用程序Tomcat JSF Primefaces JPA Hibernate –第2部分
jpa jsf 托管豆 这篇文章是本教程第1部分的继续. 在" com.mb"包中,您将需要创建以下类: package com.mb;import org.primefaces. ...
- jpa jsf_完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第3部分
jpa jsf Primefaces AutoComplete,JSF转换器 这篇文章从第一部分和第二部分继续. JSF拥有Converter工具,可以帮助我们从用户视图中获取一些数据并将其转换为从数 ...
最新文章
- 发现一个浏览器很奇怪的问题
- MySQL通过存储过程使用循环结构循环创建数据,以及批量数据的导入导出
- iservice封装有哪些方法_请问这段Java代码能不能封装成一个方法
- 时艳强对话酒儿:gate首发平台币的时机选择
- 远控免杀专题12--Green-Hat-Suite免杀
- 0基础入门VTD-实操静态道路建模3
- ADAS视觉方案盘点:摄像头、芯片和算法
- 微信群如何实现语音多群转播
- (转)技嘉 MA790FXT-UD5P搭配AMD X4 965超频解析
- python里如何打开文件_python如何打开一个txt文件
- esp32 红外接收
- 一分钟学会看k线图_教你一分钟就能学会看k线图 不信来试 (图文)
- 腾讯实习生腾讯云后台一面面经
- 哈啰:学拼多多的套路,走美团的老路
- 在Linux安装Kafka监控系统EFAK
- 如何写一个好的Github项目文档
- AV1和开放媒体联盟(AOM)的发展、成果与未来
- 解决Pixel手机时间不能自动同步
- R语言时间序列函数整理[不断更新]
- 【PostgreSQL】数据表的增删改查
热门文章
- jvm(2)-JVM内存的设置(解决eclipse下out of memory问题)
- 朝着理想坚实迈进_坚实原则:单一责任原则
- 参数化测试 junit_JUnit 5 –参数化测试
- junit5和junit4_JUnit 5 –架构
- drill apache_使用Apache Drill REST API通过Node构建ASCII仪表盘
- mycat和应用程序集成_企业应用程序集成简介
- 在AWS第1部分中使用Terraform自动缩放组:基本步骤
- spring 异常捕获异常_使用Spring跟踪异常–第2部分–委托模式
- junit动态忽略测试_有条件忽略测试的JUnit规则
- 通过Spring Boot了解H2 InMemory数据库