Vì vậy 0__ 's bình luận là đúng vào lúc:
Bạn đã đọc Readme. Nó đặc biệt gợi ý rằng bạn có thể thay đổi các cài đặt cacheUnzip
và cacheOutput
. Tôi sẽ cho nó thử.
cacheUnzip
là tính năng tối ưu hóa, nhưng cacheOutput
thì không. Mục đích của cacheOutput
là để bạn có được bình giống hệt nhau khi nguồn của bạn không thay đổi. Đối với một số người, điều quan trọng là các lọ đầu ra không thay đổi một cách không cần thiết. Thông báo trước là nó kiểm tra hàm băm SHA-1 của tất cả các tệp * .class. Vì vậy, các readme nói:
Nếu có một số lượng lớn các tập tin lớp học, điều này có thể mất một thời gian dài
Từ những gì tôi có thể nói, giải nén và áp dụng các chiến lược hợp nhất lại với nhau mất khoảng một phút hoặc hai, nhưng việc kiểm tra SHA-1 dường như mất mãi mãi. Dưới đây là assembly.sbt
rằng tắt output cache:
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
Việc lắp ráp hoàn thành trong 58 giây sau khi làm sạch, và chạy thứ hai mà không làm sạch mất 15 giây. Mặc dù một số lần chạy mất hơn 200 giây.
Nhìn vào nguồn, tôi có thể tối ưu hóa cacheOutput
, nhưng hiện tại, tắt tính năng này sẽ giúp lắp ráp nhanh hơn nhiều.
Sửa:
Tôi đã thêm #96 Performance degradation when adding library dependencies dựa trên câu hỏi này, và thêm một số bản sửa lỗi trong sbt-assembly 0.10.1 cho SBT 0,13.
lắp ráp sbt 0.10.1 tránh băm nội dung của các mục đã giải nén của các thư viện phụ thuộc. Nó cũng bỏ qua bộ nhớ đệm jar được thực hiện bởi sbt, vì sbt-assembly đã được lưu vào bộ nhớ đệm đầu ra.
Các thay đổi khiến nhiệm vụ lắp ráp chạy ổn định hơn. Sử dụng tia lửa nặng như dự án mẫu, nhiệm vụ lắp ráp được chạy 15 lần sau một sự thay đổi nguồn nhỏ. sbt-assembly 0.10,0 mất 19 +/- 157 giây (chủ yếu là trong vòng 20 giây, nhưng đi 150 + giây 26% số lần chạy). Mặt khác, sbt-assembly 0.10.1 mất 16 +/- 1 giây.
Bạn đã đọc [Readme] (https://github.com/sbt/sbt-assembly) chưa. Nó đặc biệt gợi ý rằng bạn có thể thay đổi các thiết lập 'cacheUnzip' và' cacheOutput'. Tôi sẽ cho nó thử. –
@ 0__ Tôi đã đọc nó nhưng có vẻ như tất cả các tùy chọn tối ưu hóa được bật theo mặc định – darkjh
Có, nhưng chúng là _options_. Nó có thể là giá trị cố gắng để chuyển đổi mỗi tùy chọn bộ nhớ đệm _off_ để xem nếu nó làm cho một sự khác biệt. –