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

如何使用JDK11通过ANT构建Beanshell 2.0b6版本

JDK11环境构建BeanShell 2.0b6解决方案

错误根因

BeanShell 2.0b6是多年前发布的老版本,原生适配JDK1.6及更低版本,代码中使用了JDK9+已彻底移除的Component.getPeer()内部API,同时依赖大量已废弃的Applet、旧输入事件常量等接口,所以无法直接在JDK11下完成编译。

可落地的构建方法

方法1:修改编译配置(无需换JDK,核心功能无损失)

该方法仅排除非核心的老旧AWT演示组件,不影响BeanShell核心脚本执行能力:

  • 拉取指定版本代码,进入项目根目录:
    git clone --depth 1 --branch 2.0b6 https://github.com/beanshell/beanshell.git
  • 修改build.xml中的javac配置,将原有的javac节点替换为以下内容:
<javac target="1.8" source="1.8" includeantruntime="false" encoding="UTF-8"
    srcdir="${src}" destdir="${classes}" debug="on">
    <classpath refid="classpath"/>
    <!-- 排除依赖废弃JDK API的非核心演示类 -->
    <exclude name="bsh/util/AWTConsole.java"/>
    <exclude name="bsh/util/AWTDemoApplet.java"/>
    <exclude name="bsh/util/AWTRemoteApplet.java"/>
    <exclude name="bsh/util/JConsole.java"/>
    <exclude name="bsh/util/JDemoApplet.java"/>
    <exclude name="bsh/util/JRemoteApplet.java"/>
</javac>
  • 执行编译命令:
    ant clean all
    编译完成后,可用的BeanShell jar包会生成在dist目录下。

方法2:切换JDK8构建(无需修改任何代码)

如果需要保留所有组件,直接将环境变量切换为JDK8,进入项目根目录执行ant即可完成全量编译,编译生成的jar包完全可以在JDK11环境下正常运行。

可选:保留AWT控制台组件的修改方法

如果一定要使用AWT控制台组件,只需修改src/bsh/util/AWTConsole.java第217行的错误代码:删除原有((java.awt.peer.TextComponentPeer)getPeer()).setCaretPosition(整行,替换为this.setCaretPosition(即可,其余废弃警告可以忽略,不会影响编译运行。

内容的提问来源于stack exchange,提问作者Ekaterina Ivanova iceja.net

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:30:01