我已经在Eclipse中创建了一个Maven项目。从“项目构面”菜单中,我选择了动态Web模块,Java和Java Server Faces。从pom.xml成功添加了一些依赖项,例如jsf-api和servlet-api。然后,我编写了一个简单的Java bean和一个使用该bean的xhtml页面。
当我使用“ maven clean install”构建war文件并将其手动部署到Tomcat时,它可以按预期工作。但是,当我从Eclipse中选择“在服务器上运行”时,会出现以下错误:
SEVERE: Servlet /testjsf1 threw load() exception java.lang.ClassNotFoundException: javax.faces.webapp.FacesServlet at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:124) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1136) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1080) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5015) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5302) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1566) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1556) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)
从Eclipse运行jsf库时,似乎未按预期链接。您对这种行为的原因有任何想法吗?
在“项目属性”->“部署程序集”中,添加“ Java构建路径条目-> Maven依赖关系”即可解决该问题!