2011-09-08 30 views
22

Có thể ghi đè hoặc sửa đổi các nhiệm vụ SBT tích hợp (như biên dịch) để phụ thuộc vào các tác vụ tùy chỉnh trong Build.scala của riêng tôi không? Ghi đè ví dụ: "biên dịch" trực tiếp là không thể vì nó đã được định nghĩa với val lười biếng và do đó đề cập đến super.compile phát ra một lỗi trình biên dịch "siêu có thể không được sử dụng trên giá trị lười biếng".Thêm phụ thuộc nhiệm vụ mới vào các nhiệm vụ SBT tích hợp?

+0

Có thể trùng lặp cho SBT 0.13 http://stackoverflow.com/q/8554992/1305344 –

Trả lời

5

Kể từ khi câu hỏi này xuất hiện khi Googling làm thế nào để thêm một sự phụ thuộc trong SBT, và câu trả lời hiện tại là deprecated as of 0.13.x và loại bỏ trong 1.0, đây là câu trả lời được cập nhật, giả định rằng printAction là nhiệm vụ mà compile nên phụ thuộc vào:

(Compile/compile) := ((Compile/compile) dependsOn printAction).value

7

Trả lời tự: http://code.google.com/p/simple-build-tool/wiki/ProjectDefinitionExamples#Insert_Task_Dependency nói với câu trả lời:

Nếu bạn đang sử dụng phiên bản 0.7.x SBT cũ hơn, bạn có thể làm điều này:

import sbt._ 
class SampleProject(info: ProjectInfo) extends DefaultProject(info) { 
    lazy val printAction = task { print("Testing...") } 
    override def compileAction = super.compileAction dependsOn(printAction) 
} 
+4

Xin lưu ý rằng đề xuất này chỉ hoạt động đối với 'cũ' SBT 0.7.x. 0.11 hiện tại thực hiện nó một cách khác nhau. –

+3

Phiên bản mới hoạt động như thế nào? – Hadesara

+1

Câu trả lời này đã lỗi thời. Xem [phiên bản cập nhật tôi vừa đăng] (https://stackoverflow.com/a/47654822/596329). – arussell84

17

Cập nhật: Xem câu trả lời arussell84 cho một cách hiện đại để làm điều này

Bạn sẽ có thể để làm điều đó như thế này:

trong một file .sbt:

compile <<= (compile in Compile) dependsOn jruby 

đâu JRuby là chìa khóa nhiệm vụ mà bạn đã định nghĩa trong một tập tin dự án/something.scala:

val jruby = TaskKey[Unit]("jruby", "run a jruby file") 

Ngoài ra, đây không phải là một phần của câu hỏi của bạn nhưng bạn chỉ có thể gọi thường xuyên đang Scala:

compile <<= (compile in Compile) map { result => 
    println("in compile, something") 
    result 
} 
+6

Có rất nhiều 'biên dịch trong đó tôi không thể làm việc ra cách này khái quát hóa để thêm phụ thuộc vào các nhiệm vụ khác. Tôi phải làm gì để thêm phụ thuộc vào 'giai đoạn'? –

+0

@ScottMorrison Tôi nghĩ bạn nói: 'stage << stage dependsOn jruby' – 0fnt

+2

Câu trả lời này đã lỗi thời. Xem [phiên bản cập nhật tôi vừa đăng] (https://stackoverflow.com/a/47654822/596329). – arussell84

0

Trong thư mục base_dir/project/ tạo một file build.sbt và đưa libraryDependencies += ... đó.

Đó là cách SBT thành ngữ để xây dựng "dự án xây dựng" của bạn, còn được gọi là "Xây dựng Meta".

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