繁体   English   中英

如何将本机库依赖项添加到 sbt 项目?

[英]How to add native library dependencies to sbt project?

我想向sbt项目添加一个 Java 库(例如Apache PDFBox )。

这是常春藤依赖:

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”,但没有找到(识别)相关结果。

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

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

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

简短的回答:

使用

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 主要版本匹配的后缀,从而获取库的正确版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM