【发布时间】:2012-07-31 05:25:03
【问题描述】:
我在 Eclipse 中创建了一个 Maven 项目。从“project facets”菜单中,我选择了 Dynamic Web Module、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 库似乎没有按预期链接。您对这种行为的原因有任何想法吗?
【问题讨论】:
-
这解决了我的问题(实际上我们正在通过这些步骤将 maven 下载的 jars 添加到 lib 文件夹中,这些步骤由 maven 自动添加到构建路径中,但对于 lib maven 没有这样做)