You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

maven-dependency-plugin仅非clean运行时报告未使用依赖,clean验证正常

Maven依赖分析异常:clean verify通过但单独verify检测到未使用测试依赖

问题详情

  • 执行mvn clean verify时,依赖分析插件输出正常:
[INFO] --- dependency:3.8.1:analyze-only (analyze-only) @ server ---
[INFO] No dependency problems found
  • 仅执行mvn verify时,依赖分析报错,检测到多组未使用的测试依赖:
dependency:3.8.1:analyze-only (analyze-only) @ server ---
[ERROR] Unused declared dependencies found:
[ERROR]    org.springframework.cloud:spring-cloud-contract-verifier:jar:4.1.4:test
[ERROR]    com.toomuchcoding.jsonassert:jsonassert:jar:0.8.0:test
[ERROR]    com.jayway.jsonpath:json-path:jar:2.9.0:test
[ERROR]    org.assertj:assertj-core:jar:3.24.2:test

问题原因

这是Spring Cloud Contract插件的增量构建缓存问题:

  • 执行clean verify时,插件会重新生成契约测试源码(默认在target/generated-test-sources/contracts),并将这些源码纳入编译和依赖分析的扫描范围,此时依赖分析能识别到这些测试依赖被生成的代码使用,因此不会报错。
  • 仅执行verify时,Maven复用之前编译好的测试类文件,但Spring Cloud Contract在增量构建流程中,不会主动将生成的测试源码目录告知依赖分析插件。依赖分析插件只能扫描到已编译的测试类,却无法关联到对应的生成源码,导致误判这些依赖“未被使用”。

解决方案

方案1:让依赖分析插件扫描生成的测试源码目录

修改pom.xml中maven-dependency-plugin的配置,明确添加生成的测试源码目录到扫描范围:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.8.1</version>
    <executions>
        <execution>
            <id>analyze-only</id>
            <goals>
                <goal>analyze-only</goal>
            </goals>
            <configuration>
                <sourceDirectories>
                    <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
                    <sourceDirectory>${project.build.testSourceDirectory}</sourceDirectory>
                    <!-- 加入Spring Cloud Contract生成的测试源码目录 -->
                    <sourceDirectory>${project.build.directory}/generated-test-sources/contracts</sourceDirectory>
                </sourceDirectories>
            </configuration>
        </execution>
    </executions>
</plugin>

方案2:在verify前清理测试类文件

绑定maven-clean-plugin到verify阶段,仅清理测试输出目录,避免复用旧的编译文件干扰分析:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-clean-plugin</artifactId>
    <version>3.3.2</version>
    <executions>
        <execution>
            <id>clean-test-classes</id>
            <phase>verify</phase>
            <goals>
                <goal>clean</goal>
            </goals>
            <configuration>
                <filesets>
                    <fileset>
                        <directory>${project.build.testOutputDirectory}</directory>
                    </fileset>
                </filesets>
            </configuration>
        </execution>
    </executions>
</plugin>

方案3:忽略测试依赖的未使用检查

如果不需要对测试依赖做未使用检测,可以在插件配置中关闭该规则:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.8.1</version>
    <executions>
        <execution>
            <id>analyze-only</id>
            <goals>
                <goal>analyze-only</goal>
            </goals>
            <configuration>
                <!-- 忽略非编译范围的依赖检查(即test、provided等) -->
                <ignoreNonCompile>true</ignoreNonCompile>
            </configuration>
        </execution>
    </executions>
</plugin>

内容的提问来源于stack exchange,提问作者Jakub Bochenski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:52:43