由以下原因引起:java.lang.NoClassDefFoundError: org/springframework/context/event/GenericApplicationListener 从上述错误中,应用程序无法找到从jar依赖项定义的类。GenericApplicationListener 是从 spring 版本 4.2 添加的。
将您的 spring 版本升级到 4.2 并重新检查。
Spring Boot 为您管理一堆依赖项,并允许您在不指定版本的情况下添加它们。Spring Boot 显然是基于 Spring 框架的,并且使用最新和最好的,所以你应该不惜一切代价避免修复 Spring 框架版本来使用自己。
如果您已升级到较新版本(包括错误修复或其他内容),请确保在升级 Spring 引导之前删除覆盖,因为它所需的新版本可能与您的覆盖不兼容。
如果您使用的其他项目也在 Spring 框架上提供依赖管理(例如 Spring Cloud),请确保 Spring Boot 的依赖管理优先。使用 Maven,请确保将 BOM 添加为<依赖项管理>中的第一个条目。spring-boot-dependencies
13.2 马文
Maven用户可以从项目继承以获得合理的默认值。父项目提供以下功能:spring-boot-starter-parent
- Java 1.6 作为默认编译器级别。
- UTF-8 源编码。
- “依赖关系管理”部分,允许您省略从 POM 继承的常见依赖关系的标记。
<version>
spring-boot-dependencies
- 合理的资源过滤。
- 合理的插件配置(exec plugin,surefire,Git commit ID,shade)。
- 对特定于配置文件的文件(例如和)
application.properties
application.yml
application-foo.properties
application-foo.yml
关于最后一点:由于默认配置文件接受 Spring 样式占位符 (),Maven 过滤更改为使用占位符(您可以使用 Maven 属性覆盖它)。${…}
@..@
resource.delimiter
13.2.1 继承起始父级
要将项目配置为从 继承 只需设置 :spring-boot-starter-parent
parent
您应该只需要在此依赖项上指定 Spring 引导版本号。如果导入其他启动器,则可以安全地省略版本号。 |
通过该设置,还可以通过重写自己项目中的属性来重写单个依赖项。例如,要升级到另一个 Spring 数据发布系列,您需要将以下内容添加到您的 .pom.xml
检查 spring-boot-依赖项以获取支持的属性列表。 |
13.2.2 在没有父 POM 的情况下使用 Spring Boot
不是每个人都喜欢从POM继承。您可能有自己的需要使用的公司标准父级,或者您可能只是希望显式声明所有 Maven 配置。spring-boot-starter-parent
如果您不想使用 ,您仍然可以通过使用依赖项来保留依赖项管理(但不是插件管理)的好处:spring-boot-starter-parent
scope=import
该设置不允许使用上述属性覆盖单个依赖项。要获得相同的结果,您需要在条目之前在项目中添加一个条目。例如,要升级到另一个 Spring 数据发布系列,您需要将以下内容添加到您的 .dependencyManagement
spring-boot-dependencies
pom.xml
在上面的示例中,我们指定了一个 BOM,但可以通过这种方式覆盖任何依赖项类型。 |
13.2.3 更改 Java 版本
选择相当保守的Java兼容性。如果您想遵循我们的建议并使用更高版本的 Java 版本,您可以添加一个属性:spring-boot-starter-parent
java.version
13.2.4 使用 Spring Boot Maven 插件
Spring Boot 包含一个 Maven 插件,可以将项目打包为可执行 jar。如果您想使用它,请将插件添加到您的部分:<plugins>
如果使用 Spring Boot 启动父 pom,则只需要添加插件,除非要更改父项中定义的设置,否则无需对其进行配置。 |