2015-02-17 88 views
2

我试图运行这个Spring Session example available here但我用Maven代替了Gradle。 a)运行WAR文件和b)在WildFly8.2服务器中部署WAR运行时弹出会话运行时错误+ Spring Boot应用程序

快速搜索表明,问题可能是pom.xml中引用的各种依赖关系之间的冲突版本。

什么是根本原因&解决此错误?

错误,同时运行或部署WAR

java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalArgumentException: Cannot instantiate interface org.springframework.boot.SpringApplicationRunListener : org.springframework.boot.context.event.EventPublishingRunListener 
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:381) 
    at org.springframework.boot.SpringApplication.getRunListeners(SpringApplication.java:352) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:274) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:952) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:941) 
    at hello.Application.main(Application.java:25) 
    ... 6 more 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
    at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:377) 
    ... 11 more 
Caused by: java.lang.NoSuchFieldError: INSTANCE 
    at org.springframework.boot.SpringApplication.asUnmodifiableOrderedSet(SpringApplication.java:1031) 
    at org.springframework.boot.SpringApplication.getListeners(SpringApplication.java:930) 
    at org.springframework.boot.context.event.EventPublishingRunListener.<init>(EventPublishingRunListener.java:47) 
    ... 16 more 

这里是我的完整的pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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>org.springframework</groupId> 
    <artifactId>gs-spring-boot</artifactId> 
    <version>0.1.0</version> 
    <!-- ... --> 
    <packaging>war</packaging> 
    <!-- ... --> 
    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.1.10.RELEASE</version> 
    </parent> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
<!--   <exclusions> 
       <exclusion> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
       </exclusion> 
      </exclusions> -->   
     </dependency> 

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

<!-- <dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
    <version>3.1.1.RELEASE</version> 
</dependency> --> 


    <dependency> 
     <groupId>org.springframework.session</groupId> 
     <artifactId>spring-session-data-redis</artifactId> 
     <version>1.0.0.RELEASE</version> 
     <type>pom</type> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>4.1.3.RELEASE</version> 
    </dependency> 

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-web</artifactId> 
    <version>3.2.5.RELEASE</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-config</artifactId> 
    <version>3.2.5.RELEASE</version> 
</dependency> 

<dependency> 
    <groupId>com.orange.redis-embedded</groupId> 
    <artifactId>embedded-redis</artifactId> 
    <version>0.5</version> 
</dependency> 


     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 



    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    </properties> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
      <plugin> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>integration-test</goal> 
          <goal>verify</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 
+0

这异常意味着你必须混合依赖版本。不要为Spring依赖关系指定自己的版本,如果您需要额外的Spring组件,请使用Spring IO。 – chrylis 2015-02-17 21:41:32

+0

@chrylis你是说,对于所有的Spring组依赖项,我最好删除该版本? – yathirigan 2015-02-17 21:43:27

+0

@chrylis我删除了除“spring-session-data-redis”之外的所有Spring组依赖项的版本号。如果我没有提到这个版本,我得到的Maven构建错误,指出我应该提到这个版本。但是,如果我仅为此提供一个版本并生成WAR,我仍然会收到上述原始错误。 – yathirigan 2015-02-17 21:49:40

回答

5

我看到清理了几个地方:

  • 您的pom中存在冲突的Spring版本。具体来说,spring-web-4.1.3是明确列出的,Spring Boot 1.1.10在Spring 4.0.8中引入。删除你的pom中的每个版本(Spring Session & embedded-redis除外),然后让spring-boot-starter-parent管理它
  • 删除spring-web依赖关系(它是已经包含在弹簧引导起动网)
  • 与弹簧引导启动安全更换安全依赖

您可以找到以下总结:

<?xml version="1.0" encoding="UTF-8"?> 
<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>org.springframework</groupId> 
    <artifactId>gs-spring-boot</artifactId> 
    <version>0.1.0</version> 
    <!-- ... --> 
    <packaging>war</packaging> 
    <!-- ... --> 
    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.1.10.RELEASE</version> 
    </parent> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-tomcat</artifactId> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.session</groupId> 
      <artifactId>spring-session-data-redis</artifactId> 
      <version>1.0.0.RELEASE</version> 
      <type>pom</type> 
     </dependency> 

     <dependency> 
      <groupId>com.orange.redis-embedded</groupId> 
      <artifactId>embedded-redis</artifactId> 
      <version>0.5</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
    </properties> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
      <plugin> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>integration-test</goal> 
          <goal>verify</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 
+0

这里有一点需要注意 - 您正在使用com.orange.redis-embedded,这是原始嵌入式redis项目的一个分支: https://github.com/kstyrc/embedded-redis – kstyrc 2015-04-03 07:02:54