即使是简单的 Spring Boot 应用程序 jar 也包含许多您的应用程序永远不会使用的依赖项和功能。所有这些东西:
应该加载它需要时间
许多这些类应该被实例化、初始化并且会消耗内存和资源。
对于内存占用可能是代价(例如https://run.pivotal.io/pricing/)和/或启动时间很重要的微服务架构和云原生应用程序来说,这可能是至关重要的。
例如spring-boot-autoconfigure-2.1.6.RELEASE.jar (1.2Mb) 包含couchbase、freemaker、cassandra和许多其他的,有 99% 的可能性永远不会用于您的特定项目。或者spring-core-5.1.8.RELEASE.jar (1.2Mb) 包含KotlinDetector之类的类。严重地?在核心库中?我永远不会使用这种充满 OOP 反模式的丑陋语言。为什么我应该在我的应用程序中关注它?
我为什么要为所有这些无用的东西买单?
我试图使用 ProGuard 来摆脱所有未使用的类和方法。但是对于使用反射 API、AOP 甚至调试信息的 Spring Boot、Hibernate 等来说似乎没有办法!ProGuard 甚至无法在没有错误的情况下完成,抱怨缺少某些类。
使用jlink、GraalVM 原生镜像和原生构建的另一个想法。我发现了一堆关于那个的文章。据我了解,目前不可能将其用于 Spring Boot 应用程序。
Spring Boot 是构建应用程序的好工具。
问题:有没有办法从你最终的 Spring Boot jar/war 中删除所有未使用的东西?