2015-02-17 261 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

相關問題