2015-08-04 3 views
0

Я все еще новичок в Java EE 7/Spring и пытаюсь решить следующую проблему. Я использую Glassfish 4.1 и JDK 1.8.Развертывание Spring-проекта для Glassfish (NoClassDefFoundError)

Я создал тестовый проект в Eclipse (Новый проект -> Проект Spring -> Простая Java) с использованием грантов проекта «Динамический веб-модуль», «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..."); 
    } 

} 

При нажатии Command-Button, я получаю следующее сообщение об ошибке:

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

Что является причиной этого, и как ее решить? (Для ясности я прокомментировал инъекцию зависимостей.)

Большое спасибо за помощь!

+0

Вы уверены, что вы устанавливаете файл .war, полученный в результате 'МВН package'? Не совсем ясно, какие шаги вы выполнили, некоторые утверждения предполагают общую путаницу (* «(...) сервер Glassfish не имеет доступа к библиотекам, находящимся в хранилище maven» *) – kryger

+0

Для ясности я реструктурировали мой вопрос выше – mike128

ответ

0

Наконец-то я смог решить проблему самостоятельно. Причина заключалась в том, что файлы классов, от которых зависел мой код и который присутствовал во время компиляции, не были найдены во время выполнения. Поэтому мне пришлось скопировать семь отсутствующих библиотек (например, spring-context-4.2.0.RELEASE.jar, spring-expression-4.2.0.RELEASE.jar, spring-core-4.2.0.RELEASE.jar, spring- контекстно-поддержка-4.2.0.RELEASE.jar и т.д.) к следующему Glassfish libary-папки

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

+0

Вы должны связать зависимости вашего приложения непосредственно с артефактом webapp (то есть с файлом .war), а не требовать, чтобы контейнер предоставил их вам. Использование Maven должным образом облегчило бы вам, вы должны потратить некоторое время на исследования - эта инвестиция окупится в будущем. – kryger

Смежные вопросы