我使用的是没有任何web.xml的Servlet 3.0,只使用Spring WebApplicationInitializer。当我在eclipse中使用Run Jetty Run启动Web应用程序时,JARScanning大约需要40秒,因为它试图在所有jar中找到HandlesTypes注释。
因此,我尝试在jetty-web.xml中设置WebInfIncludeJarPattern(我也尝试了jetty-context.xml),并将其放在webapp/web-INF文件夹中,如中所述http://wiki.eclipse.org/Jetty/Howto/Avoid_slow_deployment.我还设置了metadata complete="true"。jetty-web.xml文件的内容是:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern</Arg>
<Arg>.*/.*foo-api-[^/].jar$|./.*bar-[^/].jar$|./.*wibble[^/]*.jar$</Arg>
</Call>
</Configure>
但是,JarScanner仍然会扫描所有的JAR文件。在调试输出中,我可以看到jetty-web.xml文件是在所有JARScanning完成后解析的:
输出:
2013-08-30 09:09:52.836:DBUG:oejw.WebAppContext:preConfigure o.e.j.w.WebAppContext{/admin2,[file:/C:/....../src/main/webapp/]} with runjettyrun.webapp.RJRWebInfConfiguration@1cdc4a5
......
2013-08-30 09:09:52.979:DBUG:oejw.WebAppContext:preConfigure o.e.j.w.WebAppContext{/admin2,[file:/C:/..../src/main/webapp/]} with org.eclipse.jetty.webapp.WebXmlConfiguration@136f39e
2013-08-30 09:09:53.076:DBUG:oejw.WebDescriptor:file:/C:/......../src/main/webapp/WEB-INF/web.xml: Calculated metadatacomplete = True with version=3.0
2013-08-30 09:09:53.076:DBUG:oejw.WebAppContext:preConfigure o.e.j.w.WebAppContext{/admin2,[file:/C:/....../src/main/webapp/]} with runjettyrun.webapp.RJRMetaInfoConfiguration@164de63
... <LOTS OF JARSCANNING>
2013-08-30 09:10:36.677:DBUG:oejw.JarScanner:Search of file:/C:/......./httpclient-cache-4.1.2.jar
2013-08-30 09:10:36.710:DBUG:oejw.WebAppContext:configure o.e.j.w.WebAppContext{/.................} with org.eclipse.jetty.webapp.JettyWebXmlConfiguration@803365
2013-08-30 09:10:36.711:DBUG:oejw.JettyWebXmlConfiguration:Configuring web-jetty.xml
2013-08-30 09:10:36.715:DBUG:oejw.JettyWebXmlConfiguration:Configure: file:/C:/......./src/main/webapp/WEB-INF/jetty-web.xml
如何强制RJR更早地获取jetty-web.xml,并且只扫描其中指定的文件?或者在RJR中是否有其他方法来指定要扫描的JARS?
我正在使用以下版本:Eclipse:Kepler Release 4.3构建id:20130614-0229 RJR:1.3.3.201301020723 Jetty:8.1.8.v20121106
WINDOWS:64位
感谢
这里有一个使用Servlet 3.x加速Jetty 8的解决方法。
- 创建一个文件(jetty.xml)
- 打开RJR配置
- 单击"显示高级选项"
- 附加Jetty.xml:
文件(jetty.xml)必须有以下行:
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Get name="handler">
<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.webapp.WebInfIncludeJarPattern</Arg>
<Arg>.*/mwa-web-.*.jar$</Arg>
</Call>
</Get>
</Configure>
在这里,我告诉Jetty,任何以mwa-web-*开头的文件都应该扫描Servlet 3.x。
在查看RJR源代码时,我发现了这个未记录的标志rjrDisablannotation,它大大加快了所有Jetty 8/9/9.3.6的启动时间(到目前为止,我还没有注意到任何不必要的副作用-当然,顾名思义,它不再扫描注释)。
它可以作为"Jetty Webapp"的"运行/调试配置"中的"VM参数"启用。
例如:
-DrjrDisableannotation=true
这里的相关源代码供参考:
https://github.com/xzer/run-jetty-run/blob/rjr1.3.4/Jetty8Support/plugin-jetty8/bootstrap/runjettyrun/Configs.java#L210-L212