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

时间:2013-11-21 13:56:00

标签: scala sbt

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

2 个答案:

答案 0 :(得分:46)

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

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

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

答案 1 :(得分:0)

简短答案:

使用

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