我正在将Scala Migrations项目从ant/ivy迁移到sbt。它可以选择使用any public Maven repository中不存在的log4jdbc作为库依赖项(据我所能找到的)。
libraryDependencies +=
"log4jdbc" % "log4jdbc" % "1.1" from "http://log4jdbc.googlecode.com/files/log4jdbc4-1.1.jar"我希望生成的POM不包含log4jdbc,因为它不在任何存储库中。如果不列出log4jdbc,POM会更好,这是一个正确的假设吗?此外,列出它不是更适合使用sbt的Scala迁移用户吗?
我编写了以下设置来从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)
}发布于 2012-09-13 03:51:25
因为您提到了POM,所以我假设您希望支持Maven用户,或者希望发布到Maven存储库。如果不是这样,您不需要发布到POM,您可以像在Ant/Ivy设置中那样使用Ivy元数据。
由于您知道Ivy,因此from(URL)方法实际上是通过声明一个自定义工件并将其from属性设置为URL来实现的。独立于Maven/POMs,Ivy不包括交付的Ivy文件中的自定义工件。(至少,我相信这是常春藤的标准行为,而不是sbt配置常春藤做的事情。)
但是,也没有办法为pom.xml中的依赖项提供URL。如何处理这可能取决于您期望客户端做什么,但一个相当通用的解决方案是将依赖项声明为可选:
libraryDependencies +=
"log4jdbc" % "log4jdbc" % "1.1" % "compile,optional" from
"http://log4jdbc.googlecode.com/files/log4jdbc4-1.1.jar"客户端需要显式声明依赖项才能使用它。因为它不是存储库,所以sbt用户仍然需要复制from "..."声明。Maven用户只能使用存储库中的依赖项,尽管他们可以很容易地将其手动安装到本地存储库中。
https://stackoverflow.com/questions/12345239
复制相似问题