将 Spring-project 部署到 Glassfish (NoClassDefFoundError)
Deploying Spring-project to Glassfish (NoClassDefFoundError)
我还是 Java EE 7 / Spring 的新手,正在尝试解决以下问题。我使用 Glassfish 4.1 和 JDK 1.8。
我使用项目方面 "Dynamic Web Module"、"Java"、"JavaScript", "JavaServer Faces" 如下:
index.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:form>
<h:commandButton value="Submit Query" action="#{bean.login()}"></h:commandButton>
</h:form>
</html>
Bean.java
package springWeb;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@RequestScoped
@Named
public class Bean {
//@Autowired
private UserService userService;
public String login(){
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(springConfiguration.class);
// userService = (UserService)context.getBean("UserService");
// userService.service();
return "go.jsf";
}
}
UserServiceImpl
package springWeb;
import org.springframework.stereotype.Component;
//@Component
public class UserServiceImpl implements UserService {
@Override
public void service() {
System.out.println ("Service running...");
}
}
按下命令按钮时,我收到以下错误消息:
javax.servlet.ServletException: java.lang.NoClassDefFoundError:
org/springframework/context/annotation/AnnotationConfigApplicationContext
root cause javax.faces.el.EvaluationException:
java.lang.NoClassDefFoundError:
org/springframework/context/annotation/AnnotationConfigApplicationContext
root cause java.lang.NoClassDefFoundError:
org/springframework/context/annotation/AnnotationConfigApplicationContext
root cause java.lang.ClassNotFoundException:
org.springframework.context.annotation.AnnotationConfigApplicationContext
这是什么原因,如何解决? (为了清楚起见,我已经注释掉了依赖注入。)
非常感谢您的帮助!
终于可以自己解决问题了。原因是我的代码所依赖的并且在编译时存在的 class 个文件在运行时没有找到。因此,我不得不复制七个缺失的库(例如 spring-context-4.2.0.RELEASE.jar、spring-expression-4.2.0.RELEASE.jar、spring- core-4.2.0.RELEASE.jar、spring-context-support-4.2.0.RELEASE.jar 等)到以下 Glassfish 库文件夹
C:\glassfish-4.1\glassfish4\glassfish\domains\domainXXXX\lib
您可以在网上轻松找到缺少的库,例如在 Maven 存储库中:http://repo1.maven.org/maven2/
帮助我理解这一点的相关帖子是:
Why am I getting a NoClassDefFoundError in Java? 和
Maven vs. Eclipse Project Facets for Java EE 6
我还是 Java EE 7 / Spring 的新手,正在尝试解决以下问题。我使用 Glassfish 4.1 和 JDK 1.8。
我使用项目方面 "Dynamic Web Module"、"Java"、"JavaScript", "JavaServer Faces" 如下:
index.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:form>
<h:commandButton value="Submit Query" action="#{bean.login()}"></h:commandButton>
</h:form>
</html>
Bean.java
package springWeb;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@RequestScoped
@Named
public class Bean {
//@Autowired
private UserService userService;
public String login(){
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(springConfiguration.class);
// userService = (UserService)context.getBean("UserService");
// userService.service();
return "go.jsf";
}
}
UserServiceImpl
package springWeb;
import org.springframework.stereotype.Component;
//@Component
public class UserServiceImpl implements UserService {
@Override
public void service() {
System.out.println ("Service running...");
}
}
按下命令按钮时,我收到以下错误消息:
javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/springframework/context/annotation/AnnotationConfigApplicationContext
root cause javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: org/springframework/context/annotation/AnnotationConfigApplicationContext
root cause java.lang.NoClassDefFoundError: org/springframework/context/annotation/AnnotationConfigApplicationContext
root cause java.lang.ClassNotFoundException: org.springframework.context.annotation.AnnotationConfigApplicationContext
这是什么原因,如何解决? (为了清楚起见,我已经注释掉了依赖注入。)
非常感谢您的帮助!
终于可以自己解决问题了。原因是我的代码所依赖的并且在编译时存在的 class 个文件在运行时没有找到。因此,我不得不复制七个缺失的库(例如 spring-context-4.2.0.RELEASE.jar、spring-expression-4.2.0.RELEASE.jar、spring- core-4.2.0.RELEASE.jar、spring-context-support-4.2.0.RELEASE.jar 等)到以下 Glassfish 库文件夹
C:\glassfish-4.1\glassfish4\glassfish\domains\domainXXXX\lib
您可以在网上轻松找到缺少的库,例如在 Maven 存储库中:http://repo1.maven.org/maven2/
帮助我理解这一点的相关帖子是: Why am I getting a NoClassDefFoundError in Java? 和 Maven vs. Eclipse Project Facets for Java EE 6