2012-01-18 17 views
5

Trong định nghĩa xây dựng dự án của tôi, SettingKey useProguard trong phạm vi Android được đặt thành true. Đây là những gì tôi muốn theo mặc định. Tuy nhiên, khi tôi thực hiện một tác vụ cụ thể, tôi muốn sử dụngProProguard là false. Mọi thứ trong phạm vi Android đều đến từ sbt-android-plugin.Sử dụng SBT, làm cách nào để bạn thực hiện tác vụ với giá trị Thiết lập [T] khác khi chạy?

Tôi không chắc cách tốt nhất để giải quyết vấn đề này. Từ những gì tôi đọc nó có vẻ như một lệnh có thể nhận được công việc làm, vì nó có thể thực hiện một nhiệm vụ với một trạng thái khác với những gì phiên hiện tại của bạn nhìn thấy. Tôi đã cố gắng tạo một lệnh như vậy:

def buildWithoutProguard = Command.command("build-without-proguard") { state => 
    val extracted = Project.extract(state) 
    import extracted._ 

    val transformed = session.mergeSettings :+ (useProguard in Android := false) 
    val newStructure = Load.reapply(transformed, structure) 
    val newState = Project.setProject(session, newStructure, state) 
    Project.evaluateTask(buildAndRun, newState) 
    state 
} 

Tôi đang thêm lệnh vào cài đặt dự án của mình và chạy lệnh 'build-without-proguard' thực hiện tác vụ buildAndRun như mong muốn. Tuy nhiên, useProguard vẫn đúng thay vì false như tôi mong đợi.

Đầu tiên, toàn bộ cách tiếp cận này cảm thấy rất nặng nề với tôi. Giả sử thay đổi sbt-android-plugin không phải là một tùy chọn ở đây thì tôi sẽ giải quyết vấn đề này như thế nào?

Thứ hai, tại sao phương pháp này không hoạt động như vậy?

+0

bản sao có thể có của [Cách thay đổi cài đặt bên trong lệnh SBT?] (Http://stackoverflow.com/questions/14262798/how-to-change-setting-inside-sbt-command) –

Trả lời

2

Từ những gì tôi hiểu được từ câu hỏi của bạn, bạn muốn cài đặt khác nhau đối với phụ thuộc phụ thuộc tùy thuộc vào điều gì tùy thuộc vào nó. Điều này không có ý nghĩa - một sự phụ thuộc hoặc là thỏa mãn hoặc nó không phải là, và những gì phụ thuộc vào nó không đi vào phương trình.

Giải pháp của bạn có vẻ thỏa đáng với tôi. Một giải pháp thay thế sẽ là thực hiện hai dự án, trỏ đến cùng một nguồn, nhưng với các cài đặt bảo vệ khác nhau và mục tiêu khác nhau, vì vậy, một dự án sẽ xây dựng và cái kia không có proguard và cả hai sẽ giữ trạng thái của chúng. Sau đó bạn sẽ làm bất cứ điều gì bạn muốn chỉ cần chuyển đổi các dự án.

+0

Xin chào Daniel, cảm ơn vì câu trả lời. Dự án riêng biệt thực sự dường như là con đường để đi. Tôi vẫn còn tò mò tại sao lệnh không hoạt động như nó có vẻ như nó nên. – James

+0

Trục nhiệm vụ có làm gì đó giống như "thay đổi sự phụ thuộc dựa trên những gì phụ thuộc vào nó" không? Nếu bạn có tác vụ phụ thuộc vào cài đặt, cài đặt có thể có các giá trị khác nhau tùy thuộc vào tác vụ đang chạy không? –

+0

@ JamesMoore Không, nó không, và không có nó không thể. –

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