运维开发网

scala – 使用SBT,如何使用不同的设置进行两个不同的proguard任务?

运维开发网 https://www.qedev.com 2020-07-25 09:41 出处:网络 作者:运维开发网整理
我有一个单一的源树,我可以从中构建两个不同的罐子;称他们为JarA和JarB. 我正在使用sbt proguard plugin通过proguard运行每个jar.此插件创建一个名为proguard的任务键. 我想制作两个任务键,比如proguardA和proguardB,它们构建了各自的罐子.我在project / Build.scala中定义了这些任务键. 但是,如何为每项任务使用不同的pro
我有一个单一的源树,我可以从中构建两个不同的罐子;称他们为JarA和JarB.

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

我想制作两个任务键,比如proguardA和proguardB,它们构建了各自的罐子.我在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目前硬编码编译配置选项,我们需要修复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创建任务proguarda.此外,您必须每次更改minJarPath或运行干净以避免缓存拾取错误的jar.

0

精彩评论

暂无评论...
验证码 换一张
取 消