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 を実行したいのでしょうか? ビルド時間が理由になる可能性があります (巨大な depedant jar をアンパックして再パックすると、ビルド時間が数秒または数分長くなる可能性があります)。もっとあると確信していますが、私にとっては、結果の瓶は「よりきれい」だと思います-個人的な好みだと思います.

于 2012-05-09T23:18:55.847 に答える