gpt4 book ai didi

java - 在 SBT 构建中添加托管 libraryDependencies(任意长度)列表

转载 作者:可可西里 更新时间:2023-11-01 14:51:24 24 4
gpt4 key购买 nike

简而言之,我在 scala 中编写了一个工具,它从存储在本地目录中的 jar 列表生成一个 jar 列表,它解析给定的 repo 标识匹配每个本地 jar 的 groupID 并输出所有必要的信息以用于某人。我希望能够解析在运行时识别的依赖项列表(否则这是无用的),以便在为 hadoop 构建更复杂的应用程序时基本上自动化更新过程,以及测试不同构建和条件的程序兼容性。

Bottom Line: I have not found a solution which allows me to pass librarydependencies discovered within the build, to the build.

我尝试过的一些事情:

1) 在for循环中使用关键字

我在/project 目录中使用 Dependencies.scala 代码生成了 jarList,并将其添加到我的 build.sbt

jarList.foreach(x => 
libraryDependencies += x.GroupID % x.ArtifactID % x.Revision
)

2) 通过在我的/project/Dependencies.scala 文件中运行类似的内容,将找到的每个 libraryDependency 附加到 build.sbt 文件底部的一行来手动编辑 build.sbt

import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.io.IOException;

try{
val file =new File(new
File(".").getAbsolutePath().toString.replaceAll("^(.*)\\.(.*)$","$1$2")++"build.sbt")
if(!file.exists()){
file.createNewFile()
}
val fw = new FileWriter(file,true)
val bw = new BufferedWriter(fw)
val pw = new PrintWriter(bw)
pw.println(s"""libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.7.3" """.stripMargin)
pw.close();

println("Data successfully appended at the end of file")
}catch {
case ioe: IOException => println("Exception occurred:")
ioe.printStackTrace()
}

这个选项有点工作(如果我完全停止并重新启动构建)

3) 在另一个构建之前加载/运行一个 sbt 构建,问题是 SBT 似乎总是从每个 build.sbt 文件加载信息,导致与上述相同的问题。

有没有人试过这样做?或者有人对此有任何想法/建议吗?

谢谢

最佳答案

我想你可以选择第一个选项,稍微改变一下。在您的 build.sbt 文件中声明从您的 jarList 生成的模块 ID 列表:

lazy val jarDependencies: Seq[ModuleID] = jarList.map(x => x.GroupID % x.ArtifactID % x.Revision)

然后将其添加到libraryDependencies:

libraryDependencies ++= jarDependencies

请记住 build.sbt 包含纯 Scala 代码,可能只有很少的限制(比如有导致 Unit 的语句,例如调用 foreach, 是不允许的)。因此,了解某些声明的类型(libraryDependencies 的类型为 SettingKey[Seq[ModuleID]])应该有助于增加更多魔力。

关于java - 在 SBT 构建中添加托管 libraryDependencies(任意长度)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47296534/

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