编写一个可选地依赖于第三方库的库

Writing a library that is optionally dependent on a third party library

我想创建一个 Scala 库 (A) 来提供一些通用实用程序。库 A 没有第 3 部分依赖项。我还想包含一些依赖于 A 以及某些第三方库 C 的功能 B。将 B 视为基于 A 为 C 提供一些额外的实用程序。

用 B 打包构建 A 的最佳策略是什么?我假设大多数用户不需要 B,所以他们不需要知道或安装库 C。如果我不将 C 作为依赖项添加到 A+B,它将无法编译。

我可以将 B 变成一个依赖于 A 和 C 的单独项目。但是有没有办法将它作为 "plugin" 到 B,这样我就不需要额外的项目了?

不是真的。有一些可怕的 hacky 方法,比如多个 maven 工件或 OSGi 打包的大黑坑,但用户不会感谢你做这些事情;只是使 B 成为依赖于 A 和 C 的单独工件是迄今为止最用户友好的方法。请记住,使用 maven multi-module project 或 SBT 中的类似支持,您可以在同一代码库中同时发布和版本化多个模块。