【发布时间】:2021-06-06 13:09:09
【问题描述】:
每当我启动 Scala 应用程序时都会收到以下警告:
警告 - 在 app/core/SVNResource.scala 的第 4 行,包核心中对象 SVNProperties 的定义永久隐藏了导入的“SVNProperties”
这意味着什么?
【问题讨论】:
-
您在运行应用程序时或编译时是否收到此信息?发出此警告的是 scala 还是 scalac?
标签: scala
每当我启动 Scala 应用程序时都会收到以下警告:
警告 - 在 app/core/SVNResource.scala 的第 4 行,包核心中对象 SVNProperties 的定义永久隐藏了导入的“SVNProperties”
这意味着什么?
【问题讨论】:
标签: scala
您的代码可能看起来像这样:
object Hidden {
import scala.collection.immutable
object immutable { def x = 7 }
}
除了不太明显的方式。你正在导入一些东西——在我的例子中,包immutable——然后你去定义其他同名的东西,阻止你使用你导入的东西。
特别是,您似乎尝试将SVNProperties 导入SVNResource.scala,但SVNResource.scala 定义了自己的SVNProperties,它隐藏了导入。
【讨论】:
SVNProperties 在同一个包中,因此已经在范围内。尝试显式导入它会导致此警告。
在将一些类从一个包移动到另一个包后,我遇到了这个警告。我猜新位置和旧位置的二进制文件之间存在一些冲突。就我而言,这有帮助:
sbt clean
【讨论】:
clean 帮助我在终端上运行,但在从 IDE 运行类(测试用例)时错误消失之前必须执行 IntelliJ 重建项目。
当我的班级在同一个包中导入班级时,我收到了这个警告。
一旦我删除了不必要的导入,警告就被删除了。
【讨论】:
这发生在我将一个类从一个包移动到另一个包之后,就像在 astasiak 的案例中一样。我跑了sbt clean,没有运气。对于我的生活,我无法在旧位置找到课程。
但是,我有其他错误阻止我构建。当我修复这些时,这个错误消失了。我的猜测是,在你可以干净地构建之前,sbt 仍然认为你的类在旧包中,并将这个错误包含在阻止你构建的任何其他构建错误中。
我的建议? 检查其他编译错误并修复这些错误 - 您可能会错误地收到此错误,因为 sbt 自上次成功构建以来对您的包结构有一个过时的视图。
【讨论】:
只是为了进一步扩展尼克发表的评论,因为我就是这种情况:
另一个常见原因是 SVNProperties 在同一个包中,因此已经在范围内。尝试显式导入它会导致此警告。
更具体地说,您可能有:
package app.core
// No need to import the following - it is already visible as
// you are in the same package
import app.core.SVNProperties
object SVNResource {
改用:
package app.core
object SVNResource {
(意见) 作为编码风格的问题,您可能希望以不同的方式对变量进行骆驼式大小写,例如。 SvnProperties,SvnResource。它对大多数人来说更容易阅读,另请参阅this question。
【讨论】:
我有一个名为 Server 的主类,我正在通过以下方式在主类中创建一个码头服务器。
import org.eclipse.jetty.server.Server
var server:Server=new Server()
我在运行 sbt run
时收到以下警告 > [warn] /home/xxx/xxx/xxx/src/main/scala/com/xxx/xxx/main/Server.scala:3:
> imported `Server' is permanently hidden by definition of object Server in package main
[warn] import org.eclipse.jetty.server.Server
[warn] ^
[warn] one warning found
我重命名了我的主类,警告消失了。
【讨论】:
如果您使用的是 Scala Eclipse IDE,您可以这样做:
项目 > 清理...
之后所有的警告都会被移除。
【讨论】:
另外,请确保您导入的包的名称 =/= 对象名称。
【讨论】:
我通过循环依赖得到了这个。我的两个班级都在意外地互相使用。
【讨论】:
如果警告来自导入同名的类,您始终可以使用导入重命名。
package domain
case class Company (...
package models
import domain.{Company => _Company}
object Company extends SkinnyCRUDMapper[_Company] {
【讨论】:
问题与依赖冲突有关,当您在多个 Jars 编译器中具有相同的类时,发现其中一个类被隐藏并给出错误。
检查您的 Jar 版本在整个项目中是否相同,或者尝试更改冲突类之一的名称/包
【讨论】: