如何在Jetty上全面处理JSF注释处理错误



JSF加载机制中有一个错误,用于用注解@ManagedBean注释的托管bean。当通过mvn jetty:run运行应用程序时,该机制不会被激活。错误报告如下:https://bugs.eclipse.org/bugs/show_bug.cgi?id=288243

这是一件非常讨厌的事情,因为jetty:run在调试时有很大的优势

  • 速度很快
  • 它直接使用工作区中的jsf文件,而无需使用FileSync插件

但是,如果不支持注释,则需要降级到XML配置。

有办法解决这个bug吗?

来源:您在问题中提供的链接,阅读Tomaz Lipinsi评论

嗨,我找到了解决这个问题的简单方法。事实上我没有使用Jetty,但使用Tomcat和Sysdeo Tomcat启动器,但它的行为相同的JSF2在两个地方寻找带注释的类:-WEB-INF/classes-因此,如果应用程序没有打包到.war中,则该目录不存在-classpath jar(WEB-INF/lib)-与上面类似,我试图将默认的com.sun.faces.spi.AnnationProvider重写为我自己的,所以我可以向他提供我的类的列表(关于这个类,请参阅JavaDoc)。当我试图做到这一点时,我突然想到了一个想法,我可以只需将我编译的类放在WEB-INF/classes目录中即可这个到pom.xml解决了问题:
src/main/webapp/WEB-INF/classes缺点是现在我已经在源代码中编译了类dir,但最重要的是它有效。

建议您阅读那里的所有评论。

为了避免src和类之间的混合,您可以在您的maven的POM中设置如下内容:

<build>
<finalName>my-project</finalName>
<directory>target</directory>
<outputDirectory>${basedir}/target/main/webapp/WEB-INF/classes</outputDirectory>
....
</build>

在jetty的maven插件的配置中,您可以尝试以下操作:
编辑:jetty使用的版本是6.1.26,如果标记"resources"不起作用,请尝试"resourcesAsCSV"而不是

<configuration>
...
<webAppConfig>
<defaultsDescriptor>${basedir}/src/main/webapp/WEB-NF/webdefault.xml</defaultsDescriptor>
<baseResource implementation="org.mortbay.resource.ResourceCollection">
<resources>${basedir}/target/main/webapp,${basedir}/src/main/webapp</resources>
</baseResource>
</webAppConfig>
...
</configuration>

**注意:webdefault.xml用于设置在jetty运行时解锁文件所需的init param,该param为:

<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>false</param-value>
</init-param> 

最新更新