为什么在SBT中导致编译错误的弃用警告

时间:2017-06-02 12:38:48

标签: java scala sbt

我正在开发的项目使用Scala和SBT。我需要在代码中引入一个不推荐使用的方法,而不是仅仅给我一个错误,当我尝试编译代码时,sbt给了我一个编译错误。

是否有一个标志或设置让某些事情发生,我可以改变?

method getDB in class Mongo is deprecated: see corresponding Javadoc 
for more information.
[error]   lazy val db: com.mongodb.DB = mongoClient.getDB("foo")
[error]                                             ^
[error] one error found
[error] (web/compile:compileIncremental) Compilation failed
[error] Total time: 9 s, completed Jun 2, 2017 7:20:53 AM

感谢。

2 个答案:

答案 0 :(得分:2)

SBT为您提供了很多将折旧警告设置为错误的选项。

set scalacOptions in ThisBuild ++= Seq("-unchecked", "-deprecation", "-Xfatal-warnings")

OR

sbt compile -deprecation

OR

您可以在build.sbt文件中进行配置。

如果使用,则必须删除以上任何选项。 (检查您的编译器设置)

也请执行sbt clean reload compile。 这对我有用。

答案 1 :(得分:0)

Scalac有一个标志Xfatal-warnings,可将警告变为错误。请参阅Is there a way in sbt to convert compiler warnings to errors so the build fails?https://github.com/scala/bug/issues/8410

解决方法是定义一个不推荐使用的特征,该特征调用该方法并使其伴随对象实现该特征:

scala> @deprecated("","") def foo = "I am deprecated"
foo: String

scala> @deprecated("","") trait Foo { def safeFoo = foo }; object Foo extends Foo
defined trait Foo
defined object Foo

scala> foo
<console>:13: warning: method foo is deprecated:
       foo
       ^
res0: String = I am deprecated

scala> Foo.safeFoo
res1: String = I am deprecated