Maven依赖分析错误地宣布spring-boot-starter-data-jpa为未使用

ruyhziif  于 2023-10-17  发布在  Maven
关注(0)|答案(1)|浏览(219)

在清理我的多模块Maven项目的依赖项时,我遇到了这个问题。在其中一个子模块中

mvn dependency:analyze

宣布以下依赖项未使用

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

但它实际上是使用的,这是很容易验证删除它;那么由于缺少软件包com.zaxxer.hikari等,构建失败。
还有一些在spring-boot-starter-data-jpa中声明的依赖关系(例如:org.hibernate:hibernate-core)被要求使用。但没有申报。
Sping Boot 包含在父pom中,如下所示

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

我尝试为spring-boot-starter-data-jpa设置导入范围,但这并没有改变什么。
为什么dependency:analyze不能识别它的使用,我能做些什么来解决这个问题?

xxhby3vn

xxhby3vn1#

我不确定在spring-boot项目中使用maven-dependency-plugin强制依赖是不是一个好主意,问题是dependency:analyze检查生成的字节码并验证pom中定义的唯一编译时依赖。然而,在spring-boot项目中,它们的依赖项确实包含了很多运行应用程序所需的基础设施,但编译代码不需要这些东西(即,运行时依赖关系),因此,在spring-boot项目中管理maven-dependency-plugin的一般想法如下:

  • 将所有非编译时依赖项标记为runtime,即<scope>runtime</scope>
  • 告诉maven-dependency-plugin忽略运行时依赖关系,即<ignoreNonCompile>true</ignoreNonCompile>(另外,<ignoreAllNonTestScoped>true</ignoreAllNonTestScoped>可能会有帮助)

另一方面,做上面的事情没有多大意义,因为我们只是把混乱转移到另一个地方,更好的想法是把项目分成子模块,并适当地管理这些子模块中的依赖关系。
底线是:dependency:analyze对于库来说是好的,但它会损害应用程序。

相关问题