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

Android项目通过Bash调用jasn1编译ASN1文件Mac下报错求助

问题根因

你遇到的报错核心原因是Java 9及以上版本移除了原JDK内置的JAXB(Java Architecture for XML Binding)相关类库,你用的jasn1-compiler 1.9.0版本依赖Java 8内置的javax.xml.bind.DatatypeConverter类,Mac环境默认调用Java 11运行脚本时就会触发类不存在的错误。

你之前配置的-Dorg.gradle.java.home参数不生效,是因为这个参数仅控制Gradle自身运行使用的JDK版本,不会影响你在构建逻辑中调用的bash脚本里的java命令——脚本里直接调用的是系统PATH环境变量中默认的java(也就是你的Java 11),所以指定Gradle的JDK路径不会作用到ASN1编译流程上。


可行解决方案

方案1:修改bash脚本指定使用JDK 8运行

直接修改你的jasn1编译bash脚本,把java命令替换为你本地JDK 8的绝对路径即可,示例修改如下:

#!/bin/bash

# 新增:指定JDK8路径,直接用你之前配置的路径即可
JAVA_8_HOME="/Users/Shared/Jenkins/.jenkins/tools/hudson.model.JDK/JDK_1_8"

JARS_LOCATION="../build/libs-all"
MAIN_CLASS="org.openmuc.jasn1.compiler.Compiler"
SYSPROPS=""
PARAMS=""

SCRIPT_HOME=`dirname $0`

CLASSPATH=$(JARS=("$SCRIPT_HOME"/"$JARS_LOCATION"/*.jar); IFS=:; echo "${JARS[*]}")

for i in $@; do 
    if [[ $i == -D* ]]; then
        SYSPROPS="$SYSPROPS $i";
    else
        PARAMS="$PARAMS $i";
    fi
done

# 把原来的java替换成JDK8下的java绝对路径
"$JAVA_8_HOME/bin/java" $SYSPROPS -cp $CLASSPATH $MAIN_CLASS $PARAMS

方案2:不切换JDK版本,补充缺失的JAXB依赖

如果不想强制指定JDK 8运行,可以把JAXB相关的依赖包添加到你的libs目录下,补全缺失的类即可,需要添加的依赖如下:

  • javax.xml.bind:jaxb-api:2.3.1
  • com.sun.xml.bind:jaxb-impl:2.3.1
  • com.sun.xml.bind:jaxb-core:2.3.1
  • javax.activation:activation:1.1.1

把上述4个jar包放入你脚本读取的../build/libs-all目录后,Java 11环境下也能正常运行编译。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:48:03