1

使用 tomcat7 maven 插件 (v2.2) 运行时,JSF (com.sun.faces 2.1.12) 无法在目标/类中找到带注释的类。

当我们调试时,我们使用 Maven 的 tomcat7:run 插件运行应用程序。当 tomcat7 插件在启动时为 webapp 构建类路径时,它会将 target/classes 作为类目录添加到 webapp 类路径中,并将 src/main/webapp 配置为 webapp 根目录。这意味着WEB-INF/classes 中没有类,并且 com.sun.faces 注释扫描器不会扫描 @ManagedBeans 的目标/类

我尝试通过将 META-INF/faces-config.xml 添加到 src/main/resources 来欺骗注释扫描器扫描目标/类。这几乎起作用了,因为在 target/classes 中找到了 MET-INF/faces-config.xml,但 com.sun.faces.config.ConfigManager.ProvideMetadataToAnnotationScanTask 跳过了它,因为它不在 jar 中。我很难找到扫描 WEB-INF/类的代码。

如何说服 com.sun.faces 扫描我的目标/类目录以查找 @ManagedBeans?

4

2 回答 2

0

在您的 Maven 项目中创建文件 src/main/tomcatconf/context.xml,其内容如下:

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <Resources
        className="org.apache.naming.resources.VirtualDirContext"
        extraResourcePaths="/WEB-INF/classes=target/classes"/>
</Context>

Tomcat 7 Maven 插件在启动时会查找此文件。Context 接口的实现 org.apache.naming.resources.VirtualDirContext 允许将目录映射到某些资源位置。在这种情况下,我们将项目类的目录映射到资源 /WEB-INF/classes。

于 2014-03-07T10:19:04.143 回答
0

您使用的是哪个版本的插件?这通常在 2.2 中修复(请参阅http://tomcat.apache.org/maven-plugin-2.2/tomcat7-maven-plugin/run-mojo.html#jarScanAllDirectories)如果不是,您能否使用示例项目创建问题?谢谢

于 2014-01-16T00:32:38.083 回答