gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:23:00 24 4
gpt4 key购买 nike

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

我不确定如何最好地解决这个问题。从我读到的内容来看,命令似乎可以完成工作,因为它可以执行与当前 session 所看到的状态不同的任务。我试图像这样创建这样的命令:

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 不是一个选项,那么我还能如何解决这个问题?

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

最佳答案

根据我从您的问题中了解到的,您希望依赖项的设置有所不同,具体取决于依赖项的内容。这是没有意义的——依赖关系要么得到满足,要么不满足,依赖于它的东西不会出现在等式中。

你的解决方案对我来说似乎很满意。另一种方法是制作两个项目,指向相同的源,但具有不同的 proguard 设置和不同的目标,因此一个使用 proguard 构建,另一个不使用 proguard,两者都将保持它们的状态。然后你可以做任何你想做的事情,只是切换项目。

关于scala - 使用 SBT,您如何在运行时执行具有不同 Setting[T] 值的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8904568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com