1

我正在使用没有任何 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 Build id:20130614-0229 RJR:1.3.3.201301020723 Jetty:8.1.8.v20121106

视窗:64 位

谢谢

4

2 回答 2

6

这是使用 Servlet 3.x 加速 Jetty 8 的解决方法。

  1. 创建一个文件(jetty.xml)
  2. 打开 RJR 配置
  3. 点击“显示高级选项”
  4. 附加 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。

于 2013-10-27T00:57:38.913 回答
0

Looking through the RJR source code I came across this undocumented flag rjrDisableannotation which speeds up the startup time significantly in all Jetty 8/9/9.3.6 (so far I haven't noticed any unwanted side effects - of course as its name suggests it doesn't scan for annotations anymore).

It can be enabled as a "VM argument" in the "Run/Debug configuration" for a "Jetty Webapp".

e.g.:

-DrjrDisableannotation=true

Here the related source code for reference:

https://github.com/xzer/run-jetty-run/blob/rjr1.3.4/Jetty8Support/plugin-jetty8/bootstrap/runjettyrun/Configs.java#L210-L212

于 2017-07-06T10:27:19.070 回答