首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从生成的pom中排除显式URL的库依赖?

如何从生成的pom中排除显式URL的库依赖?
EN

Stack Overflow用户
提问于 2012-09-10 12:10:53
回答 1查看 1.5K关注 0票数 5

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

代码语言:javascript
复制
libraryDependencies +=
  "log4jdbc" % "log4jdbc" % "1.1" from "http://log4jdbc.googlecode.com/files/log4jdbc4-1.1.jar"

我希望生成的POM不包含log4jdbc,因为它不在任何存储库中。如果不列出log4jdbc,POM会更好,这是一个正确的假设吗?此外,列出它不是更适合使用sbt的Scala迁移用户吗?

我编写了以下设置来从POM中删除log4jdbc依赖项。有没有更好、更简单的方法?是否可以将设置添加到sbt以自动执行此操作?

代码语言:javascript
复制
// 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)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。如何处理这可能取决于您期望客户端做什么,但一个相当通用的解决方案是将依赖项声明为可选:

代码语言:javascript
复制
libraryDependencies +=
  "log4jdbc" % "log4jdbc" % "1.1" % "compile,optional" from
    "http://log4jdbc.googlecode.com/files/log4jdbc4-1.1.jar"

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12345239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档