在我的项目构建定义中,Android范围中的SettingKey useProguard设置为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仍然是正确的,而不是我所期望的假。
首先,整个方法对我来说很重要。假设改变sbt-android-plugin不是一个选项,那么我怎么解决这个问题?
其次,为什么这种方法不能正常工作?
答案 0 :(得分:2)
根据我对您的问题的理解,您希望依赖的设置不同,具体取决于依赖于它的内容。这没有意义 - 依赖性既可以满足也可以不满足,依赖它的依赖性不会出现在等式中。
您的解决方案对我来说似乎很满意。另一种方法是制作两个项目,指向相同的源,但是使用不同的proguard设置和不同的目标,所以一个将构建而另一个没有proguard,并且两者都将保持其状态。然后,您可以随心所欲地切换项目。