【问题标题】:permanently hidden warning in scala applicationscala应用程序中永久隐藏的警告
【发布时间】:2021-06-06 13:09:09
【问题描述】:

每当我启动 Scala 应用程序时都会收到以下警告:

警告 - 在 app/core/SVNResource.scala 的第 4 行,包核心中对象 SVNProperties 的定义永久隐藏了导入的“SVNProperties”

这意味着什么?

【问题讨论】:

  • 您在运行应用程序时或编译时是否收到此信息?发出此警告的是 scala 还是 scalac?

标签: scala


【解决方案1】:

您的代码可能看起来像这样:

object Hidden {
  import scala.collection.immutable
  object immutable { def x = 7 }
}

除了不太明显的方式。你正在导入一些东西——在我的例子中,包immutable——然后你去定义其他同名的东西,阻止你使用你导入的东西。

特别是,您似乎尝试将SVNProperties 导入SVNResource.scala,但SVNResource.scala 定义了自己的SVNProperties,它隐藏了导入。

【讨论】:

  • 另一个常见原因是SVNProperties 在同一个包中,因此已经在范围内。尝试显式导入它会导致此警告。
  • 在 2.13 中,如果定义在不同的文件中,则导入可以正常工作。对于嵌套包,该定义可能不在同一个包中,而是在某个封闭包中,在这种情况下,很明显我的“本地”导入应该按预期工作。如果导入导入了无论如何都可见的定义(例如,它在同一个包中),导入也可以正常工作并且也没有警告。
【解决方案2】:

在将一些类从一个包移动到另一个包后,我遇到了这个警告。我猜新位置和旧位置的二进制文件之间存在一些冲突。就我而言,这有帮助:

sbt clean

【讨论】:

  • 确实如此。我想我也是这种情况
  • 在我进行了一些重度重构、在包中移动类之后发生了这种情况。
  • 谢谢!!在对 IntelliJ 进行重构后发生在我身上。 clean 帮助我在终端上运行,但在从 IDE 运行类(测试用例)时错误消失之前必须执行 IntelliJ 重建项目。
  • 这里相同,但使用 gradle。执行清理任务解决了问题
【解决方案3】:

当我的班级在同一个包中导入班级时,我收到了这个警告。

一旦我删除了不必要的导入,警告就被删除了。

【讨论】:

  • 我遇到了同样的问题,解决所有错误/警告解决了这个问题。谢谢
【解决方案4】:

这发生在我将一个类从一个包移动到另一个包之后,就像在 astasiak 的案例中一样。我跑了sbt clean,没有运气。对于我的生活,我无法在旧位置找到课程。

但是,我有其他错误阻止我构建。当我修复这些时,这个错误消失了。我的猜测是,在你可以干净地构建之前,sbt 仍然认为你的类在旧包中,并将这个错误包含在阻止你构建的任何其他构建错误中。

我的建议? 检查其他编译错误并修复这些错误 - 您可能会错误地收到此错误,因为 sbt 自上次成功构建以来对您的包结构有一个过时的视图。

【讨论】:

    【解决方案5】:

    只是为了进一步扩展尼克发表的评论,因为我就是这种情况:

    另一个常见原因是 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 {
    

    (意见) 作为编码风格的问题,您可能希望以不同的方式对变量进行骆驼式大小写,例如。 SvnPropertiesSvnResource。它对大多数人来说更容易阅读,另请参阅this question

    【讨论】:

      【解决方案6】:

      我有一个名为 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
      

      我重命名了我的主类,警告消失了。

      【讨论】:

        【解决方案7】:

        如果您使用的是 Scala Eclipse IDE,您可以这样做:

        项目 > 清理...

        之后所有的警告都会被移除。

        【讨论】:

          【解决方案8】:

          另外,请确保您导入的包的名称 =/= 对象名称。

          【讨论】:

            【解决方案9】:

            我通过循环依赖得到了这个。我的两个班级都在意外地互相使用。

            【讨论】:

              【解决方案10】:

              如果警告来自导入同名的类,您始终可以使用导入重命名。

              package domain
              
              case class Company (...
              

              package models
              
              import domain.{Company => _Company}
              
              object Company extends SkinnyCRUDMapper[_Company] {
              

              【讨论】:

                【解决方案11】:

                问题与依赖冲突有关,当您在多个 Jars 编译器中具有相同的类时,发现其中一个类被隐藏并给出错误。

                检查您的 Jar 版本在整个项目中是否相同,或者尝试更改冲突类之一的名称/包

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-10-07
                  • 2019-03-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多