手动检索 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 := true
、offline := true
,并保留 update
缓存(在 target/
中),但这不是t 记录或测试。
(对于更长期的方向,Adept 将锁定依赖项和离线使用作为核心目标。)
【讨论】:
以上是关于手动检索 Ivy 依赖项作为 sbt 中的本地非托管库的主要内容,如果未能解决你的问题,请参考以下文章