gpt4 book ai didi

scala - 如何从生成的 pom 中排除具有显式 URL 的库依赖项?

转载 作者:行者123 更新时间:2023-12-04 15:56:47 24 4
gpt4 key购买 nike

我正在搬家 Scala Migrations从 ant/ivy 到 sbt 的项目。它可以选择使用 log4jdbc 作为 any public Maven repository 中不存在的库依赖项。 (从我能找到的)。

libraryDependencies +=
"log4jdbc" % "log4jdbc" % "1.1" from "http://log4jdbc.googlecode.com/files/log4jdbc4-1.1.jar"

我希望生成的 POM 不包含 log4jdbc,因为它不在任何存储库中。这是一个正确的假设,即不列出 log4jdbc POM 会更好吗?另外,使用 sbt 列出它对 Scala Migrations 用户来说不是更好吗?

我编写了以下设置以从 POM 中删除 log4jdbc 依赖项。有没有更好、更简单的方法?可以将设置添加到 sbt 以自动执行此操作吗?
// Do not include log4jdbc as a dependency.
pomPostProcess := { (node: scala.xml.Node) =>
val rewriteRule =
new scala.xml.transform.RewriteRule {
override def transform(n: scala.xml.Node): scala.xml.NodeSeq = {
val name = n.nameToString(new StringBuilder).toString
if (name == "dependency") {
if ((n \ "groupId").text == "log4jdbc")
scala.xml.NodeSeq.Empty
else
n
}
else {
n
}
}
}
val transformer = new scala.xml.transform.RuleTransformer(rewriteRule)
transformer.transform(node)(0)
}

最佳答案

因为您提到了 POM,所以我假设您想要支持 Maven 用户或者您想要发布到 Maven 存储库。如果不是这样,您不需要发布到 POM,您可以像在 Ant/Ivy 设置中一样使用 Ivy 元数据。

既然你知道 Ivy,那么 from(URL)方法本质上是通过声明一个带有 from 的自定义工件来实现的。属性设置为 URL。独立于 Maven/POM,Ivy 不会在交付的 Ivy 文件中包含自定义工件。 (至少,我相信这是标准的 Ivy 行为,而不是 sbt 配置 Ivy 要做的事情。)

但是,也没有办法为 pom.xml 中的依赖项提供 URL。您如何处理这可能取决于您期望客户端做什么,但一种相当通用的解决方案是将依赖项声明为可选:

libraryDependencies +=
"log4jdbc" % "log4jdbc" % "1.1" % "compile,optional" from
"http://log4jdbc.googlecode.com/files/log4jdbc4-1.1.jar"

客户端需要显式声明依赖项才能使用它。
因为它不是存储库,所以 sbt 用户仍然需要复制 from "..."宣言。 Maven 用户只能在存储库中使用依赖项,尽管他们可以相当轻松地手动将其安装到本地存储库中。

关于scala - 如何从生成的 pom 中排除具有显式 URL 的库依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12345239/

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