使用 Eclipse Transforms 将 class 替换为另一个:无法修复 ClassFormatError
Replacing a class with another using Eclipse Transforms: can't fix ClassFormatError
我正在使用 Equinox Transforms 将 class 替换为 class 路径上的自定义版本。转换机制似乎工作正常,我 return 自定义 class 的 InputStream
来自我的转换器 class.
的 public InputStream getInputStream(InputStream inputStream, URL transformerUrl)
但是 class 的加载随后会导致带有消息 Truncated class file
的 ClassFormatError
。我能想到的唯一原因是 Java 版本之间的不匹配,但我已经尽我所能来消除它作为问题的根源,但无济于事。
我在已安装的 JRE 首选项中从 Eclipse 中删除了一个 JDK。我确保所有涉及的插件的执行环境都具有相同的 Java 版本,并且构建路径上的 JRE 指定了相同的执行环境。目标和产品执行环境的定义也相同。我在工作区中执行了 clean all
并重新启动了 eclipse 和我的运行时 workbench 多次,-clean
。毕竟,我仍然得到错误。
如果不是 Java 版本导致此错误,还有什么可能? Equinox Transforms 页面说它可以用来转换 class 资源。有人真的这样做过吗?
在 osgi 中有一种更标准化的方法来替换 class,即 WeavingHook
。此挂钩应注册为服务,并有可能动态增强 class.
参见 the WeavingHook Javadoc or a concrete example with Aries Proxy, which dynamically create proxies with the help of asm (WovenProxyGenerator)。
我正在使用 Equinox Transforms 将 class 替换为 class 路径上的自定义版本。转换机制似乎工作正常,我 return 自定义 class 的 InputStream
来自我的转换器 class.
public InputStream getInputStream(InputStream inputStream, URL transformerUrl)
但是 class 的加载随后会导致带有消息 Truncated class file
的 ClassFormatError
。我能想到的唯一原因是 Java 版本之间的不匹配,但我已经尽我所能来消除它作为问题的根源,但无济于事。
我在已安装的 JRE 首选项中从 Eclipse 中删除了一个 JDK。我确保所有涉及的插件的执行环境都具有相同的 Java 版本,并且构建路径上的 JRE 指定了相同的执行环境。目标和产品执行环境的定义也相同。我在工作区中执行了 clean all
并重新启动了 eclipse 和我的运行时 workbench 多次,-clean
。毕竟,我仍然得到错误。
如果不是 Java 版本导致此错误,还有什么可能? Equinox Transforms 页面说它可以用来转换 class 资源。有人真的这样做过吗?
在 osgi 中有一种更标准化的方法来替换 class,即 WeavingHook
。此挂钩应注册为服务,并有可能动态增强 class.
参见 the WeavingHook Javadoc or a concrete example with Aries Proxy, which dynamically create proxies with the help of asm (WovenProxyGenerator)。