2012-03-14 34 views
8

Tôi cần phải xác định một nhiệm vụ tùy chỉnh tính toán tên của một lớp chính và sau đó chạy nó. Tôi đã suy nghĩ về một cái gì đó như thế nàyTạo một tác vụ mới chạy chương trình

customTask { 
    mainClass = compute main class name based on env 
    runMain(mainClass, jvm-args, fork=true) 
} 

và sau đó trong SBT tôi sẽ có thể chạy

SBT> tùy chỉnh nhiệm vụ

này có thể được thực hiện trong SBT 11,2?.

+0

Bạn đang bị mắc kẹt trên 0,11? Nếu bạn có thể nâng cấp lên 0,13, hãy xem câu trả lời của hình ảnh. Vào 0.11, phiên bản ngắn là bạn không thể sử dụng lại tác vụ 'runMain', thay vào đó, bạn nhìn vào mã nguồn sbt, xem những nhiệm vụ nào thực hiện nhiệm vụ đó, và sau đó thực hiện các cuộc gọi tương tự trong nhiệm vụ của riêng bạn. –

Trả lời

0

Cuối câu trả lời nhưng bạn có thể tạo ra nhiệm vụ SBT mới như đã đề cập trong tài liệu http://www.scala-sbt.org/release/docs/Detailed-Topics/Tasks#defining-a-new-task

Bạn có thể chạy bất kỳ mã scala như mã nhiệm vụ. Nhiệm vụ cũng có thể lấy đối số đầu vào.

IMO khá mạnh mẽ.

+0

Tài liệu được liên kết là tốt, nhưng bạn nên chú ý đến hộp kết hợp phiên bản ở đầu trang vì có sự khác biệt đáng kể giữa các phiên bản sbt khác nhau. – Beryllium

+0

Vấn đề ở đây là sử dụng lại chức năng từ một tác vụ đầu vào hiện có như 'runMain'. Xem https://github.com/sbt/sbt/issues/407 –

2

bạn cũng có thể cung cấp cho nó một thử .. Tôi hoạt động tốt đối với tôi -

lazy val testngRun = inputKey[Unit]("custom run task for testng") 

testngRun := { 
    val one = (runMain in Compile).fullInput(" org.testng.TestNG -testclass com.pg.acceptance.testcase.PfsLoginServiceTest").evaluated 
} 
+1

Lưu ý rằng phương thức 'fullInput' chưa được thêm vào sbt cho đến phiên bản 0.13. –

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