1

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

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

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

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

这个错误有什么解决方法吗?

4

2 回答 2

1

来源:您在问题中提供的链接,请阅读 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 缺点是现在我已经在源目录中编译了类,但最重要的是它可以工作。

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

于 2012-11-20T15:05:41.210 回答
1

为了避免 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> 
于 2013-05-16T20:30:07.057 回答