使用 Shade 插件重定位功能的缺点
Downsides of using Shade plugin relocation feature
为了解决我的应用程序中的 jar 冲突,我使用了 shaded 插件的重定位功能。它对我有用,但我觉得这是一个 hack。我想了解使用重定位功能的缺点(如果有的话)。
主要问题是在直接定义包名(而不只是导入)的情况下它可能会失败。例如,如果您使用反射并通过其名称(包括包名称)实例化 a class ,它将生成错误的。当在清单中定义包时,可能会出现类似的问题(为此有一个转换器)。有关详细信息,请参阅 plugin info。
另一个可能成为问题的地方是使用相同依赖项的第三方依赖项。例如考虑提供的包 A。如果包 A 依赖于重定位的包,它将在 运行 时间内使用提供的实例而不是重定位的实例。这可能会导致不可预见的影响。
另一个问题是,在某些情况下,程序包可能包含一些 initialized/static 信息(例如,它下载了一些信息一次或有一些大静态 table)。在这些情况下,重要的是要了解现在有两个完全独立的包实例。
为了解决我的应用程序中的 jar 冲突,我使用了 shaded 插件的重定位功能。它对我有用,但我觉得这是一个 hack。我想了解使用重定位功能的缺点(如果有的话)。
主要问题是在直接定义包名(而不只是导入)的情况下它可能会失败。例如,如果您使用反射并通过其名称(包括包名称)实例化 a class ,它将生成错误的。当在清单中定义包时,可能会出现类似的问题(为此有一个转换器)。有关详细信息,请参阅 plugin info。
另一个可能成为问题的地方是使用相同依赖项的第三方依赖项。例如考虑提供的包 A。如果包 A 依赖于重定位的包,它将在 运行 时间内使用提供的实例而不是重定位的实例。这可能会导致不可预见的影响。
另一个问题是,在某些情况下,程序包可能包含一些 initialized/static 信息(例如,它下载了一些信息一次或有一些大静态 table)。在这些情况下,重要的是要了解现在有两个完全独立的包实例。