web-dev-qa-db-fra.com

L'importation Scala ne fonctionne pas - la base de données object n'est pas membre du paquetage com.me.project.controllers.com.me.project.database

J'ai un problème lorsque j'essaie d'importer dans Scala. L'objet Database existe sous com.me.project.database mais lorsque j'essaie de l'importer:

import com.me.project.database.Database

Je reçois l'erreur:

object Database is not a member of package com.me.project.controllers.com.me.project.database

Des idées, quel est le problème?

Modifier :

Il est à noter que l'importation se trouve dans le fichier Application.scala sous le package com.me.project.controllers, je ne vois pas pourquoi il ajouterait l'importation au package actuel, bizarre ...

Modifier 2 :

Donc en utilisant:

import _root_.com.me.project.database.Database

Ne fonctionne comme mentionné ci-dessous. Mais cela devrait-il fonctionner sans le _root_? Les commentaires à ce jour semblent indiquer que ce devrait être le cas.

Réponse :

Il s’est donc avéré que je devais simplement nettoyer le projet pour que l’importation fonctionne correctement, en utilisant à la fois:

import _root_.com.me.project.database.Database

import com.me.project.database.Database

sont des solutions valables. Eclipse venait juste de se perdre.

33
Neilos

les importations peuvent être relatives. Est-ce la seule importation que vous ayez? soyez prudent avec d'autres importations comme

import com.me

en fin de compte, cela devrait résoudre le problème, alors vous pouvez essayer d'en savoir plus

import _root_.com.me.project.database.Database

17
fracca

Dans mon cas, je devais également vérifier que l'objet qui n'est pas trouvé en tant que membre du package est correctement compilé.

17
Bunyk

Dans mon cas, je devais exécuter sbt clean.

9
r90t

Je me rends compte que cette question a déjà une réponse acceptée, mais depuis que j'ai connu le même problème mais avec une cause différente, j'ai pensé que j'ajouterais une réponse.

J'ai eu un tas de projets interdépendants qui ont soudainement besoin d'une importation racine pour pouvoir les compiler. Il est apparu que j'avais dupliqué la déclaration de package dans un seul fichier. Cela a provoqué une sorte de réaction en chaîne et a rendu très difficile la recherche de la source du problème.

En résumé j'avais

package foo.bar
package foo.bar

sur le haut du fichier au lieu de simplement

package foo.bar

J'espère que cela épargnera à quelqu'un une chasse aux erreurs vraiment fastidieuse.

8
Rikard

Je partagerai mon histoire, au cas où cela pourrait aider quelqu'un. 

Scénario: La compilation intellij réussit, mais la construction de gradle échoue avec import com.foo.Bar, où Bar est une classe scala.

Raison TLDR: Bar était situé sous src/main/Java/... par opposition à src/main/scala/...

Raison réelle: Bar n'était pas compilé par compileScala gradle tâche (à partir du plugin gradle scala) car elle recherche les sources scala uniquement sous src/<sourceSet>/scala

De docs.gradle.org

Tous les répertoires sources Scala peuvent contenir du code Scala et Java. Le Les répertoires sources Java peuvent uniquement contenir du code source Java.

J'espère que cela t'aides

1
Dima Ogurtsov

Si vous utilisez gradle comme outil de génération, assurez-vous que la tâche jar n'est pas désactivée.

J'ai eu plusieurs modules dans mon projet, où un module dépendait de quelques autres modules. Cependant, j'avais désactivé la tâche jar dans build.gradle

jar { enabled = false }

Cela a entraîné l'échec de la résolution des classes dans les modules dépendants et l'échec de l'erreur ci-dessus.

1
panther

Java -> Conversion Scala sans nettoyage

N'oubliez pas de nettoyer si vous convertissez un fichier dans un projet de Java à Scala. J'avais une construction d'intégration continue en cours d'exécution où je ne pouvais pas faire fonctionner les choses, même si la construction fonctionnait localement, après avoir converti une classe Java en objet Scala. Solution: ajoutez 'clean' à la procédure de construction sur le serveur CI. Le nom du fichier .class généré dans Scala est légèrement différent de celui d'une classe Java, je crois, c'est donc très probablement ce qui était à l'origine du problème.

1
bbarker

J'ai eu une situation similaire, qui échouait à la fois dans IntelliJ et maven sur la ligne de commande. Je suis allé appliquer le correctif temporaire suggéré (en ajoutant _root_) mais intellij était si embêtant que ce n'était même pas possible.

Finalement, j'ai remarqué que j'avais mal créé un paquet afin qu'il répète le chemin complet du paquet. Cela signifiait que le répertoire dans lequel ma classe se trouvait avait un sous-dossier appelé "com", et le début de mon fichier ressemblait à:

package com.mycompany.mydept.myproject.myfunctionality.sub1

import com.holdenkarau.spark.testing.DataFrameSuiteBase 

où j'avais un autre paquet appelé com.mycompany.mydept.myproject.myfunctionality.sub1.com.mycompany.mydept.myproject.myfunctionality.sub2

Et le compilateur recherchait "holdenkarau" sous com.mycompany.mydept.myproject.myfunctionality.com et échouait.

0
Adair