Используя SBT, как вы выполняете задачу с другим значением Setting [T] во время выполнения? - PullRequest
5 голосов
/ 18 января 2012

В моем определении сборки проекта для параметра SettingKey useProguard в области Android установлено значение true. Это то, что я хочу по умолчанию. Однако когда я выполняю одну конкретную задачу, я хочу, чтобы useProguard был false. Все в области Android происходит от sbt-android-plugin.

Я не уверен, как лучше решить эту проблему. Из того, что я прочитал, похоже, что команда может выполнить работу, поскольку она может выполнить задачу с состоянием, отличным от того, что видит ваш текущий сеанс. Я пытался создать такую ​​команду так:

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
}

Я добавляю команду к настройкам своего проекта и запускаю команду «build-without-proguard», которая при необходимости выполняет задачу buildAndRun. Однако useProguard все еще имеет значение true, а не false, как я и ожидал.

Во-первых, весь этот подход кажется мне тяжелым. Если предположить, что изменение sbt-android-plugin здесь не вариант, то как еще я могу решить эту проблему?

Во-вторых, почему этот подход не работает как есть?

1 Ответ

2 голосов
/ 18 января 2012

Исходя из того, что я понимаю из вашего вопроса, вы хотите, чтобы настройка отличалась для зависимости в зависимости от того, что от нее зависит.Это не имеет смысла - зависимость либо удовлетворена, либо нет, и то, что от нее зависит, не входит в уравнение.

Ваше решение мне кажется удовлетворительным.Альтернативой может быть создание двух проектов, указывающих на один и тот же источник, но с разными настройками proguard и разными целями, поэтому один будет строить с другим, а другой без proguard, и оба сохранят свое состояние.Затем вы будете делать все, что хотите, просто переключая проекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...