[英]Add library dependencies to SBT, for SBT (not the project managed by 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.