我有下面的API兼容性问题,并寻找解决方法。
TL;DR是否有方法为Java中的类创建一个“别名”?也就是说,让com.acme.foo.SomeEnum 成为 com.acme.bar.SomeEnum**?**的别名的一些诡计
说来话长。(为了避免指指点点,我对它进行了一点整理。)
我正在使用一个强大的Java工具,它也支持插件。没有严格定义的公共API (在某种意义上,您可以或不能接触到什么),只是通常的私有/受保护/包/公共类、方法和字段。有定义的扩展点(比如扩展com.acme.plugin.Plugin类),但是您可以访问该工具内部的一个很大的区域。
在最近的小版本更新(如1.2.3 -> 1.2.4)中,工具开发人员将一个枚举类转移到另一个包-- com.acme.foo.SomeEnum变成了com.acme.bar.SomeEnum。我认为这只是一个琐碎的重构,而不是一个序列化的重组。
然而,这个类似乎已经被许多插件所使用。其结果是,这些插件现在与最新版本不兼容。大多数插件都很有用,但没有得到积极的维护。人们几年前就写过了--而且他们只是工作了几年,更新了几十个版本。因此,这有可能对该工具的插件生态系统产生负面影响。
我的问题是,在Java中是否存在为com.acme.bar.SomeEnum创建“别名”com.acme.bar.SomeEnum的方法?这将允许旧插件继续使用新版本的工具。
什么类装载机的把戏?在JavaScript中,这将是微不足道的,但在Java中呢?
我为什么要问这个。我是Maven插件的作者之一,它包装了这个工具。所以我可以很容易地把我的糖加到这杯咖啡里,就像课堂装载机等等。如果有一种技术方法来实现这一工作,我将能够保存该工具的大部分插件生态系统--至少对Maven用户是这样的。
我已经联系了这个工具的供应商,但不确定成功与否。
只是想说清楚--我不是这个工具的供应商。我(a)为工具编写插件(更新插件没有大问题)和(b)是the-tool-maven-plugin的作者,它允许在Maven构建中执行工具。我也咨询了很多工具和关心它的生态系统(有很多非常有用的插件)。
更新
故事结束:该工具的开发人员考虑到了我的观点,并决定恢复更改。这点值得尊敬!
https://stackoverflow.com/questions/27433291
复制相似问题