针对不同版本的外部API构建Scala

时间:2013-07-08 17:15:05

标签: scala dependencies

我正在编写一个小型库,我希望它可以向后兼容旧版本的API,但在可能的情况下使用最新API的功能。

例如,我有一个使用外部API的项目,我称之为FooFoo_v1。

最初,我的代码看起来像这样:

// in Widget.scala
val f = new Foo
f.bar

Foo已经发布了他们的API的新版本FooFoo_v2,它添加了bat方法。只要我正在编译新版本,这很好用:

// in Widget.scala
val f = new Foo
f.bar
f.bat

但是如果你试图针对FooFoo_v1进行构建,那么构建显然会失败。由于bat功能是真正可选的,我想允许人们针对FooFoo_v1或FooFoo_v2构建我的代码。

忽略依赖关系管理的细节,对于这样的事情,什么是正确的高级方法?我的目标是让它尽可能简单。

2 个答案:

答案 0 :(得分:1)

我只是将项目的单独分支保存在一个存储库中(一个足够强大,允许您编辑一个并毫不费力地合并到其他存储库中 - git将是我的第一选择。)

如果必须在运行时进行选择,那么您只能使用反射来处理任何新方法。

答案 1 :(得分:1)

我认为你应该将你的库分成两部分 - 一部分使用FooFoo_v1中的功能,另一部分依赖于第一部分和FooFoo_v2并使用FooFoo_v2中的功能。如何完成它取决于你的代码...如果它太难了,最好遵循@rex-kerr建议 - 维护两个分支。