timg.jpeg

问题描述

今天在使用maven compiler plugin编译Spring Boot工程的时候,工程错误出现:

can not resovel xxx,com.spring.framework.xxx :unkown xxx

原因分析

can not resovel xxx,那就是没办法找到这个符号或者函数,言下之意就是:依赖的东西或者jar不存在。但通过对比后发现,并不是所有的

解决办法

在依赖的配置中,需要给依赖的jar指定版本号。

比如:

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

需要指定版本号,正确的示例如下:

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

延伸知识点

那么为什么有的工程需要写版本号,有的却不需要呢?

原因是:如果在父级或者父级的父级pom.xml添加了依赖,且依赖已经声明了版本就不需要在子module中重新声明;另外如果在父类的pom配置中证明声明了DepencyManagement ,则也不需要在module中再声明version。

有一种情况例外:就是子module中的版本可能和父类的不一样,这个时候需要在子module中独自声明版本。

示例如下:


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

在父节点的pom.xml 文件中配置:

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

即可省去在dependencies中配置仔细依赖库的版本号。