【问题标题】:How to add native library dependencies to sbt project?如何将本机库依赖项添加到 sbt 项目?
【发布时间】:2013-12-06 00:51:00
【问题描述】:

我想将 Java 库(例如 Apache PDFBox)添加到 sbt 项目中。

这是 Ivy 依赖项:

dependency org="org.apache.pdfbox" name="pdfbox" rev="1.8.2"

我首先尝试执行以下操作:

resolvers += "Sonatype releases" at "http://oss.sonatype.org/content/repositories/releases/"

libraryDependencies += "org.apache.pdfbox" %% "pdfbox" % "1.8.2"

但它给了我类型的错误

[warn] ==== public: tried [warn]  
http://repo1.maven.org/maven2/org/apache/pdfbox/pdfbox_2.10/1.8.2/pdfbox_2.10-1.8.2.pom

所以我知道使用这种语法我可以管理 Scala 依赖项。我确信有一种方法可以管理 Java 依赖项,但是如何呢?

我尝试在 Google 中搜索“sbt add java dependencies”,但没有找到(识别)相关结果。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    您应该将%%(双百分比)替换为单个。

    libraryDependencies += "org.apache.pdfbox" % "pdfbox" % "1.8.2"
    

    双百分比是一个方便的运算符,并导致在路径内添加_+scalaVersion 后缀,在您的情况下为_2.10。单一百分比应该可以解决问题。

    【讨论】:

    • TL;DR on a 4 line answer?
    【解决方案2】:

    简答:

    使用

    libraryDependencies += "org.apache.pdfbox" % "pdfbox" % "1.8.2"
    

    对于 java 库,以及

    libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.8"
    

    对于 Scala 库,区别在于 Scala 库的双倍百分比。

    长答案:

    Scala 在主要版本之间不向后兼容,因此为 scala 2.12.x 编译的库不能被用 scala 2.13.x 编写的项目使用。

    因此,在编写 scala 库时,您需要针对您希望支持的每个 scala 主要版本编译和发布一次。在项目中使用库时,您必须选择为与您使用的相同 Scala 主要版本编译的版本。手动执行此操作会很麻烦,因此 SBT 内置了对它的支持。

    发布库时,可以像这样将 crossScalaVersions 键添加到 SBT

    crossScalaVersions := Seq( "2.10.6", "2.11.11", "2.12.3" )
    

    然后使用sbt +publish 发布。这将使 SBT 为 scala 2.10.6、2.11.11 和 2.12.3 构建和发布库版本。请注意,当涉及到库的兼容性时,次要编号是不相关的。已发布的库的名称将以_2.10_2.11_2.12 为后缀,以显示它的 scala 版本。使用 SBT 构建来支持这一点的另一种方法是使用实​​验性插件 sbt-projectmatrix,因为它提供了更多选项,而且通常构建速度更快。

    当使用库时,sbt 还可以帮助您使用为正确的 scala 版本编译的库,这就是 %% 发挥作用的地方。当指定名称中没有 _ 后缀的库,而是使用 %% 时,sbt 将填写与您使用的 Scala 主要版本匹配的后缀,从而获取库的正确版本。

    【讨论】:

      猜你喜欢
      • 2013-05-28
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 2020-01-20
      • 1970-01-01
      • 2016-06-03
      • 2015-07-27
      相关资源
      最近更新 更多