配置 SBT 以仅解析 Ivy 存储库中的 jar(而不是 war)

Posted

技术标签:

【中文标题】配置 SBT 以仅解析 Ivy 存储库中的 jar(而不是 war)【英文标题】:Configure SBT to resolve only jar (and not war) from Ivy repository 【发布时间】:2016-06-20 07:49:55 【问题描述】:

我正在使用 SBT 和 Ivy/Artifactory 构建两个项目。

其中一个项目以 JAR 和 WAR 格式上传到 Artifactory。 另一个项目使用SBT从另一个项目构建的JAR作为依赖。

我的问题是:当我添加我的 Artifactory 存储库并构建第二个项目时,它成功找到了工件,但同时下载了 JAR 和 WAR,而只需要 JAR 文件。

我查找了有关该问题的文档,但找不到特定于扩展的任何内容。我在 SBT 文档页面中阅读了有关分类器的信息,但这似乎不是我想要的。

有什么想法吗?

谢谢。

【问题讨论】:

【参考方案1】:

问题是设置 2 种不同的 ivy 配置,一种用于 jar,一种用于战争。

然后在你的依赖项目中你可以这样做:

“my.kikou.org” %% “dependeeProj” % “1.0” % “war”

或者

“my.kikou.org” %% “dependeeProj” % “1.0” % “jar”

因此,在您的 dependee 项目 dependeeProj SBT 文件中,您可以按照以下步骤设置 ivy 配置:http://www.scala-sbt.org/0.13/docs/Artifacts.html#Modifying+default+artifacts

目标是生成一个包含 2 个配置(一个用于 jar,一个用于战争)的 ivy.xml,并使工件(.jar 和 .war)成为正确配置的一部分。生成的(由 SBT)ivy.xml 应如下所示:

<ivy-module version="1.0">
    ...
    <configurations>
        <conf name="jar" description="Lib as a Jar"/>
        <conf name="war" description="Lib as a War"/>
    </configurations>
    <publications>
        <artifact name="dependeeProj-jar" type="jar"  conf="jar" ext="jar"/>
        <artifact name="dependeeProj-war" type="war"  conf="war" ext="war"/>
    </publications>
    ...
</ivy-module>

干杯

【讨论】:

嗨琼。谢谢回复。我不确定我是否理解您何时谈论依赖关系以及何时谈论依赖项目。我在哪里需要两个常春藤配置?目前在我本地的 Ivy 仓库中,依赖项有两个目录,一个是带有 jar 的 jars,另一个是带有战争的 wars。如果我在依赖项目的 build.sbt 中尝试使用 % "jar",我会收到一条错误消息,指出配置不存在。 我编辑了答案。您在依赖项目中所做的就是您需要做的所有事情。现在您需要在依赖项目中做一些更复杂的工作来生成具有 2 个配置的 ivy.xml,并使每个工件成为正确配置的一部分。不幸的是,这是我从未亲自做过的事情,但希望上面的链接能让你走上正确的道路。当您正确时,请随时编辑我的答案。

以上是关于配置 SBT 以仅解析 Ivy 存储库中的 jar(而不是 war)的主要内容,如果未能解决你的问题,请参考以下文章

sbt update 没有解析存储库中的最新工件

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

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

我们可以使用单独的解析器在 ivy ANT 中下载依赖项 jar 吗?

什么时候在 Scala 中使用 SBT 和 Ivy 模糊地选择了具有相同定义和类路径的两个类?

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