我有一个Java Web应用程序,该Web应用程序将Netbeans与Ant和Ivy一起用于管理,并将Tomcat作为服务器。
Tomcat版本:8.0.43

我选中了“保存时编译”,以便每次更改代码时,应用程序都会重新部署。

因此,我进行了更改,然后Netbeans自动重新部署了该应用程序,以便在测试时可以在浏览器中看到更改。

重新部署通常需要1-3秒。

我最近在我的应用程序(Apache Tika)中添加了一个具有很多依赖项的大型库

现在的结果是,在测试时重新部署需要更长的时间(例如:30秒)。

为了将重新部署时间减少到几秒钟,我能做些什么?

当应用程序重新部署(我将StandardContext日志记录设置为FINE)时,这(相关部分)被打印到日志中:


  2019年6月19日12:08:52.996 INFO [http-apr-8080-exec-4]
  org.apache.catalina.core.StandardContext.reload重载上下文
  名称[]已开始
  
  2019年6月19日12:08:53.055精细[http-apr-8080-exec-4]
  org.apache.catalina.core.StandardContext.listenerStop发送
  应用程序停止事件
  
  2019年6月19日12:08:53.125精细[http-apr-8080-exec-4]
  org.apache.catalina.core.StandardContext.stop内部处理
  标准容器关闭
  
  2019年6月19日12:08:53.171精细[http-apr-8080-exec-4]
  org.apache.catalina.core.StandardContext.resetContext resetContext
  Catalina:j2eeType = WebModule,名称= // localhost /,J2EEApplication = none,J2EEServer = none
  
  2019年6月19日12:08:53.171精细[http-apr-8080-exec-4]
  org.apache.catalina.core.StandardContext.stop内部停止
  完成
  
  2019年6月19日12:08:53.171精细[http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.startInternal启动根
  
  2019年6月19日12:08:53.627精细[http-apr-8080-exec-4]
  org.apache.catalina.core.StandardContext.start内部处理
  标准容器启动
  
  2019年6月19日12:09:11.856精细[http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.setPublicId设置
  部署描述符公共标识为“ null”
  
  2019年6月19日12:09:12.200 FINE [http-apr-8080-exec-4]
  org.apache.catalina.core.StandardContext.listener开始配置
  应用程序事件监听器
  
  2019年6月19日12:09:12.405精细[http-apr-8080-exec-4]
  org.apache.catalina.core.StandardContext.start内部启动
  已完成
  
  2019年6月19日12:09:12.405信息[http-apr-8080-exec-4]
  org.apache.catalina.core.StandardContext.reload名称为[]的上下文重装完成


如您所见,调用StandardContext.reload时会出现较长的等待时间。
具体来说,介于:


  处理标准容器启动





  将部署描述符公共ID设置为“空”


这对应于StandardContext.start()源代码中第4325行和4467行之间的代码。

但是我仍然不确定这部分代码是什么原因。

额外信息:


我的应用程序依赖的jar文件位于libraries文件夹中。
依赖项管理器下载的所有jar文件都存储在WEB-INF/lib中。


我的libraries文件夹没有任何变化,因此,我认为,在最初添加库之后,重新部署就不需要任何额外的时间。

如何更改设置,以便可以在几秒钟内重新部署该应用程序?

或者,当包含如此大量的库时,重新部署时间是否不可避免?

最佳答案

将罐子从添加的库添加到属性:


  tomcat.util.scan.StandardJarScanFilter.jarsToSkip


在Tomcat的catalina.properties文件中(在conf文件夹中找到)。

有很多问题可以解释此问题,例如:How to fix JSP compiler warning: one JAR was scanned for TLDs yet contained no TLDs?

07-27 13:50