执行mvn dependency:analyze时出现文件无法处理错误求助
Maven dependency:analyze 无法处理项目类文件问题排查
问题场景
执行mvn dependency:analyze命令时,项目所有模块均出现"无法处理"自身类文件的提示,但项目编译、运行完全正常,无法定位原因。父pom.xml配置了maven.compiler.plugin.version=3.10.0,指定release=17,编译器参数为-Xlint:all。
环境信息
- 操作系统:Win10 + Cygwin
- JDK版本:17
- Maven使用者:新手
执行命令及日志输出
$ mvn dependency:analyze -Dmaven.plugin.validation=VERBOSE [INFO] 正在扫描项目... [INFO] [INFO] -------------------< org.jjazzlab:org-jjazz-phrase >-------------------- [INFO] 正在构建 Phrase 1.0-SNAPSHOT [INFO] 来自 pom.xml [INFO] --------------------------------[ nbm ]--------------------------------- [INFO] [INFO] >>> dependency:2.8:analyze (default-cli) > test-compile @ org-jjazz-phrase >>> [INFO] [INFO] --- resources:3.3.1:resources (default-resources) @ org-jjazz-phrase --- [INFO] 正在将1个资源从src\main\resources复制到target\classes [INFO] [INFO] --- compiler:3.10.0:compile (default-compile) @ org-jjazz-phrase --- [INFO] 无需编译 - 所有类均为最新版本 [INFO] [INFO] --- nbm:4.8:manifest (default-manifest) @ org-jjazz-phrase --- [INFO] NBM插件生成清单文件 [INFO] [INFO] --- resources:3.3.1:testResources (default-testResources) @ org-jjazz-phrase --- [INFO] 跳过不存在的资源目录 D:\JeromeDocs\NetBeansProjects\JJazzLab\modules\Phrase\src\test\resources [INFO] [INFO] --- compiler:3.10.0:testCompile (default-testCompile) @ org-jjazz-phrase --- [INFO] 无源代码需要编译 [INFO] [INFO] <<< dependency:2.8:analyze (default-cli) < test-compile @ org-jjazz-phrase <<< [INFO] [INFO] [INFO] --- dependency:2.8:analyze (default-cli) @ org-jjazz-phrase --- 无法处理: org.jjazz.phrase.api.CyclicPositions 无法处理: org.jjazz.phrase.api.Grid 无法处理: org.jjazz.phrase.api.NoteEvent$AsNoteKey 无法处理: org.jjazz.phrase.api.NoteEvent 无法处理: org.jjazz.phrase.api.Phrase$6 无法处理: org.jjazz.phrase.api.Phrase 无法处理: org.jjazz.phrase.api.Phrases 无法处理: org.jjazz.phrase.api.PhraseSamples 无法处理: org.jjazz.phrase.api.SizedPhrase 无法处理: org.jjazz.phrase.api.SourcePhrase 无法处理: org.jjazz.phrase.api.SourcePhraseSet [WARNING] 发现已使用但未声明的依赖: [WARNING] com.google.guava:guava:jar:23.6-jre:compile [WARNING] 发现已声明但未使用的依赖: [WARNING] org.jjazzlab:org-jjazz-guava:jar:1.0-SNAPSHOT:compile [WARNING] org.jjazzlab:org-jjazz-chordleadsheet:jar:1.0-SNAPSHOT:compile [WARNING] org.jjazzlab:org-jjazz-midi:jar:1.0-SNAPSHOT:compile [WARNING] org.netbeans.api:org-openide-dialogs:jar:RELEASE170:compile [WARNING] org.netbeans.api:org-openide-util:jar:RELEASE170:compile [INFO] ------------------------------------------------------------------------ [INFO] 构建成功 [INFO] ------------------------------------------------------------------------ [INFO] 总耗时: 2.754 s [INFO] 完成时间: 2023-05-21T16:24:36+02:00 [INFO] ------------------------------------------------------------------------ [WARNING] [WARNING] 在4个插件中检测到插件验证问题 [WARNING] [WARNING] * org.apache.maven.plugins:maven-site-plugin:3.12.1 [WARNING] 插件问题: [WARNING] * 插件依赖已弃用的Maven 2.x兼容层,该层在Maven 4.x中可能不受支持 [WARNING] [WARNING] * org.apache.maven.plugins:maven-compiler-plugin:3.10.0 [WARNING] 声明位置: [WARNING] * org.jjazzlab:jjazzlab-parent:1.0-SNAPSHOT (C:\Users\Jerome\.m2\repository\org\jjazzlab\jjazzlab-parent\1.0-SNAPSHOT\jjazzlab-parent-1.0-SNAPSHOT.pom) @ 第35行 [WARNING] 在模块中使用: [WARNING] * org.jjazzlab:org-jjazz-phrase:1.0-SNAPSHOT (pom.xml) [WARNING] 插件问题: [WARNING] * 插件应在`provided`作用域中声明以下Maven构件: [org.apache.maven:maven-plugin-api:3.2.5, org.apache.maven:maven-model:3.2.5, org.apache.maven:maven-core:3.2.5, org.apache.maven:maven-settings:3.2.5, org.apache.maven:maven-model-builder:3.2.5, org.apache.maven:maven-repository-metadata:3.2.5, org.apache.maven:maven-aether-provider:3.2.5, org.apache.maven:maven-settings-builder:3.2.5, org.apache.maven:maven-artifact:3.2.5] [WARNING] [WARNING] * org.apache.netbeans.utilities:nbm-maven-plugin:4.8 [WARNING] 声明位置: [WARNING] * org.jjazzlab:org-jjazz-phrase:1.0-SNAPSHOT (pom.xml) @ 第16行 [WARNING] 在模块中使用: [WARNING] * org.jjazzlab:org-jjazz-phrase:1.0-SNAPSHOT (pom.xml) [WARNING] 插件问题: [WARNING] * 插件依赖已弃用的Maven 2.x兼容层,该层在Maven 4.x中可能不受支持 [WARNING] * 插件依赖plexus-container-default,该构件已停止维护(EOL) [WARNING] Mojo问题: [WARNING] * Mojo nbm:manifest (org.apache.netbeans.nbm.NetBeansManifestUpdateMojo) [WARNING] - 参数'localRepository'使用已弃用的参数表达式'${localRepository}':ArtifactRepository类型已弃用,应避免在Mojo中使用。 [WARNING] [WARNING] * org.apache.maven.plugins:maven-dependency-plugin:2.8 [WARNING] 声明位置: [WARNING] * 未知 [WARNING] 在模块中使用: [WARNING] * org.jjazzlab:org-jjazz-phrase:1.0-SNAPSHOT (pom.xml) [WARNING] 插件问题: [WARNING] * 插件是Maven 2.x插件,在Maven 4.x中将不受支持 [WARNING] * 插件依赖plexus-container-default,该构件已停止维护(EOL) [WARNING] Mojo问题: [WARNING] * Mojo dependency:analyze (org.apache.maven.plugin.dependency.analyze.AnalyzeMojo) [WARNING] - 实现了Plexus容器的`Contextualizable`接口,该接口已停止维护(EOL)。 [WARNING] [WARNING] [WARNING] 请通过调整插件配置或升级上述插件来修复报告的问题。如果没有可用升级,请告知插件维护者相关问题。 [WARNING] 如需查看更多或更少详情,请使用'maven.plugin.validation'属性,取值为(不区分大小写): [BRIEF, DEFAULT, VERBOSE] [WARNING]
问题原因及解决办法
1. 核心原因
日志中明确显示使用的是maven-dependency-plugin:2.8,这个版本是Maven 2.x时期的旧插件,对JDK 17编译的字节码兼容性不足,无法正确解析项目自身的类文件,因此抛出"无法处理"的提示。
2. 解决步骤
- 升级maven-dependency-plugin版本:在父pom.xml或模块pom.xml中添加/更新插件配置,使用支持JDK 17的最新稳定版本(推荐3.6.0及以上):
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.0</version> </plugin> </plugins> </build> - 重新执行
mvn dependency:analyze命令,此时插件应该能正常解析类文件,依赖分析结果也会更准确。
3. 其他插件警告处理
日志中提到的maven-site-plugin、nbm-maven-plugin等的警告,属于插件兼容性提示,不影响当前dependency:analyze的问题。如果需要适配未来Maven 4.x版本,可以逐步升级这些插件到支持Maven 3.x的最新版本。
4. 依赖分析误报修正
旧版本插件可能会导致"已使用但未声明"或"已声明但未使用"的误报,升级插件后可重新确认依赖状态:
- 对于
com.google.guava:guava这类"已使用但未声明"的依赖,建议显式添加到pom.xml中,避免依赖传递带来的潜在问题; - 对于标注为"已声明但未使用"的依赖,可结合实际代码确认是否真的未使用,再进行清理。
内容的提问来源于stack exchange,提问作者jjazzboss
相关产品推荐
相关产品推荐

