gpt4 book ai didi

scala - SBT 范围可以用于特定代码块的自定义 libraryDependencies 吗?

转载 作者:行者123 更新时间:2023-12-02 20:07:38 25 4
gpt4 key购买 nike

我有一个简单的 SBT 项目,其中一个代码块从 HDFS 读取(需要某个版本的 Hadoop 的 libraryDependencies ),另一个代码块(需要另一个版本的 Hadoop 的 libraryDependencies )将过滤后的结果写入 Cassandra。

可以SBT scopes用于分配不同的libraryDependencies到两个代码块?

最佳答案

您可以这样做,但您必须将代码拆分为范围轴之一:项目、配置、任务。唯一可用于您的目的的轴是“项目”轴。所以你必须创建一个 multi-project sbt project并在其子项目上拆分您的代码。

但他的遗嘱不是 解决你的问题。因为您将无法运行生成的应用程序。 Java 类加载器无法决定何时使用一个版本的 Hadoop,何时使用另一个版本。它将加载相关类的一个版本,然后在所有情况下使用它。

对于此任务,您必须使用上下文感知类加载器。一个例子是 OSGi container ,如 Apache Feilx . OSGi 是版本感知的,可以在同一个 Java 进程中加载​​同一个库的不同版本。然后它将根据使用库的上下文引用正确版本的库的类。

更准确地说:您必须将不同版本的 Hadoop 库转换为 OSGi 包。然后,您必须将代码拆分为多个 OSGi 包,每个包在其元数据( list 文件)中都依赖于正确版本的 Hadoop 包。当您想启动您的应用程序时,您必须在 OSGi 容器中运行它。

这可以做到,但相当复杂。最好清理你的代码,这样你就只依赖一个版本的 Hadoop 库。

关于scala - SBT 范围可以用于特定代码块的自定义 libraryDependencies 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21161231/

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