2015-08-05 3 views
1

Я пытаюсь развернуть мое приложение Spring Boot (war) на автономном сервере Tomcat и каждый раз, когда я получаю сообщение об ошибке в журнале. Есть ли у вас какие-либо идеи по этому делу?Развертывание войны с Spring Boot в Tomcat

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) 
at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:199) 
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:615) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:465) 
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) 
at org.springframework.boot.context.web.SpringBootServletInitializer.run(SpringBootServletInitializer.java:119) 
at org.springframework.boot.context.web.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:110) 
at org.springframework.boot.context.web.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:69) 
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5156) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
... 10 more 

Caused by: java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 
at org.jboss.logging.Slf4jLoggerProvider.getLogger(Slf4jLoggerProvider.java:29) 
at org.jboss.logging.LoggerProviders.find(LoggerProviders.java:33) 
at org.jboss.logging.LoggerProviders.<clinit>(LoggerProviders.java:28) 
at org.jboss.logging.Logger.getLogger(Logger.java:2163) 
at org.jboss.logging.Logger$1.run(Logger.java:2263) 
at java.security.AccessController.doPrivileged(Native Method) 
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2227) 
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2214) 
at org.hibernate.validator.internal.util.logging.LoggerFactory.make(LoggerFactory.java:29) 
at org.hibernate.validator.internal.util.Version.<clinit>(Version.java:27) 
at org.hibernate.validator.internal.engine.ConfigurationImpl.<clinit>(ConfigurationImpl.java:66) 
at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41) 
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:276) 
at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:223) 
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor$Jsr303ValidatorFactory.run(ConfigurationPropertiesBindingPostProcessor.java:381) 
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.afterPropertiesSet(ConfigurationPropertiesBindingPostProcessor.java:174) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570) 
... 28 more 

Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
... 46 more 

Как вы можете видеть, я использую Tomcat 8.0.24, Spring загрузки 1.2.5.RELEASE и java.version 1,7.
Мой проект очень прост (он работает в банке):

1. Основное приложение:

@SpringBootApplication 
@ComponentScan 
public class Application extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(Application.class); 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 

2. Контроллер

@Controller 
public class IndexController { 

    @RequestMapping(value = {"", "/", "/home"}) 
    String index() { 
     return "index"; 
    } 
} 
//index.html is in the tamplates folder. 

3. Pom .xml

<groupId>org.test</groupId> 
<artifactId>demo</artifactId> 
<version>1</version> 
<packaging>war</packaging> 

<name>demo</name> 
<description>HelloWorld</description> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.2.5.RELEASE</version> 
    <relativePath/> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.7</java.version> 
    <!--<start-class>demo.Application</start-class>--> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-thymeleaf</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-tomcat</artifactId> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

... etc 

application.properties чистые.

+0

У вас есть что-нибудь в каталоге libs Tomcat? –

+0

Да, я знаю. Существуют libs: аннотации-api, каталино-муравьиные, каталино-га, каталино-хранители, каталиновые племена, каталина, ecj-4.4.2, el-api, jasper-el, jasper, jsp-api, servlet-api , tomcat-api, tomcat-coyote, tomcat-dbcp, tomcat-i18n, tomcat-jdbc, tomcat-jni, tomcat-util-scan, tomcat-util, tomcat-websocket, websocket-api. – IgorZ

+1

Я пробовал вашу точную настройку, и все работает нормально. Это должно быть то, что вы не показываете, или, может быть, попытайтесь восстановить свою войну, возможно, вы что-то изменили. –

ответ

0

Добавить зависимость от slf4j в вашем pom.xml.

Возможно, slf4j-api и реализация протокола jdk.

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.10</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-jdk14</artifactId> 
    <version>1.7.10</version> 
    <scope>runtime</scope> 
</dependency> 

Смотрите также how to log in tomcat using slf4j and java.util.logging

+0

Я пытался добавить slf4j раньше, но это не исправить. Такая же ошибка с этими зависимостями. – IgorZ

0

Добавить sl4j-апите банку в зависимости

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.12</version> 
</dependency> 
1

Я знаю, кто-то удалили мой пост предыдущего, но я все еще вижу это как проблема загрузчика классов.

... Я использую spring-hateoas вместе с весенним ботинком из войны в Tomcat ... и получаю ту же ошибку. Я надеюсь, что это может быть проблемой загрузчика классов, но пока не нашли правильного решения.

Избегание slf4j-api приведет к запуску приложения без LoggerFactory NoClassDefFoundError, но классы ненависти присутствуют только во время компиляции, а не во время выполнения.

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-hateoas</artifactId> 
    <exclusions> 
     <exclusion> 
      <artifactId>slf4j-api</artifactId> 
      <groupId>org.slf4j</groupId> 
     </exclusion> 
    </exclusions> 
</dependency> 
+0

довольно информативный, спасибо! – tsuda7

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