我找到了原因,并找到了一些解决方法。
在 Mojarra 2.1 附带的 Glassfish 3.1 上,类路径扫描委托给 Glassfish。现在,Glassfish 似乎给所有类的耳朵文件而不是战争。我为此打开了http://java.net/jira/browse/JAVASERVERFACES-1995(但它确实似乎是 Glassfish 错误,而不是 JSF/Mojarra)。
在等待修复时,我像这样对 Mojarra 进行了修补:在 com.sun.faces.config.ConfigManager.java 的第 834 行附近,我注释掉了一些行:
// if (provider instanceof DelegatingAnnotationProvider &&
// null != annotationScanner) {
// // This InjectionProvider is capable of annotation scanning *and*
// // injection.
// ((DelegatingAnnotationProvider)provider).setAnnotationScanner(annotationScanner,
// metadataGetter.getJarNames());
// scanUris = Collections.emptySet();
// } else {
// This InjectionProvider is capable of annotation scanning only
scanUris = metadataGetter.getAnnotationScanURIs();
// }
日志现在不那么冗长了。Glassfish 似乎仍在扫描每个课程,所以我仍然收到这样的警告:
[#|2011-03-18T13:47:05.019+0100|WARNING|oracle-glassfish3.1|javax.enterprise.system.container.web.org.glassfish.web.loader|_ThreadID=57;_ThreadName=Thread-1;|WEB9052: Unable to load class org.apache.myfaces.custom.inputTextHelp.HtmlTextHelpRenderer, reason: java.lang.ClassNotFoundException: org.apache.myfaces.custom.inputTextHelp.HtmlTextHelpRenderer|#]
但是没有来自 Mojarra 的堆栈跟踪,它已经不那么冗长了。