scala应用程序中的永久隐藏警告

时间:2011-02-11 16:18:55

标签: scala

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

WARN - 导入的“SVNProperties”被包核心中对象SVNProperties的定义永久隐藏,位于app / core / SVNResource.scala的第4行

这意味着什么?

11 个答案:

答案 0 :(得分:38)

你可能有类似这样的代码:

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

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

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

答案 1 :(得分:24)

我将一些类从一个包移到另一个包后遇到了这个警告。我想新位置和旧位置的二进制文件之间存在一些冲突。在我的情况下,这有助于:

sbt clean

答案 2 :(得分:7)

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

删除不必要的导入后,警告就被删除了。

答案 3 :(得分:1)

在将一个班级从一个包裹转移到另一个包裹之后发生了这种情况,就像在astasiak的情况下一样。我没有运气就跑了sbt clean。对于我的生活,我无法在旧地点找到班级。

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

我的建议? 检查其他编译错误并修复 - 由于sbt自上次成功构建以来,onPanResponderGrant: (evt, gestureState) => { console.log('identifier', evt.nativeEvent.identifier); } 包结构已过时,您可能会错误地收到此错误。

答案 4 :(得分:1)

请继续扩展Nick的评论,因为这对我来说就是这样:

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

Opinion )就编码风格而言,您可能希望像例如使用驼峰式大小写不同的变量。 SvnPropertiesSvnResource。对于大多数人来说,它读起来更容易,另请参见this question

答案 5 :(得分:0)

我有一个名为 Server 的主类,我正在以下列方式在主类中创建一个jetty服务器。

 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

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

答案 6 :(得分:0)

如果您正在使用Scala Eclipse IDE,则可以执行以下操作:

项目>清理...

此后,所有警告将被删除。

答案 7 :(得分:0)

还要确保您导入的包的名称= / =对象名。

答案 8 :(得分:0)

我通过循环依赖来解决这个问题。我两个班的同学都在偶然地互相使用。

答案 9 :(得分:0)

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

package domain

case class Company (...

package models

import domain.{Company => _Company}

object Company extends SkinnyCRUDMapper[_Company] {

答案 10 :(得分:0)

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

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