gpt4 book ai didi

scala - 使用 SBT,我怎样才能有两个不同设置的不同 proguard 任务?

转载 作者:行者123 更新时间:2023-12-01 05:20:11 24 4
gpt4 key购买 nike

我有一个单一的源代码树,我可以从中构建两个不同的 jar;称它们为 JarA 和 JarB。

我正在使用 sbt proguard plugin通过 proguard 运行每个 jar。这个插件创建了一个名为 proguard 的任务键.

我想做两个任务键,比如proguardAproguardB ,构建各自的 jar 。我在 project/Build.scala 中定义了这些任务键。

但是,我如何为每个任务使用一组不同的 proguard 选项?也就是说,我如何为设置 proguardOptions 使用不同的值?

我尝试了各种任务范围设置的排列,例如

proguardA <<= proguard in proguardA
proguardSettings in (proguard in proguardA) <<= ...
proguardSettings in proguardA <<= ...

等等

但这些都没有生效。

最佳答案

有几种方法可以给这只猫剥皮,但我会在 build.scala 中定义两个配置:

val ProguardA = config("proguarda") extend(Compile)
val ProguardB = config("proguardb") extend(Compile)

这将使您在 Compile 之外拥有一整套设置。 .由于 xsbt-proguard-plugin 目前将选项硬编码为 Compile配置,我们需要修复 proguard任务。
import sbt._
import Keys._
import ProguardPlugin._

object Builds extend Build {
val ProguardA = config("proguarda") extend(Compile)
val ProguardB = config("proguardb") extend(Compile)

val xProguardArgs = TaskKey[List[String]]("x-proguard-args")

val appSettings = Defaults.defaultSettings ++
inConfig(ProguardA)(proguardSettings ++ Seq(
proguard <<= (packageBin in Compile, xProguardArgs, baseDirectory) map { (_, args, bd) => proguardTask(args, bd) },
xProguardArgs <<= proguardArgsTask,
proguardOptions := Seq(keepMain("Test"))
)) ++
inConfig(ProguardB)(proguardSettings ++ Seq(
proguard <<= (packageBin in Compile, xProguardArgs, baseDirectory) map { (_, args, bd) => proguardTask(args, bd) },
xProguardArgs <<= proguardArgsTask,
proguardOptions := Seq(keepAllScala),
minJarPath <<= (crossTarget, projectID, artifact, scalaVersion, artifactName) { (t, module, a, sv, toString) => t / toString(ScalaVersion(sv, CrossVersion binaryScalaVersion sv), module.copy(revision = module.revision + ".min-b"), a) asFile }
)) ++
Seq(
// name := "foo",
// libraryDependencies ++= appDependencies
)

lazy val app = Project("app", file("."), settings = appSettings)
}

您现在可以作为 proguarda:proguard 运行它或做任务 proguarda这取决于 proguard in ProguardA .您还必须更改 minJarPath或运行 clean每次避免缓存拿起错误的 jar 。

关于scala - 使用 SBT,我怎样才能有两个不同设置的不同 proguard 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17036065/

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