如何使用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
相关产品推荐
相关产品推荐

