问题描述
为了让 Jetty 9.0 停止扫描类路径中的类和 jar,我按照它的文档中的描述做了:首先,我在项目上创建了一个 WEB-INF\jetty-web.xlm 文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern</Arg>
<Arg>.\A</Arg>
</Call>
</Configure>
然后在 web.xml 上,我指定了 <absolute-ordering/>
和 metadata-complete="true
,并使用 -Dorg.eclipse.jetty.webapp.WebInfConfiguration.LEVEL=ALL
和 -Dorg.eclipse.jetty.annotations.AnnotationParser.LEVEL=DEBUG
运行 Jetty 以确认扫描确实被跳过,并且WebContext 似乎是正确的,因为扫描仪选择了 jar 列表,现在只列出了项目战争:
2021-02-07 21:43:58.971:INFO:oejsh.ContextHandler:Scanner-1: Started o.e.j.w.WebAppContext@6c7c5cac{Payroll,/payroll-groovy-1.0,file:///E:/Projetos/payroll_groovy/target/payroll-groovy-1.0/,AVAILABLE}{E:\Projetos\payroll_groovy\target\payroll-groovy-1.0.war}
然而,AnnotationParser
显示 jar 扫描(我不明白两个日志的区别...):
2021-02-07 21:43:57.312:DBUG:oeja.AnnotationParser:qtp1595212853-27: Scanning class from jar file:///E:/Programas/jetty/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-1.2.5.jar!/org/apache/taglibs/standard/Version.class->org/apache/taglibs/standard/Version.class[0]
2021-02-07 21:43:57.323:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class from jar file:///E:/Programas/jetty/lib/servlet-api-3.1.jar!/javax/servlet/AsyncEvent.class->javax/servlet/AsyncEvent.class[0]
2021-02-07 21:43:57.323:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class from jar file:///E:/Programas/jetty/lib/servlet-api-3.1.jar!/javax/servlet/AsyncListener.class->javax/servlet/AsyncListener.class[0]
2021-02-07 21:43:57.323:DBUG:oeja.AnnotationParser:qtp1595212853-27: Scanning class from jar file:///E:/Programas/jetty/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-1.2.5.jar!/org/apache/taglibs/standard/functions/Functions.class->org/apache/taglibs/standard/functions/Functions.class[0]
2021-02-07 21:43:57.323:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class from jar file:///E:/Programas/jetty/lib/servlet-api-3.1.jar!/javax/servlet/DispatcherType.class->javax/servlet/DispatcherType.class[0]
2021-02-07 21:43:57.323:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class from jar file:///E:/Programas/jetty/lib/servlet-api-3.1.jar!/javax/servlet/Filter.class->javax/servlet/Filter.class[0]
2021-02-07 21:43:57.323:DBUG:oeja.AnnotationParser:qtp1595212853-27: Scanning class from jar file:///E:/Programas/jetty/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-1.2.5.jar!/org/apache/taglibs/standard/resources/Resources.class->org/apache/taglibs/standard/resources/Resources.class[0]
2021-02-07 21:43:57.324:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class from jar file:///E:/Programas/jetty/lib/servlet-api-3.1.jar!/javax/servlet/FilterChain.class->javax/servlet/FilterChain.class[0]
2021-02-07 21:43:57.324:DBUG:oeja.AnnotationParser:qtp1595212853-27: Not a class: org/apache/taglibs/standard/resources/Resources.properties
2021-02-07 21:43:57.324:DBUG:oeja.AnnotationParser:qtp1595212853-27: Not a class: org/apache/taglibs/standard/resources/Resources_ja.properties
2021-02-07 21:43:57.324:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class from jar file:///E:/Programas/jetty/lib/servlet-api-3.1.jar!/javax/servlet/FilterConfig.class->javax/servlet/FilterConfig.class[0]
2021-02-07 21:43:57.324:DBUG:oeja.AnnotationParser:qtp1595212853-27: Scanning class from jar file:///E:/Programas/jetty/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-1.2.5.jar!/org/apache/taglibs/standard/tag/common/core/CatchTag.class->org/apache/taglibs/standard/tag/common/core/CatchTag.class[0]
2021-02-07 21:43:57.324:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class from jar file:///E:/Programas/jetty/lib/servlet-api-3.1.jar!/javax/servlet/FilterRegistration$Dynamic.class->javax/servlet/FilterRegistration$Dynamic.class[0]
.
.
.
它一直持续到项目中的每个 jar 和每个类都被列出。如果我在 jetty-web.xml 中添加这个:
<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg>
<Arg>.\A</Arg>
</Call>
然后日志显示 jar 扫描停止,但对于类路径中的类,情况并非如此:
2021-02-07 21:50:13.730:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class file:///E:/Projetos/payroll_groovy/target/payroll-groovy-1.0/WEB-INF/classes/com/vmc/DynamicClassFactory$_coreLangMethods_closure1.class
2021-02-07 21:50:13.737:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class file:///E:/Projetos/payroll_groovy/target/payroll-groovy-1.0/WEB-INF/classes/com/vmc/DynamicClassFactory$__clinit__closure2.class
2021-02-07 21:50:13.738:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class file:///E:/Projetos/payroll_groovy/target/payroll-groovy-1.0/WEB-INF/classes/com/vmc/DynamicClassFactory$__clinit__closure3.class
2021-02-07 21:50:13.739:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class file:///E:/Projetos/payroll_groovy/target/payroll-groovy-1.0/WEB-INF/classes/com/vmc/DynamicClassFactory.class
2021-02-07 21:50:13.741:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class file:///E:/Projetos/payroll_groovy/target/payroll-groovy-1.0/WEB-INF/classes/com/vmc/objectMemento/Caretaker.class
2021-02-07 21:50:13.742:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class file:///E:/Projetos/payroll_groovy/target/payroll-groovy-1.0/WEB-INF/classes/com/vmc/objectMemento/InMemoryObjectChangeProvider.class
2021-02-07 21:50:13.743:DBUG:oeja.AnnotationParser:qtp1595212853-29: Scanning class file:///E:/Projetos/payroll_groovy/target/payroll-groovy-1.0/WEB-INF/classes/com/vmc/objectMemento/Memento.class
.
.
.
奇怪的是,尽管 @WebListener
告诉我的类路径中的 AnnotationParser
注释类都被扫描了,但没有加载它们(可能是因为元数据完整设置?)。无论如何,我想避免所有扫描,因为不会有 @WebListener
带注释的类(我只是为了测试),所以花时间扫描它们是没有意义的。
那么如何阻止 Jetty 9.0 从我的类路径中扫描类?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)