software - scala wikipedia
La importaciĆ³n Scala no funciona: objeto La base de datos no es miembro del paquete com.me.project.controllers.com.me.project.database (8)
Compartiré mi historia, solo en caso de que pueda ayudar a alguien.
Escenario: la compilación intellij tiene éxito, pero la creación de gradle falla en la import com.foo.Bar
, donde Bar
es una clase scala.
Motivo de TLDR: Bar
se ubicó en src/main/java/...
en lugar de src/main/scala/...
Razón real: la compilación no fue compilada por la tarea compileScala
gradle (desde el plugin scala de Gradle) porque busca fuentes scala solo bajo src/<sourceSet>/scala
.
De docs.gradle.org :
Todos los directorios de origen de Scala pueden contener código Scala y Java. Los directorios de origen de Java solo pueden contener código fuente de Java.
Espero que esto ayude
Tengo un problema al intentar importar en scala. El objeto Database
existe en com.me.project.database
pero cuando intento importarlo:
import com.me.project.database.Database
Me sale el error:
object Database is not a member of package com.me.project.controllers.com.me.project.database
Alguna idea de cual es el problema?
Editar :
Vale la pena mencionar que la importación está en el archivo Application.scala bajo el paquete com.me.project.controllers
, pero no puedo entender por qué agregaría la importación al paquete actual, raro ...
Editar 2 :
Entonces usando:
import _root_.com.me.project.database.Database
Funciona como se menciona a continuación. Pero, ¿debería funcionar sin el _root_
? Los comentarios hasta ahora parecen indicar que debería.
Respuesta :
Entonces resultó que solo necesitaba limpiar el proyecto para que la importación funcionara correctamente, usando ambos:
import _root_.com.me.project.database.Database
import com.me.project.database.Database
son soluciones válidas. Eclipse acababa de confundirse.
En mi caso, también tuve que verificar que el objeto que no se encuentra como miembro del paquete se haya compilado correctamente.
En mi caso, tuve que ejecutar sbt clean
.
Me doy cuenta de que esta pregunta ya tiene una respuesta aceptada, pero dado que experimenté el mismo problema pero con una causa diferente, pensé que agregaría una respuesta.
Tenía un montón de proyectos interdependientes que de repente necesitaban una importación de raíz para compilar. Resultó que había duplicado la declaración del paquete en un solo archivo. Esto causó algún tipo de reacción en cadena y dificultó la búsqueda del origen del problema.
En resumen, tuve
package foo.bar
package foo.bar
en la parte superior del archivo en lugar de solo
package foo.bar
Espero que esto le ahorre a alguien una cacería de errores muy tediosa.
Si está utilizando gradle
como herramienta de compilación, asegúrese de que la tarea jar
no esté desactivada.
Tenía varios módulos en mi proyecto, donde un módulo dependía de algunos otros módulos. Sin embargo, había desactivado la tarea jar
en build.gradle
:
jar { enabled = false }
Eso causó que fallara al resolver clases en los módulos dependientes y fallara con el error anterior.
Tuve una situación similar, que estaba fallando tanto en IntelliJ como en Maven en la línea de comando. Fui a aplicar la solución temporal sugerida (agregando _root_
) pero intellij estaba tan mal que no era posible.
Eventualmente noté que había creado mal un paquete para que repitiera todo el camino del paquete. Eso significaba que el directorio en el que estaba mi clase tenía una subcarpeta llamada "com", y el inicio de mi archivo se veía así:
package com.mycompany.mydept.myproject.myfunctionality.sub1
import com.holdenkarau.spark.testing.DataFrameSuiteBase
donde tenía otro paquete llamado com.mycompany.mydept.myproject.myfunctionality.sub1.com.mycompany.mydept.myproject.myfunctionality.sub2
Y el compilador buscaba "holdenkarau" en com.mycompany.mydept.myproject.myfunctionality.com y falló.
las importaciones pueden ser relativas. ¿Es esa la única importación que tienes? tenga cuidado con otras importaciones como
import com.me
en última instancia, esto debería solucionarlo, entonces puedes tratar de encontrar más al respecto:
import _root_.com.me.project.database.Database
Java -> conversión de Scala sin limpieza
No olvides limpiar si conviertes algún archivo en un proyecto de Java a Scala. Tenía una construcción de integración continua ejecutándose donde no podía hacer que las cosas funcionasen, aunque la compilación funcionaba localmente, después de convertir una clase Java en un objeto Scala. Solución: agregue ''limpiar'' al procedimiento de compilación en el servidor de CI. El nombre del archivo .class generado en Scala es ligeramente diferente que para una clase Java, creo, por lo que es muy probable que sea lo que estaba causando el problema.