确定要素所需的最小罐子

时间:2010-05-08 23:50:43

标签: java frameworks jar

如何确定框架的此类功能需要哪些罐子?例如,为了仅支持依赖注入,需要在Spring的所有可用jar中使用哪些jar?

3 个答案:

答案 0 :(得分:4)

通过静态分析代码,然后创建仅包含这些类的新JAR,可以通过确定应用程序中实际使用哪些类来创建最小JAR的工具。 (我记得使用Zelix Classmaster来做这件事,但有很多选择。)

将这些工具用于像Eclipse这样的DI框架的问题包括:

  • 现有的只跟踪静态依赖项。如果动态加载类,则必须专门告诉分析器每个类。一般来说DI框架,特别是Spring充满了动态加载,包括对应用程序代码不透明的动态加载。

  • 现有工具通过创建新的输出JAR来工作,而不是告诉您哪些输入JAR未被使用。虽然如果从封闭源代码库创建一个收缩包装的应用程序,重新打包JAR是可以的,但这通常是不受欢迎的,并且对于某些开源许可证可能存在问题。当然你不想用Spring做这件事。

理论上,有人可以编写一个工具来帮助。实际上,该工具需要(例如)知道如何从注释,XML和运行时从更高阶配置创建的bean描述符中提取的Spring配置中提取动态类依赖关系(例如,SpringSecurity就是这样做)。这是一个很大的问题。即使这样,您也会遇到这样的问题:由于JAR修剪过程中遗漏了所需的JAR,因此安装平台上的布线“小”更改可能会失败。

在我看来,更实际的替代方案是:

  • 如果您使用Maven / Ivy来管理您的依赖项,请查看依赖关系图,删除似乎不再需要的依赖关系......以及测试,测试,测试。
  • 手动剥离看似未使用的JAR ......并进行测试,测试,测试。
  • 别担心。适度级别的未使用JAR可能会为部署和webapp启动时间增加一两秒,但这通常无关紧要。 (但如果确实如此......见上文。)

答案 1 :(得分:1)

这就是为什么一些旧的Java项目最终拥有600个Jars和一个200 MB的war文件,用于10,000行应用程序。如果你不仔细管理它会有点痛苦......

答案 2 :(得分:0)

您应该向框架提供商询问或阅读文档。在某些情况下(动态加载)静态分析所需的罐子可能是不够的,有时你可能会得到太多的罐子。

我曾经为某种“实用程序”库做了一些ftp帮助程序。它依赖于一些apache ftp jar。如果您从未使用过库中的ftp功能,则不需要ftp jar,但对代码的静态分析可能会说您需要它。这是你应该记录的东西。