java.lang.ClassNotFoundException: org.springframework.context.event.GenericApplicationListener

由以下原因引起:java.lang.NoClassDefFoundError: org/springframework/context/event/GenericApplicationListener 从上述错误中,应用程序无法找到从jar依赖项定义的类。GenericApplicationListener 是从 spring 版本 4.2 添加的。

将您的 spring 版本升级到 4.2 并重新检查。

http://stackoverflow.com/questions/31489947/noclassdeffounderror-genericapplicationlistener-when-switching-from-spring-bo

 

Spring Boot 为您管理一堆依赖项,并允许您在不指定版本的情况下添加它们。Spring Boot 显然是基于 Spring 框架的,并且使用最新和最好的,所以你应该不惜一切代价避免修复 Spring 框架版本来使用自己。

如果您已升级到较新版本(包括错误修复或其他内容),请确保在升级 Spring 引导之前删除覆盖,因为它所需的新版本可能与您的覆盖不兼容。

如果您使用的其他项目也在 Spring 框架上提供依赖管理(例如 Spring Cloud),请确保 Spring Boot 的依赖管理优先。使用 Maven,请确保将 BOM 添加为<依赖项管理>中的第一个条目​spring-boot-dependencies​

http://stackoverflow.com/questions/31489947/noclassdeffounderror-genericapplicationlistener-when-switching-from-spring-bo

 

13.2 马文

Maven用户可以从项目继承以获得合理的默认值。父项目提供以下功能:​spring-boot-starter-parent​

  • Java 1.6 作为默认编译器级别。
  • UTF-8 源编码。
  • “依赖关系管理”部分,允许您省略从 POM 继承的常见依赖关系的标记。​<version>​​spring-boot-dependencies​
  • 合理的资源过滤
  • 合理的插件配置(exec pluginsurefireGit commit IDshade)。
  • 对特定于配置文件的文件(例如和)​application.properties​​application.yml​​application-foo.properties​​application-foo.yml​

关于最后一点:由于默认配置文件接受 Spring 样式占位符 (),Maven 过滤更改为使用占位符(您可以使用 Maven 属性覆盖它)。​${…}​​@..@​​resource.delimiter​

13.2.1 继承起始父级

要将项目配置为从 继承 只需设置 :​spring-boot-starter-parent​​parent​

<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>


您应该只需要在此依赖项上指定 Spring 引导版本号。如果导入其他启动器,则可以安全地省略版本号。

通过该设置,还可以通过重写自己项目中的属性来重写单个依赖项。例如,要升级到另一个 Spring 数据发布系列,您需要将以下内容添加到您的 .​pom.xml​

<properties>
<spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>


检查 spring-boot-依赖项以获取支持的属性列表。

13.2.2 在没有父 POM 的情况下使用 Spring Boot

不是每个人都喜欢从POM继承。您可能有自己的需要使用的公司标准父级,或者您可能只是希望显式声明所有 Maven 配置。​spring-boot-starter-parent​

如果您不想使用 ,您仍然可以通过使用依赖项来保留依赖项管理(但不是插件管理)的好处:​spring-boot-starter-parent​​scope=import​

<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.4.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

 

该设置不允许使用上述属性覆盖单个依赖项。要获得相同的结果,您需要在条目之前在项目中添加一个条目。例如,要升级到另一个 Spring 数据发布系列,您需要将以下内容添加到您的 .​dependencyManagement​​spring-boot-dependencies​​pom.xml​

<dependencyManagement>
<dependencies>
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Fowler-SR2</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.4.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

 


在上面的示例中,我们指定了一个 BOM,但可以通过这种方式覆盖任何依赖项类型。

13.2.3 更改 Java 版本

选择相当保守的Java兼容性。如果您想遵循我们的建议并使用更高版本的 Java 版本,您可以添加一个属性:​spring-boot-starter-parent​​java.version​

<properties>
<java.version>1.8</java.version>
</properties>

 

13.2.4 使用 Spring Boot Maven 插件

Spring Boot 包含一个 Maven 插件,可以将项目打包为可执行 jar。如果您想使用它,请将插件添加到您的部分:​<plugins>​

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

 


如果使用 Spring Boot 启动父 pom,则只需要添加插件,除非要更改父项中定义的设置,否则无需对其进行配置。