使用注释@ManagedBean注释的托管 bean 的 JSF 加载机制中有一个错误。通过mvn jetty:run 运行应用程序时,该机制未激活。此处报告该错误:https ://bugs.eclipse.org/bugs/show_bug.cgi?id=288243
这是一件非常讨厌的事情,因为 jetty:run 在调试时有很大的优势:
- 它很快
- 它直接使用工作区中的 jsf 文件,无需使用FileSync插件
但是,不支持注释将需要降级到 XML 配置。
这个错误有什么解决方法吗?
使用注释@ManagedBean注释的托管 bean 的 JSF 加载机制中有一个错误。通过mvn jetty:run 运行应用程序时,该机制未激活。此处报告该错误:https ://bugs.eclipse.org/bugs/show_bug.cgi?id=288243
这是一件非常讨厌的事情,因为 jetty:run 在调试时有很大的优势:
但是,不支持注释将需要降级到 XML 配置。
这个错误有什么解决方法吗?
来源:您在问题中提供的链接,请阅读 Tomaz Lipinsi 评论
嗨,我找到了解决此问题的简单方法。实际上我不使用 Jetty,而是使用 Tomcat 和 Sysdeo Tomcat Launcher,但它的行为相同。JSF2 在两个地方寻找带注释的类: - WEB-INF/classes - 所以如果应用程序没有打包到 .war 中,则该目录不存在 - 类路径 jars (WEB-INF/lib) - 与上面类似我已经试图将默认的 com.sun.faces.spi.AnnotationProvider 覆盖为我自己的,以便我可以向他提供我的类列表(请参阅此类的 JavaDoc)。当我试图这样做时,我想到了一个想法,我可以简单地将我的编译类放在 WEB-INF/classes 目录中。将此添加到 pom.xml 解决了问题:
src/main/webapp/WEB-INF/classes 缺点是现在我已经在源目录中编译了类,但最重要的是它可以工作。
建议您阅读那里的所有评论。
为了避免 src 和类之间的混合,你可以在你的 maven 的 POM 中设置一些这样的:
<build>
<finalName>my-project</finalName>
<directory>target</directory>
<outputDirectory>${basedir}/target/main/webapp/WEB-INF/classes</outputDirectory>
....
</build>
在码头的 maven-plugin 的配置中你可以试试这个:
编辑:码头使用的版本是 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,参数为:
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>false</param-value>
</init-param>