簡體   English   中英

當依賴存在時,Spring沒有找到類異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM