【发布时间】:2023-02-13 22:46:20
【问题描述】:
我希望我的项目在启动时在后端库之间切换,可以选择不将它们都隐藏到生成的 Jar 中,同时具有对它们的完全编译可见性。 我还想避免使用 Class.forName 加载后端。
你能帮我理解这些是否会导致未着色库的 ClassNotFoundError 而哪些不会?
- 留下一个未使用的类字段,类型来自该库
- 留下未使用的方法,带有参数或从此库返回
- 在后端类中引用此库,该库将仅有条件地加载,如
backend = isNewBackend ? new FancyBackend() : new OldBackend()如果所有这些都导致错误,是否有更简单的策略?
【问题讨论】:
-
您是否正在考虑使用类路径上的两个库进行编译,然后在打包/部署期间从最终部署结果中删除其中一个?如果是,请问为什么?
-
它是一个框架,用户启动 boostrap 进程指定框架应该使用哪个后端库。由于库非常重,避免将未使用的库隐藏到 jar 中是有益的。此外,它可以防止从另一个库中意外加载类,因为目前已知它们的静态初始化在 ClassLoader 上非常繁重。
标签: java reflection dependencies