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

自定义Maven打包插件依赖传递失效问题排查

问题分析与解决方案

我一眼就注意到你在自定义ArtifactHandler里设置了<includesDependencies>true</includesDependencies>,这正是导致依赖传递失效的核心原因!

为什么这个配置会出问题?

这个配置的作用是告诉Maven:你的myproj类型制品已经内置了所有依赖(类似Maven自带的jar-with-dependencies打包方式)。当Maven看到这个标记时,会自动跳过解析该依赖的传递依赖——这就是为什么cli项目的依赖树里看不到model,你的自定义Mojo也无法获取到这个依赖的根本原因。

修复步骤

  1. 修改你的自定义插件中components.xml里的ArtifactHandler配置,将<includesDependencies>true</includesDependencies>改为<includesDependencies>false</includesDependencies>:
<component>
  <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
  <role-hint>myproj</role-hint>
  <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
  <configuration>
    <type>myproj</type>
    <extension>myproj</extension>
    <packaging>myproj</packaging>
    <addedToClasspath>true</addedToClasspath>
    <!-- 关键修改:改为false,恢复正常依赖传递 -->
    <includesDependencies>false</includesDependencies>
  </configuration>
</component>
  1. 重新安装依赖链上的项目,确保修改生效:
# 先清理并安装model项目
cd model
mvn clean install

# 再清理并安装model-impl项目
cd ../model-impl
mvn clean install
  1. 验证修复效果:
    在cli项目目录下执行依赖树命令:
mvn dependency:dependency-tree

此时你应该能看到完整的三级依赖树:

[INFO] com.corp.nodes:myproj-cli:myproj:1.0.0-SNAPSHOT
[INFO] \- com.corp.:myproj-model-impl:myproj:1.0.0-SNAPSHOT:compile
[INFO]    \- com.corp.:myproj-model:myproj:1.0.0-SNAPSHOT:compile

同时你的自定义Mojo也应该能正常获取到model依赖了。

额外说明

如果之后你需要制作包含所有依赖的myproj制品(类似胖包),建议单独实现一个自定义打包目标(比如package-with-deps),而不是修改全局的ArtifactHandler配置——这样既能满足特殊打包需求,又不会破坏正常的依赖传递逻辑。

内容的提问来源于stack exchange,提问作者Matt McMinn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:40:22