ので0__のコメントは右側にある:
あなたがReadmeを読みました。具体的には、cacheUnzip
とcacheOutput
の設定を変更する可能性があります。私はそれを試してみるだろう。
cacheUnzip
はcacheOutput
ではありません。 cacheOutput
の目的は、ソースが変更されていない場合でも同じjarファイルを取得できるようにすることです。一部の人にとっては、出力ジャーが不必要に変更されないことが重要です。警告は、すべての* .classファイルのSHA-1ハッシュをチェックしていることです。だから、READMEは言う:
クラスファイルの数が多い場合には、これは私が言うことができるものから
長い時間がかかることがあり、一緒に解凍およびマージ戦略を適用する分を中心に取りSHA-1の検査は永久にかかるようです。ここでは、出力キャッシュをオフにしassembly.sbt
です:
import AssemblyKeys._ // put this at the top of the file
assemblySettings
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => {
case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first
case PathList("org", "apache", "commons", xs @ _*) => MergeStrategy.first // commons-beanutils-core-1.8.0.jar vs commons-beanutils-1.7.0.jar
case PathList("com", "esotericsoftware", "minlog", xs @ _*) => MergeStrategy.first // kryo-2.21.jar vs minlog-1.2.jar
case "about.html" => MergeStrategy.rename
case x => old(x)
}
}
assemblyCacheOutput in assembly := false
は、アセンブリは、クリーニング後58秒で終了し、クリーニングなしのセカンドランは15秒かかりました。ランのいくつかは200+秒もかかりましたが。ソースを見ると
、私はおそらくcacheOutput
を最適化することができますが、今のところ、それをオフにすると、アセンブリはるかに高速にする必要があります。
編集:
私はこの質問に基づいて#96 Performance degradation when adding library dependenciesを追加し、SBT 0.13のためにsbt-assembly 0.10.1にいくつかの修正を追加しました。
sbt-assembly 0.10.1は、依存ライブラリのjarファイルの解凍された項目のコンテンツハッシングを防ぎます。また、sbt-assemblyはすでに出力をキャッシュしているので、sbtによって行われたjarキャッシングをスキップします。
変更により、アセンブリタスクがより一貫して実行されます。 deps-heavy sparkをサンプルプロジェクトとして使用して、小さなソース変更後に15回のアセンブリタスクを実行しました。 sbt-アセンブリ0。10.0は19 +/- 157秒(主に20秒以内でしたが、実行時間は150+秒26%)でした。一方、sbt-assembly 0.10.1は16 +/- 1秒かかった。
[Readme](https://github.com/sbt/sbt-assembly)を読んだことはありますか?具体的には、あなたが 'cacheUnzip'と' cacheOutput'設定を変更するかもしれないことを示唆しています。私はそれを試してみるだろう。 –
@ 0__私はそれを読んだが、すべての最適化オプションはデフォルトでオンになっているようだ。 – darkjh
はい、しかし、それらは_options_です。違いがあるかどうかを確認するために、キャッシングオプション_off_のそれぞれを切り替えることは価値があるかもしれません。 –