gpt4 book ai didi

scala - 如何将 "provided"依赖项添加回运行/测试任务的类路径?

转载 作者:行者123 更新时间:2023-12-03 01:32:55 24 4
gpt4 key购买 nike

这是一个示例 build.sbt :

import AssemblyKeys._

assemblySettings

buildInfoSettings

net.virtualvoid.sbt.graph.Plugin.graphSettings

name := "scala-app-template"

version := "0.1"

scalaVersion := "2.9.3"

val FunnyRuntime = config("funnyruntime") extend(Compile)

libraryDependencies += "org.spark-project" %% "spark-core" % "0.7.3" % "provided"

sourceGenerators in Compile <+= buildInfo

buildInfoPackage := "com.psnively"

buildInfoKeys := Seq[BuildInfoKey](name, version, scalaVersion, target)

assembleArtifact in packageScala := false

val root = project.in(file(".")).
configs(FunnyRuntime).
settings(inConfig(FunnyRuntime)(Classpaths.configSettings ++ baseAssemblySettings ++ Seq(
libraryDependencies += "org.spark-project" %% "spark-core" % "0.7.3" % "funnyruntime"
)): _*)

目标是拥有spark-core "provided"因此它及其依赖项不包含在程序集工件中,而是将它们重新包含在 run 的运行时类路径中- 和test -相关任务。

似乎使用自定义范围最终会有所帮助,但我对如何实际导致默认/全局运行/测试任务使用自定义 libraryDependencies 感到困惑。并希望覆盖默认值。我尝试过的事情包括:

(run in Global) := (run in FunnyRuntime)

诸如此类的事情都无济于事。

总结一下:这本质上是 Web 案例的概括,其中 servlet-api 处于“提供”范围内,并且运行/测试任务通常 fork 一个 servlet 容器,该容器确实为正在运行的代码提供了 servlet-api 。这里唯一的区别是我没有 fork 出一个单独的 JVM/环境;我只想手动增强这些任务的类路径,有效地“撤消”“提供的”范围,但以一种继续从程序集工件中排除依赖关系的方式。

最佳答案

对于我在 assembly.sbt 中使用的类似情况:

run in Compile <<= Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run)) 

现在“运行”任务使用所有库,包括标有“已提供”的库。无需进一步更改。

更新:

@rob 解决方案似乎是唯一适用于最新 SBT 版本的解决方案,只需添加到 build.sbt 中的 settings 即可:

run in Compile := Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run)).evaluated,
runMain in Compile := Defaults.runMainTask(fullClasspath in Compile, runner in(Compile, run)).evaluated

关于scala - 如何将 "provided"依赖项添加回运行/测试任务的类路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18838944/

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