gpt4 book ai didi

scala - SBT:我可以动态添加基于另一个库的依赖项吗?

转载 作者:行者123 更新时间:2023-12-01 02:08:09 25 4
gpt4 key购买 nike

如果项目libraryDependencies,我正在尝试构建一个插件,该插件添加对特定库(aspectj weaver JVM 代理)的运行时依赖。包含一组特定的其他库之一(需要运行时aspectj编织的Kamon库之一),以便我可以在创建Docker镜像(使用sbt-docker)时引用下载的依赖文件。

Kamon 将 aspectj weaver 指定为“提供的”依赖项,但 AFAICT 不能从依赖于这些 Kamon 库之一的项目中传递。

问题是我无法覆盖 libraryDependencies在我的插件中,因为当时实际项目还没有添加任何依赖项,所以我得到一个空列表。所以我必须在项目有了它的 libraryDependencies 之后以某种方式添加这个依赖项。设置但在 SBT 开始下载依赖项之前。

这可能吗?是否有其他设置可以覆盖以实现此目的?

我的备份是以某种方式从我的插件中的任务中自己下载该aspectj jar。是否有一些我可以使用的 SBT 子系统,以便针对(或下载到)本地 Ivy 存储库解析 jar 文件?

最佳答案

我想通了使用 allDependencies .这是(缩写)代码:

object AspectjWeaverPlugin extends AutoPlugin {
private val aspectjWeaver = "org.aspectj" % "aspectjweaver" % "1.8.5" % "runtime"
private val aspectjWeaverLibs = List("kamon-spray", "kamon-akka", "kamon-scala")

val aspectjWeaverJarFile = taskKey[Option[File]]("The aspectj weaver jar file if it exists on the classpath.")

override def requires = plugins.JvmPlugin
override def projectSettings = Seq(
allDependencies := {
allDependencies.value ++ libraryDependencies.value.find(module => aspectjWeaverLibs.contains(module.name)).map(_ => aspectjWeaver)
},
aspectjWeaverJarFile := {
val classpath = (managedClasspath in Runtime).value

classpath.find(_.data.getName == s"${aspectjWeaver.name}-${aspectjWeaver.revision}.jar").map(_.data)
}
)
}

现在我可以使用带有可选的 aspectj weaver jar 文件的新任务来设置必要的 -javaagent:... run 上的选项, re-start ,并在我使用 sbt-docker 生成的 Docker 镜像中。

仍然很好奇这是否是最好的方法。

关于scala - SBT:我可以动态添加基于另一个库的依赖项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31053276/

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