首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SBT,如何在运行时执行具有不同Setting[T]值的任务?

使用SBT,如何在运行时执行具有不同Setting[T]值的任务?
EN

Stack Overflow用户
提问于 2012-01-18 10:51:58
回答 1查看 997关注 0票数 5

在我的项目构建定义中,Android范围内的SettingKey useProguard被设置为true。这就是我默认想要的。然而,当我执行一个特定的任务时,我希望useProguard为false。Android作用域中的所有内容都来自sbt-android-plugin。

我不知道怎样才能最好地解决这个问题。据我所知,似乎命令可以完成任务,因为它可以执行与您当前会话看到的状态不同的任务。我尝试创建这样一个命令,如下所示:

代码语言:javascript
复制
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- task proguard’命令来执行所需的buildAndRun任务。然而,useProguard仍然是真的,而不是我期望的假。

首先,这整个方法让我感觉很重。假设在这里不能更改sbt-android-plugin,那么我还能怎么解决这个问题呢?

第二,为什么这种方法不能按原样工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-19 03:38:13

根据我对您问题的理解,您希望依赖项的设置根据依赖项的不同而有所不同。这没有意义--依赖关系要么得到满足,要么得不到满足,依赖于它的东西不会出现在等式中。

我对你的解决方案似乎很满意。另一种选择是创建两个项目,指向相同的源代码,但具有不同的proguard设置和不同的目标,因此一个项目将使用proguard构建,而另一个项目不使用proguard,并且两个项目都将保持其状态。然后你可以做任何你想做的事情,只要切换项目即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8904568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档