Я занимаюсь разработкой простого обучающего приложения с использованием Spring MVC и Hibernate. Я использую Maven в качестве инструмента для сборки.
Все зависимости (весна, спящий режим, aopalliance , junit и т. Д.) Разрешаются с помощью файла Maven pom.xml.
$ mvn war:war glassfish:deploy
работает отлично, проект развертывается на сервере GlassFish - копируются все файлы *.jar
(включая com.springsource.org.aopalliance-1.0.0.jar
).
Я сделал простой сервлет для проверки существования aopalliance в classpath:
protected void doGet(...) throws ... {
response.getWriter().println(org.aopalliance.intercept.MethodInterceptor.class.getCanonicalName());
}
И это существует. Приведенный выше код отображает org.aopalliance.intercept.MethodInterceptor
, как и ожидалось.
Однако, если я изменю сервлет на что-то вроде этого:
protected void doGet(...) throws ... {
response.getWriter().println(org.springframework.transaction.interceptor.TransactionInterceptor.class.getCanonicalName());
}
Выдает исключение:
java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor
TransactionInterceptor
использует интерфейсы aopalliance, но я не понимаю, почему он не может их найти, а мой сервлет может. Я полагаю, что это может быть как-то связано с загрузчиком классов, но я боюсь, что понятия не имею, как это исправить.
EDIT:
Некоторые детали:
EDIT:
Я также добавил зависимости для spring.osgi.core/io
, как предложено @Ravi:
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>org.springframework.osgi.core</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>org.springframework.osgi.io</artifactId>
<version>1.2.1</version>
</dependency>
Но это не решило проблему.
Однако я попытался запустить то же самое приложение на VMware vFabric tc Server, которое поставляется с SpringSource Tool Suite, и все работало просто отлично. Похоже, что это проблема GlassFish.
Я использую GlassFish Server Open Source Edition 3.1.1.
Еще одна странная вещь: если я повторно разверну приложение (используя «Опубликовать» в Eclipse), сервлет выдаст:
java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor
Но после обновления (в браузере) я получаю:
java.lang.NoClassDefFoundError: org/springframework/transaction/interceptor/TransactionInterceptor
Дальнейшие обновления ничего не меняют.