如何在Jetty Maven插件中启用CachingWebAppClassLoader?

时间:2017-04-05 00:44:26

标签: java maven jetty maven-jetty-plugin

我试图在开发环境中提高Java Web应用程序的启动性能。它使用jetty-maven-plugin,import json with open('stack.json','r') as f: data = json.load(f) questions=data["Question"] topics=data['Topic'] print(questions) print(topics) 用于启动应用程序。

我按照http://www.eclipse.org/jetty/documentation/9.3.x/jetty-classloading.html的说明注册了这个新的['what is this?', 'this is another question'] ['Web pages', 'another topic']

mvn jetty:run

但是,CachingWebAppClassLoader继续出现在jvisualvm CPU采样器中,而不是<Configure id="mywebapp" class="org.eclipse.jetty.webapp.WebAppContext"> ... <Set name="classLoader"> <New class="org.eclipse.jetty.webapp.CachingWebAppClassLoader"> <Arg><Ref refid="mywebapp"/></Arg> </New> </Set> ... </Configure>

我验证了我的类加载器注册至少是通过提供无效的类名来发现的,在这种情况下抛出了org.eclipse.jetty.webapp.WebAppClassLoader.*。我猜测我的类加载器配置正在消耗但没有被使用或类似的东西。有任何想法吗?

此外,如果您了解可用于提高性能的任何其他类加载器变体,请告诉我。

1 个答案:

答案 0 :(得分:3)

Button btn = new Button("My Button"); btn.setIcon(myFontIcon); btn.setPressedIcon(myAlternateColorFontIcon); 使用专门的WebAppContext,名为JettyWebAppContext

  

JettyWebAppContext扩展WebAppContext以专门针对maven环境。

因此,jetty-maven-plugin中的WebAppContext绑定已创建,但随后未使用。

一个明显的解决方法是将您的jetty.xml类设置为jetty.xml中的WebApplicationContext, 但不幸的是这does not work

  

您可以在jetty.xml中定义资源处理程序,但是您可以   不应该在jetty.xml中定义你的webapp,作为jetty的目的   maven插件是通过自动部署使开发更容易   你未组装的webapp。所以,如果你把你的webapp定义   jetty.xml的东西应该工作。

另一种可能的解决方法是使用org.eclipse.jetty.maven.plugin.JettyWebAppContext配置元素classLoaderJettyWebAppContext中的默认pom.xml实例上设置webApp属性:

<webApp>         
    <classLoader>org.eclipse.jetty.webapp.CachingWebAppClassLoader</classLoader>
</webApp>  

不幸的是,由于CachingWebAppClassLoader构造函数需要对基础WebAppClassLoader.Context的引用,因此它也无法工作,因此无法实例化。

我不确定是否有任何其他解决方法(可能使用额外的here会这样做),但即使您设法使其与缓存类加载器一起使用,也可能打破变更检测和热重新部署,这基本上是jetty-maven-plugin

背后的核心思想
  

此目标在Maven项目中原位使用,无需首先要求将项目组装成战争,从而节省开发周期中的时间。

     

...

     

调用插件后,可以将插件配置为连续运行,扫描项目中的更改并自动执行   必要时进行热重新部署。这使得开发人员可以专注于使用他们选择的IDE对项目进行编码更改,并将这些更改立即透明地反映在正在运行的Web容器中,从而消除了在重建,重新组装和重新部署时浪费的开发时间。

所以我不确定这是不是一个好主意。