2013-06-20 55 views
10

Tôi có một bản dựng sbt có độ tuổi. Đó là lớn và phức tạp và thật khó để biết bắt đầu làm sạch nó ở đâu. Dường như sbt giữ lại rất nhiều siêu dữ liệu về cấu trúc của bản dựng, với các phụ thuộc lẫn nhau, các nhiệm vụ được đặt tên, phạm vi, v.v. Với tất cả siêu dữ liệu này, có vẻ như sẽ khá dễ dàng để nhảy vào và đo lường thời gian mỗi nhiệm vụ riêng biệt, với phạm vi, mất. Làm điều này trong mã thay vì dựa trên thông điệp tường trình không chỉ cảm thấy sạch hơn, mà còn có ưu điểm là xử lý độc đáo với các bản dựng đồng thời và các công cụ phức tạp khác có thể gây ra thời gian đăng nhập sai lệch.Cấu hình sbt cấu hình

Hiện có bất kỳ cơ sở nào để thực hiện việc này không? Nó không giống như một cái gì đó chúng ta có thể làm trong một người dùng "" xây dựng, nhưng có lẽ một plugin SBT có thể móc một khởi động nhiệm vụ và duy trì/sản xuất một báo cáo lớn của timings ở cuối. Nó thực sự sẽ giúp tập trung nỗ lực của tôi vào việc cải thiện những điều chậm chạp mà không lãng phí thời gian vào những điều xảy ra ngay lập tức.

Trả lời

3

Tôi đã hoàn toàn cùng một vấn đề một thời gian trước đây. Xem mã nguồn của https://github.com/sbt-android-mill/sbt-android-mill

Dưới đây là thông báo - https://groups.google.com/forum/#!msg/scala-on-android/TsmmJA4uvQ4/LMvAxuovXoMJ Chú ý đến trường thời gian trong nhật ký SBT.

Vài trình bao bọc + thứ gì đó như đồng hồ bấm giờ (phụ thuộc) và bạn sẽ có báo cáo HTML hấp dẫn với thống kê lược tả.

+0

Cảm ơn! Tôi đã thử đọc mã nhưng không thể hiểu ngay những gì bạn đang làm để thực hiện công việc này. Bạn chỉ cần xác định một cấu trúc dự án kinh điển được thiết kế, hay bạn đã tìm ra cách để móc sbt để bạn có thể xây dựng sbt tùy ý thời gian? Vấn đề của tôi là tôi có một bản dựng khổng lồ đã sẵn sàng và tôi muốn cấu hình nó mà không cần thêm các cuộc gọi đồng hồ bấm giờ vào mọi nhiệm vụ (bao gồm cả các nhiệm vụ được xác định trước của sbt). Cách tiếp cận của bạn có xử lý điều đó không? – copumpkin

+0

Tôi xác định 'totalStopwatch',' profilingGroups' tại _sbt/android/mill/Mill.scala_ và quấn mã của riêng tôi bằng 'stopwatchGroup (" blabla ") {code}'. Tôi quấn các nhiệm vụ SBT chung với lược tả (ví dụ: _sbt/android/mill/compile/Compile.scala_) như 'biên dịch trong Configurations.Compile << = compile in Configurations.Compile dependsOn compileStageCorePre' - bắt đầu đồng hồ bấm giờ và ' compileStageCore < <= compileStageCore dependsOn (compileStagePrepare, biên dịch trong Configurations.Compile) '- stop Đồng hồ bấm giờ. Đây là một nhiệm vụ dòng ở dưới cùng của _Compile.scala_ Chú ý đến phương thức 'taskPre' và' taskPost'. – Ezhik

+0

Nếu bạn có dự án thực sự phức tạp IMHO thì tốt hơn là dành chút thời gian để thêm hồ sơ và tối ưu hóa nó mà lãng phí thời gian tháng này qua tháng khác. – Ezhik