在清理我的多模块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不能识别它的使用,我能做些什么来解决这个问题?
1条答案
按热度按时间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
对于库来说是好的,但它会损害应用程序。