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

M1 Mac构建遗留Java应用:mvn clean install报错找不到sun.misc.BASE64类

解决M1 Mac编译遗留Java项目时sun.misc.BASE64类找不到的问题

问题场景

在M1 Mac终端执行mvn clean install(已尝试Rosetta和原生模式)时,出现编译错误:

[ERROR] /Users/danieljohnson/Documents/manage/og/gems/ems/src/main/java/com/ems/hvac/utils/CryptographyUtil.java:[34,16] cannot find symbol
  symbol:   class BASE64Decoder
  location: package sun.misc
[ERROR] /Users/danieljohnson/Documents/manage/og/gems/ems/src/main/java/com/ems/hvac/utils/CryptographyUtil.java:[35,16] cannot find symbol
  symbol:   class BASE64Encoder
  location: package sun.misc

当前使用的JDK版本:

openjdk version "1.8.0_345"
OpenJDK Runtime Environment (Zulu 8.64.0.19-CA-macos-aarch64) (build 1.8.0_345-b01)
OpenJDK 64-Bit Server VM (Zulu 8.64.0.19-CA-macos-aarch64) (build 25.345-b01, mixed mode)

保留sun.misc的解决办法

1. 调整Maven编译插件参数,允许访问内部API

JDK 8开始默认限制了对sun.misc这类内部包的编译访问,需在pom.xml的maven-compiler-plugin中添加编译参数:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <compilerArgs>
                    <!-- 忽略符号文件,允许访问sun.misc内部类 -->
                    <arg>-XDignore.symbol.file</arg>
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

修改后重新执行mvn clean install即可。

2. 切换到x86_64架构的JDK 8(Rosetta模式)

M1原生的aarch64版本JDK 8对内部API的打包逻辑可能存在差异,可尝试切换到x86_64版本的Zulu 8:

  • 下载并安装x86_64版本的Zulu OpenJDK 8
  • 在终端中切换JDK环境:
    export JAVA_HOME=/path/to/zulu-8-x86_64
    
  • 重新执行编译命令

3. 引入包含sun.misc类的第三方依赖(备选)

如果上述方法无效,可尝试引入包含sun.misc.BASE64Encoder/Decoder的依赖到pom.xml:

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
    <scope>compile</scope>
</dependency>

注意:该依赖可能引入额外的兼容性问题,仅作为最后备选方案。

额外建议

虽然上述方法能临时解决编译问题,但sun.misc属于JDK内部API,已被废弃且在后续JDK版本中可能被完全移除。如果项目需要长期维护,建议逐步替换为标准库的java.util.Base64(JDK 8及以上支持),替换示例:
原代码:

import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;

// 编码操作
String encodedStr = new BASE64Encoder().encode(originalBytes);
// 解码操作
byte[] decodedBytes = new BASE64Decoder().decodeBuffer(encodedStr);

替换为:

import java.util.Base64;

// 编码操作
String encodedStr = Base64.getEncoder().encodeToString(originalBytes);
// 解码操作
byte[] decodedBytes = Base64.getDecoder().decode(encodedStr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:51:26