2014-06-11 15 views
9

Tôi muốn thực hiện lệnh shell - rm -r một thư mục - bất cứ khi nào dự án sbt của tôi xây dựng. Đây sẽ là trước compile.Làm thế nào để thực thi lệnh shell trước khi biên dịch tác vụ?

Lý do: Có tệp bộ nhớ cache không bao giờ được cập nhật. Nếu tôi xóa nó trước mỗi biên dịch, nó sẽ buộc cập nhật.

Vui lòng thông báo.

+0

Có. Tôi upvoted nó cho rõ ràng, và chỉ cần đánh dấu nó là trả lời sau khi xác minh chức năng là tốt. Chính xác những gì tôi đang tìm kiếm, cảm ơn bạn! –

Trả lời

13

Bạn có thể tạo một nhiệm vụ xóa các file:

val removeCacheTask = TaskKey[Unit]("removeCacheFile", "Deletes a cache file") 
val removeCacheSettings = removeCacheTask := { 
    import sys.process._ 
    Seq("rm", "/path/to/file") ! 
} 

Sau đó, yêu cầu nhiệm vụ được chạy trước khi biên dịch bằng cách thêm các thiết lập này để dự án của bạn:

Project(...).settings(
    removeCacheSettings, 
    compile in Compile <<= (compile in Compile).dependsOn(removeCacheTask) 
) 

Nguồn: https://groups.google.com/forum/#!topic/play-framework/4DMWSTNM4kQ


Trong build.sbt nó sẽ trông giống như sau:

lazy val removeCacheTask = TaskKey[Unit]("removeCacheFile", "Deletes a cache file") 

removeCacheTask := { 
    import sys.process._ 
    Seq("rm", "/path/to/file")! 
} 

compile in Compile <<= (compile in Compile).dependsOn(removeCacheTask) 
+1

Đây là một phao cứu sinh! Tôi nghĩ rằng điều này nên được trong tài liệu của Play – acjay

+1

Lưu ý rằng nếu bạn muốn tham khảo nhiệm vụ trong tiểu dự án, bạn phải đưa ra phạm vi hoặc nhiệm vụ sẽ không được tìm thấy trong tiểu dự án. Cách dễ nhất để viết là 'removeCacheTask trong Global: = {...}' –

6

@LimbSoup answer là tốt, nhưng có một số cải tiến cần xem xét.

Lệnh thực thi rm có thể không khả dụng trên các hệ điều hành khác không phải là rm, như Windows, do đó, an toàn hơn nhiều khi sử dụng phương thức sbt.IO.delete.

Vì đó là về việc xóa tệp, có nhiệm vụ clean dựa trên phương pháp def doClean(clean: Seq[File], preserve: Seq[File]): Unit (từ sbt.Defaults) và với những thay đổi thích hợp, nó cũng có thể giúp một số. Tôi nghĩ rằng nó sẽ yêu cầu một cấu hình mới, mặc dù.

Xem How to exclude files in a custom clean task? để biết một số hướng dẫn về tác vụ tùy chỉnh clean.

+0

Tôi đã thực hiện câu trả lời ở trên và hoạt động hoàn hảo. Bây giờ tôi đang xem xét việc mở rộng của bạn, vì vậy tôi cũng cảm ơn bạn vì điều này! –

Các vấn đề liên quan