如何排除库的依赖与产生的POM明确的网址是什么?(How to exclude library de

2019-09-22 07:05发布

我移动斯卡拉迁移从蚂蚁/常春藤SBT项目。 它可以选择使用log4jdbc作为库的依赖,不存在在任何公共Maven仓库 (从我可以找到)。

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

我想生成的POM不包括log4jdbc,因为它不是在任何存储库。 这是一个正确的假设,POM将不上市log4jdbc更好? 此外,不会列出它的工作使用SBT斯卡拉迁移用户更好?

我写了下面的设置消除来自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)
}

Answer 1:

因为你提了POM,我想你想支持Maven用户,或者你想要发布到Maven仓库。 如果这是不正确的,你不需要发布到POM,你可以只用常春藤元数据的工作就像在Ant /常春藤设置。

既然你知道常春藤,在from(URL)方法基本上是通过声明定制神器,其实现from设置URL属性。 独立的Maven /多金属氧酸盐,常春藤不包括在交付的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用户只能使用依赖于库中,虽然他们可以在本地存储库手动相当容易安装。



文章来源: How to exclude library dependencies with explicit URL from generated pom?
标签: scala sbt