[英]Spring No Class Found exception when dependency exists
我正在研究以下错误,该错误是由缺乏依赖关系引起的,或者至少就是类似问题的答案。 我相信我对spring框架具有所有必要的依赖关系,但它总是抛出错误。 我在服务器和项目上都运行正常,但无济于事。 任何输入都会很棒,因为我是spring和java企业应用程序的新手。
org.apache.catalina.core.ApplicationContext log SEVERE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError:
org/springframework/context/support/FileSystemXmlApplicationContext
at mycalendar.servlets.EventServlet.init(EventServlet.java:53)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1238)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1151)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:828)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Mar 31, 2016 6:13:41 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Allocate exception for servlet eventServlet java.lang.NoClassDefFoundError: org/springframework/context/support/FileSystemXmlApplicationContext
at mycalendar.servlets.EventServlet.init(EventServlet.java:53)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1238)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1151)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:828)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
但是在使用maven的pom文件中,我确实声明了spring框架的上下文,如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MyCalendar</groupId>
<artifactId>MyCalendar</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc-portlet</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.7</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
错误来自我的servlet内部:
@Override public void init(ServletConfig config)抛出ServletException {super.init(config);
ApplicationContext context = new FileSystemXmlApplicationContext("spring.xml"); <------here
Calendar cal = new GregorianCalendar();
Event eventOne = new Event(1, "event 1", "john smith", "12:00am","Fullerton, CA",cal);
Event eventTwo = new Event(2, "event 1", "jane smith", "1:00pm","Placentia,CA",cal);
Event eventThree = new Event(3, "event 3", "jules smith", "2:00pm","Brea, CA",cal);
//Add Dummy Data
eventsDatabase.add(eventOne);
eventsDatabase.add(eventTwo);
eventsDatabase.add(eventThree);
}
项目结构:
看到您的代码,我可以看到您定义了pom.xml,但是由于您的项目实际上并不是Maven项目,因此您没有像下面这样的项目结构
src
- main
- java
- .....
- resource
- ....
- webapp
WEB-INF
- ....
.....
- test
- java
- .....
- resource
- ....
出于这个原因,您为依赖项包装设置了pom,依此类推,但是您无法使用Maven,可能是因为您使用eclipse ide进行了战争,而eclipse可能没有正确包装您在WEB-INF下的lib文件夹下的依赖项。 您已手动将Eclipse设置为正确的间隔。
我的建议是使用上述结构重构代码,以使Maven受益,让日食意识使您拥有设置Maven性质的maven项目,并且不要在通用FileSystemXmlApplicationContext中使用Web应用程序。 您可以使用如下结构:
配置您的Spring Web上下文:为您的根Spring上下文的@Configuration类设置getRootConfigClasses,为您的Web上下文配置@Configuration类的getServletConfigClasses
public class PhoneBookServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {PhonBookApplicationContext.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] {PhoneBookMvcContext.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
}
像这样配置您的spring Web上下文:
@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = {"it.valeriovaudi.web.controller","it.valeriovaudi.web.rest"})
@EnableWebMvc
public class PhoneBookMvcContext extends WebMvcConfigurerAdapter {
// Thymeleaf Config
/*
* <bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver"
p:prefix="/WEB-INF/templates/"
p:templateMode="HTML5"
p:suffix=".html"/>
<bean id="templateEngine"
class="org.thymeleaf.spring4.SpringTemplateEngine"
p:templateResolver-ref="templateResolver">
<property name="additionalDialects">
<set>
<bean class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect"/>
</set>
</property>
</bean>
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver"
p:templateEngine-ref="templateEngine"/>
*/
@Bean
public ServletContextTemplateResolver templateResolver(){
ServletContextTemplateResolver servletContextTemplateResolver = new ServletContextTemplateResolver();
servletContextTemplateResolver.setPrefix("/WEB-INF/templates/");
servletContextTemplateResolver.setSuffix(".html");
servletContextTemplateResolver.setTemplateMode("HTML5");
return servletContextTemplateResolver;
}
@Bean
public SpringTemplateEngine templateEngine(){
SpringTemplateEngine springTemplateEngine = new SpringTemplateEngine();
springTemplateEngine.setTemplateResolver(templateResolver());
springTemplateEngine.setAdditionalDialects(Collections.singleton(new SpringSecurityDialect()));
return springTemplateEngine;
}
@Bean
public ThymeleafViewResolver thymeleafViewResolver(){
ThymeleafViewResolver thymeleafViewResolver = new ThymeleafViewResolver();
thymeleafViewResolver.setTemplateEngine(templateEngine());
return thymeleafViewResolver;
}
/*
Message .properties sources
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
p:basenames="WEB-INF/messages/messages"/>
*/
@Bean
public MessageSource messageSource(){
ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
reloadableResourceBundleMessageSource.setBasenames("WEB-INF/messages/messages");
return reloadableResourceBundleMessageSource;
}
/*
<mvc:resources mapping="/resources*//**" location="web-resources/, classpath:/META-INF/resources/webjars/" />
<mvc:resources mapping="/favicon.ico" location="web-resources/img/favicon.jpg" />
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("/resources/**").addResourceLocations("web-resources/").addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/favicon.ico").addResourceLocations("web-resources/img/favicon.jpg");
}
}
对于此示例,我从一个开放源代码项目PhoneBook中汲取了灵感,但是关键是您已经像上面那样独立地从配置的bean中配置了上下文,以您配置的类的类型和项目结构为例需要使用Maven。
希望这可以帮助您
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.