【发布时间】:2019-11-26 04:03:27
【问题描述】:
我们使用的是 Tomcat 8.5没有任何热部署,
我假设类已加载到内存中,例如,如果 jar 中的类发生更改,它将忽略(不是热部署)
但是如果我们在应用程序运行时覆盖一个 jar,它会覆盖类(或删除它)
例如,当我复制空 jar 时,它会为 jar 中的类抛出 ZipException:
java.lang.IllegalStateException: java.util.zip.ZipException: zip file is empty
at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:97)
at org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:260)
at org.apache.catalina.webresources.StandardRoot.getResourcesInternal(StandardRoot.java:327)
at org.apache.catalina.webresources.CachedResource.validateResources(CachedResource.java:127)
at org.apache.catalina.webresources.Cache.getResources(Cache.java:147)
at org.apache.catalina.webresources.StandardRoot.getResources(StandardRoot.java:315)
at org.apache.catalina.webresources.StandardRoot.getClassLoaderResources(StandardRoot.java:231)
at org.apache.catalina.loader.WebappClassLoaderBase.findResources(WebappClassLoaderBase.java:939)
at java.lang.ClassLoader.getResources(ClassLoader.java:1142)
at java.util.ServiceLoader$LazyIterator.hasNextService(ServiceLoader.java:348)
at java.util.ServiceLoader$LazyIterator.hasNext(ServiceLoader.java:393)
at java.util.ServiceLoader$1.hasNext(ServiceLoader.java:474)
at javax.xml.parsers.FactoryFinder$1.run(FactoryFinder.java:293)
at java.security.AccessController.doPrivileged(Native Method)
at javax.xml.parsers.FactoryFinder.findServiceProvider(FactoryFinder.java:289)
at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:267)
at javax.xml.parsers.DocumentBuilderFactory.newInstance(DocumentBuilderFactory.java:120)
at com.MyHelper.createDoc(MyHelper.java:64)
tomcat 可以忽略覆盖的 jar 并仅从内存中提取类吗?
是否有某种我不知道的内置热部署?
编辑
这可能与打开空 jar 的 tomcat 的特定问题有关
【问题讨论】:
标签: java tomcat classloader hotdeploy tomcat8.5