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

使用jqassistant扫描Spring Boot Jar时遇java.lang.LinkageError求助

排查jqassistant扫描Spring Boot Jar时的ANTLR版本冲突问题

问题背景

使用com.buschmais.jqassistant.cli-jqassistant-commandline-neo4jv4-2.1.0.jar扫描Spring Boot Jar,.jqassistant.yml配置如下:

jqassistant:
  skip: false
  plugins:
    - group-id: org.jqassistant.plugin
      artifact-id: jqassistant-spring-plugin
      version: 2.1.0-M1
    - group-id: org.jqassistant.plugin
      artifact-id: jqassistant-plantuml-report-plugin
      version: 2.0.1
  
  store:
    embedded:
      neo4j-plugins:
        - group-id: org.neo4j.procedure
          artifact-id: apoc
          version: 4.4.0.25

  scan:
    include:
      files:
        - Projects/jqassistant-springboot-project/libs/invoiceservice.jar       
    properties:
      file.exclude: /BOOT-INF/lib/**
    reset: true
    continue-on-error: true

              
  analyze:
    report:
      fail-on-severity: BLOCKER
    groups:
      - microservices

执行./jqassistant/bin/jqassistant.sh scan时出现ANTLR版本不匹配警告及java.lang.LinkageError,此前扫描正常,尝试指定ANTLR 4.9.2运行时版本后问题仍未解决。

排查与解决方案

1. 统一插件与核心版本

jqassistant核心版本为2.1.0,但spring插件使用里程碑版本2.1.0-M1,plantuml插件使用旧版本2.0.1,版本不一致极易引发依赖冲突。

  • 修改配置,将插件版本统一为2.1.0正式版:
    plugins:
      - group-id: org.jqassistant.plugin
        artifact-id: jqassistant-spring-plugin
        version: 2.1.0
      - group-id: org.jqassistant.plugin
        artifact-id: jqassistant-plantuml-report-plugin
        version: 2.1.0
    

2. 强制锁定ANTLR依赖版本

即使手动指定ANTLR版本,也可能被插件的传递依赖覆盖,需在配置中强制锁定版本:

  • 在.jqassistant.yml中添加全局依赖规则:
    jqassistant:
      # 保留原有配置...
      dependencies:
        - group-id: org.antlr
          artifact-id: antlr4-runtime
          version: 4.9.2
          scope: runtime
        - group-id: org.antlr
          artifact-id: antlr4
          version: 4.9.2
          scope: compile
    
  • 执行依赖树分析,确认版本是否生效:
    ./jqassistant/bin/jqassistant.sh dependency:tree | grep -i antlr
    

3. 验证Spring Boot Jar排除规则

虽然配置了file.exclude: /BOOT-INF/lib/**,但可能因规则未生效导致嵌套Jar中的ANTLR干扰扫描:

  • 开启DEBUG日志验证排除规则:
    scan:
      # 保留原有配置...
      logging:
        level: DEBUG
    
  • 尝试解压Spring Boot Jar后扫描目录,彻底避免嵌套依赖影响:
    scan:
      include:
        directories:
          - Projects/jqassistant-springboot-project/libs/invoiceservice-unpacked
    

4. 清理环境类路径污染

系统CLASSPATH环境变量可能包含其他版本的ANTLR,导致加载冲突:

  • 查看当前CLASSPATH:
    echo $CLASSPATH
    
  • 清空CLASSPATH后重新执行扫描:
    unset CLASSPATH && ./jqassistant/bin/jqassistant.sh scan
    

5. 排查APOC插件依赖冲突

APOC 4.4.0.25可能依赖特定版本的ANTLR,与jqassistant依赖冲突:

  • 尝试将APOC版本调整为与neo4jv4兼容的稳定版本,比如4.4.0.23,验证是否解决冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:53:14