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

maven-assembly-plugin打包后缺失compile范围传递依赖batik-js-1.7.jar

解决maven-assembly-plugin打包时compile范围传递依赖缺失的问题

遇到这种传递依赖没被打包进去的情况,我之前也碰过几次,咱们一步步排查解决:

第一步:确认依赖的真实状态

首先得搞清楚batik-js-1.7.jar的scope到底是不是compile,有没有被意外修改或者排除:

  • 运行更详细的依赖树命令,查看完整的依赖属性:
    mvn dependency:tree -Dverbose
    
    重点看batik-js那一行的scope标注,如果显示的不是compile,可能是传递过程中scope被上游依赖调整了(比如设成了provided或者optional)。
  • 也可以用mvn dependency:list命令,直接列出所有依赖及其scope,结果更直观。

第二步:检查maven-assembly-plugin的配置

大概率是插件的依赖收集规则出了问题:

  • 打开你的assembly描述文件(一般是src/main/assembly/xxx.xml),找到<dependencySets>部分:
    • 如果配置里明确写了<scope>runtime</scope>,那compile范围的依赖会被过滤掉,改成<scope>compile</scope>或者直接删掉这个标签(默认会包含compile和runtime范围的依赖)。
    • 检查有没有<exclusions>规则不小心把batik-js排除了,这类配置要及时移除:
      <exclusion>
        <groupId>org.apache.xmlgraphics</groupId>
        <artifactId>batik-js</artifactId>
      </exclusion>
      
  • 给个标准的依赖集配置示例参考:
    <dependencySets>
      <dependencySet>
        <outputDirectory>lib</outputDirectory>
        <useProjectArtifact>false</useProjectArtifact>
        <!-- 不设置scope时,默认包含compile和runtime依赖 -->
      </dependencySet>
    </dependencySets>
    

第三步:排查是否是可选依赖导致的

如果上面两步都没问题,那很可能batik-transcoder把batik-js标记成了可选依赖(<optional>true</optional>),这种情况下Maven默认不会传递该依赖。
解决办法是在你的pom.xml里显式添加这个依赖:

<dependency>
  <groupId>org.apache.xmlgraphics</groupId>
  <artifactId>batik-js</artifactId>
  <version>1.7</version>
  <scope>compile</scope>
</dependency>

验证解决效果

修改完配置后,执行mvn clean package,然后去输出目录(比如target/xxx-assembly/lib)里检查batik-js-1.7.jar是否存在。
如果还是有问题,可以先运行mvn dependency:copy-dependencies -DoutputDirectory=temp-deps,把所有依赖复制到临时目录:如果batik-js在里面,说明是assembly插件的配置问题;如果不在,那就是依赖本身的识别问题,回到第一步重新排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:36:18