手动检索 Ivy 依赖项作为 sbt 中的本地非托管库

Posted

技术标签:

【中文标题】手动检索 Ivy 依赖项作为 sbt 中的本地非托管库【英文标题】:Manually retrieving Ivy dependencies as locally unmanaged libs in sbt 【发布时间】:2013-10-09 05:49:58 【问题描述】:

我在 Java/Ant 中有一个模式,我使用 Ivy 在任务中获取我的依赖项并将它们放在项目的本地 lib/ 文件夹中。我不想拥有本地 Maven,我只希望开发人员在更改某些内容时运行依赖项更新程序(我在获取 lib/ 后提交这些库)。

如何利用 SBT 依赖项设置手动将它们提取到本地 lib/ 文件夹并用作“非托管”依赖项(而不是 lib_managed)?我真的不想强迫开发人员设置他的 ivy.home 或构建启动器配置。我宁愿有一个可调用的任务,它将库提取到我在 build.sbt/scala 中指定的位置。有这样做的例子吗?

【问题讨论】:

【参考方案1】:

我不使用 sbt,但我使用 ANT 的方法是创建一个引导目标来设置开发人员的机器,以便可以使用 ivy 来管理依赖项。看看下面的例子:

How to add Ivy to Ant dynamically

【讨论】:

这是我已经拥有的模式,我想直接使用 sbt 而不需要单独的 build.xml【参考方案2】:

托管一般不能转换为非托管。在某些特殊情况下,可以将一些 jar 放入 lib/ 并产生等效的行为,但不是一般情况下。问题示例:

    插件可以请求以自定义配置下载 jar,而不受管理的不会覆盖这些 每个类路径/配置都需要一个包含所有 jar 的单独目录 非托管依赖项丢失了关联的元数据,doc 使用这些元数据自动链接到外部站点,例如

这是现有的 Java (Maven/Ivy) 依赖管理解决方案的普遍问题。可以近似锁定、离线分辨率的概念,但不是特别干净、容易或灵活。 (我知道 Ivy 的 retrieve。)在 sbt 中,它可能需要使用 lib_managed/skip in update := trueoffline := true,并保留 update 缓存(在 target/ 中),但这不是t 记录或测试。

(对于更长期的方向,Adept 将锁定依赖项和离线使用作为核心目标。)

【讨论】:

以上是关于手动检索 Ivy 依赖项作为 sbt 中的本地非托管库的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 sbt 中具有不同包装 ivy 类型的依赖项?

如何找到一个 zip 依赖路径?

如何让 Eclipse 识别来自 SBT 的依赖项

如何为每个用户或系统范围配置 Ivy 缓存目录?

sbt/ivy 无法解析通配符 ivy 对文件系统解析器的依赖

如何确定 Ivy 检索任务是不是更新了我的 lib 文件夹中的任何依赖项?