2015-06-08 11 views
7

Tôi đang viết một plugin sbt để trừu tượng hóa một số bản mẫu liên quan đến một số plugin phổ biến mà tôi sử dụng. Trong nhiệm vụ này, one of the plugin 's tôi đang cố định cấu hình có số requires được đặt thành noTrigger yêu cầu bật plugin một cách rõ ràng trong cài đặt dự án.Kích hoạt hoàn toàn plugin SBT bên trong một plugin SBT khác

Với SBT AutoPlugin nếu tôi đặt requires = BuildInfoPlugintrigger = allRequirements thì cài đặt sẽ tự động tải nếu tôi bật một cách rõ ràng các plugin cơ sở, hoặc nếu tôi đặt đòi hỏi như trên và trigger = noTrigger sau đó thêm một cách rõ ràng các plugin Tôi đang làm việc trên sẽ nhập khẩu cơ sở plugin là tốt.

/* Requires enablePlugins(BuildInfoPlugin) to be explicitly set on project, 
    then the settings in this plugin will automatically load. */ 
object BuildInformation extends AutoPlugin { 

    override def requires = BuildInfoPlugin 
    override def trigger = allRequirements 
} 

.

/* Requires enablePlugins(BuildInformation) to be explicitly set on project, 
    which will automatically import BuildInfoPlugin */ 
object BuildInformation extends AutoPlugin { 

    override def requires = BuildInfoPlugin 
} 

Có cách nào để plugin dẫn xuất nhập khẩu plugin cơ bản một cách rõ ràng mà không yêu cầu bản thân plugin phái sinh được thêm rõ ràng không? (Ví dụ PlayScala plugin play framework kéo trong SBT-địa-đóng gói với nó tải, nhưng PlayScala được yêu cầu để được kích hoạt một cách rõ ràng)

Một điều tôi đã nghĩ đến việc chỉ được mở rộng plugin cơ sở, và ghi đè là gây phương pháp được allRequirements, nhưng đã tự hỏi nếu có một phương pháp sạch hơn/ưa thích hơn.

Trả lời

0

Không hơn tao nhã hơn phát sinh, nhưng có lẽ linh hoạt hơn:

object DerivedPlugin extends AutoPlugin { 

    override def trigger: PluginTrigger = allRequirements 
    override def requires = JvmPlugin 

    val autoImport = BasePlugin.autoImport 

    override lazy val projectSettings = BasePlugin.projectSettings 

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