我正在开发的项目使用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
感谢。
答案 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