Run-Jetty-Run (RJR) с Jetty 8 и Servlet 3.0 сканирует все файлы JAR, игнорируя WebInfIncludeJarPattern в jetty-web.xml

Я использую Servlet 3.0 без web.xml, просто использую Spring WebApplicationInitializer. Когда я запускаю Web-приложение с Run-Jetty-Run в eclipse, JARScanning занимает около 40 секунд, так как он пытается найти аннотации HandlesTypes во всех jar-файлах.

Таким образом, я попытался установить WebInfIncludeJarPattern в jetty-web.xml (я также попробовал 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 Пристань: 8.1.8.v20121106

ОКНА: 64 бит

Спасибо

2 ответа

Решение

Вот обходной путь для ускорения Jetty 8 с Servlet 3.x.

  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.

Просматривая исходный код RJR, я наткнулся на этот недокументированный флаг rjrDisableannotation, который значительно ускоряет время запуска во всех Jetty 8/9 / 9.3.6 (пока я не заметил каких-либо нежелательных побочных эффектов - конечно, как следует из его названия) больше не сканирует аннотации).

Его можно включить как "аргумент виртуальной машины" в "Конфигурации запуска / отладки" для "Jetty Webapp".

например:

-DrjrDisableannotation=true

Вот соответствующий исходный код для справки:

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

Другие вопросы по тегам