0

示例: http: //grepcode.com/file/repository.cloudera.com/content/repositories/releases/com.cloudera.hadoop/hadoop-core/0.20.2-320/org/apache/hadoop/util/RunJar。爪哇

我正在查看 RunJar.main(),并观察到它解压缩了指定的 jar 文件,然后从原始 jar 和本地分解副本中的几个根构建了一个精心制作的类路径。

这是为了什么?单独包含原始 jar 文件未涵盖的爆炸 jar 支持哪些用例?

4

1 回答 1

1

Hadoop 支持 Jar-in-jars(即 jar 文件中的 lib 文件夹中的 jar 文件 - 满口是不是!)。当前的 Java 版本都不支持 jar-in-jar(我认为有传言称 8 支持这一点,至少我认为我已经读过一些关于此的抱怨,但当然不要引用我的话),这就是Hadoop 实现了这一点。

当你可以创建一个 uber-jar 时,为什么还要做 jar-in-jar?构建时间可能是一个原因(解压和重新打包巨大的依赖罐可能会增加几秒钟甚至几分钟的构建时间)。我敢肯定还有更多,但对我来说,我认为由此产生的罐子“更干净”——我猜是个人喜好。

于 2012-05-09T23:18:55.847 回答