加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何使用生成的pom中的显式URL排除库依赖项?

发布时间:2020-12-16 10:03:34 所属栏目:安全 来源:网络整理
导读:我正在将 Scala Migrations项目从蚂蚁/常春藤转移到sbt.它可选地使用log4jdbc作为 any public Maven repository中不存在的库依赖(从我能找到的). libraryDependencies += "log4jdbc" % "log4jdbc" % "1.1" from "http://log4jdbc.googlecode.com/files/log4j
我正在将 Scala Migrations项目从蚂蚁/常春藤转移到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文件中不包含自定义工件. (至少,我相信这是标准的常春藤行为,而不是sbt配置Ivy要做的事情.)

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

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

客户端需要显式声明依赖项才能使用它.因为它不是存储库,所以sbt用户仍然需要复制来自“…”的声明. Maven用户只能在存储库中使用依赖项,尽管他们可以非常轻松地手动将其安装在本地存储库中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读