【问题标题】:Cross-building a project dependent on different versions of specific library交叉构建依赖于特定库的不同版本的项目
【发布时间】:2020-06-11 20:57:39
【问题描述】:

我需要构建依赖于特定库的不同版本的项目的不同版本。这些库版本在源代码级别上是兼容的。所以我想构建依赖于com.company:mylib:1.0com.company:myproject-mylib-1.0_2.12:1.0.0 和依赖于com.company:mylib:2.0com.company:myproject-mylib-2.0_2.12:1.0.0。我能想到的一种方式是使用环境变量来存储库版本,有没有更优雅的方式?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    嗯,其中一个你必须明确设置,然后另一个可以计算出来:

    libraryDependencies += "com.company" % "mylib" % (if (name.value.endsWith("1.0")) "1.0" else "2.0")`
    

    然后在构建期间您可以执行以下操作:

    sbt> ;compile;publish // <- e.g. for v 1.0
    sbt> set name := "myproject-mylib-2.0"
    sbt> ;compile;publish // <- e.g. for v 2.0
    

    如果你想让它更有原则,你可以定义一个新的键:

    val isNew = settingKey[Boolean]("Are we building a new version of a library")
    Global / isNew := false
    
    name := if (isNew.value) "myproject-mylib-2.0" else "myproject-mylib-1.0"
    libraryDependencies += "com.company" % "mylib" % (if (isNew.value) "2.0" else "1.0")`
    

    你会喜欢什么

    sbt> ;compile;publish // <- for v 1.0
    sbt> set isNew := true
    sbt> ;compile;publish // <- for v 2.0
    

    或从命令行

    sbt compile publish "set isNew := true" compile publish
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-24
      • 2020-12-06
      • 1970-01-01
      • 2019-06-29
      • 2014-07-07
      • 2019-02-25
      • 1970-01-01
      • 2011-06-20
      相关资源
      最近更新 更多