gpt4 book ai didi

sbt - 用 SBT 0.13 中的 project.properties 替换 externalIvyFile 中的属性占位符?

转载 作者:行者123 更新时间:2023-12-01 02:18:49 24 4
gpt4 key购买 nike

我使用 SBT 0.13 .

我有一个使用 externalIvyFile(Def.setting(baseDirectory.value / "custom-name.xml")) 的外部 Ivy 文件在 build.sbt .

ivy.xml${branch} 形式的属性占位符.这些属性的值来自 project.properties .

我如何告诉 sbt 使用我的 project.properties填充占位符?

最佳答案

这是一个可能的解决方案:

  • 将您的 ivy.xml 重命名为 ivy.xml.template
  • ixy.xml.template 和 project.properties 必须位于基本文件夹
  • 将此添加到文件 base_folder/project/project/build.scala

  • .
    import java.io.FileInputStream
    import java.util.Properties
    import scala.collection.JavaConversions._
    import sbt._
    import Keys._

    object build extends Build {
    def readProperties(filename: String): Map[String, String] = {
    try {
    val prop = new Properties()
    prop.load(new FileInputStream(filename))
    prop.stringPropertyNames().map( k => (k,prop.getProperty(k))).toMap
    } catch {
    case e: Exception =>
    e.printStackTrace()
    Map()
    }
    }

    def processIvyXml(base: File): Seq[File] = {
    val properties = readProperties((base/"../project.properties").getAbsolutePath)
    val ivyXml: String = sbt.IO.read(base/"../ivy.xml.template")
    val result = properties.keys.foldLeft(ivyXml){
    (tmpXml,key) => tmpXml.replaceAll( "\\$\\{"+key+"\\}" , properties(key))
    }
    sbt.IO.write(base/"../ivy.xml",result)
    Seq()
    }

    lazy val root = project.in(file(".")).settings(
    resourceGenerators in Compile <+= (baseDirectory in Compile) map { base =>
    processIvyXml(base)
    }
    )
    }

    此文件在编译项目定义之前读取 project.properties 和 ivy.xml.template,并创建一个自定义的 ivy.xml,其中填充来自 project.properties 的值

    现在只需将 ivy.xml 添加到 .gitignore 即可。

    唯一要记住的是,任何时候修改 project.properties 都必须在 sbt 控制台上调用 reload(或重新启动 sbt)

    您也可以将其扩展为适用于其他文件,但我将把它作为练习留给您。

    关于sbt - 用 SBT 0.13 中的 project.properties 替换 externalIvyFile 中的属性占位符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22186495/

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