Подтвердить что ты не робот

Scala import not working - объект База данных не является членом пакета com.me.project.controllers.com.me.project.database

У меня проблема при попытке импортировать в scala. Объект Database существует под com.me.project.database, но когда я пытаюсь его импортировать:

import com.me.project.database.Database

Я получаю сообщение об ошибке:

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

Любые идеи в чем проблема?

Edit

Стоит отметить, что импорт находится в файле Application.scala под пакетом com.me.project.controllers, я не могу понять, почему он добавит импорт в текущий пакет, хотя и странно...

Изменить 2:

Итак, используя:

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

Работает, как указано ниже. Но должно ли оно работать без _root_? Комментарии пока показывают, что это должно быть.

Ответ

Итак, оказывается, что мне просто нужно было очистить проект для правильной работы импорта, используя оба:

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

import com.me.project.database.Database

являются действительными решениями. Eclipse только что смутился.

4b9b3361

Ответ 1

импорт может быть относительным. Это единственный импорт, который у вас есть? будьте осторожны с другими видами импорта, такими как

import com.me

в конечном счете, это должно исправить это, тогда вы можете попытаться найти больше об этом:

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

Ответ 2

В моем случае мне также нужно было проверить, что объект, который не найден как член пакета, скомпилирован успешно.

Ответ 3

Я понимаю, что этот вопрос уже имеет принятый ответ, но так как я испытал ту же проблему, но с другой причиной, я решил, что добавлю ответ.

У меня была куча взаимозависимых проектов, которые внезапно нуждались в корневом импорте для компиляции. Оказалось, что я дублировал объявление пакета в одном файле. Это вызвало некоторую цепную реакцию и затруднило найти источник проблемы.

В заключение я имел

package foo.bar
package foo.bar

в верхней части файла, а не просто

package foo.bar

Надеемся, что это спасет кого-то, кто действительно утомительный поиск ошибок.

Ответ 4

В моем случае мне пришлось запустить sbt clean.

Ответ 5

Java → Scala конверсия без очистки

Не забудьте очистить, если вы конвертируете какой-либо файл в проект с Java на Scala. У меня была непрерывная сборка интеграции, где я не мог заставить работать, хотя сборка работала локально, после того как я преобразовал Java-класс в объект Scala. Решение: добавьте "clean" в процедуру сборки на сервере CI. Я думаю, что имя сгенерированного файла .class в Scala несколько отличается от класса Java, поэтому, скорее всего, это вызвало проблему.

Ответ 6

Если вы используете gradle в качестве инструмента сборки, убедитесь, что задача jar не отключена.

У меня было несколько модулей в моем проекте, где один модуль зависел от нескольких других модулей. Однако я отключил задачу jar в build.gradle:

jar { enabled = false }

Это привело к тому, что он не смог разрешить классы в зависимых модулях и не смог выполнить вышеуказанную ошибку.

Ответ 7

Я поделюсь своей историей, на случай, если она кому-нибудь поможет.

Сценарий: компиляция intellij завершается успешно, но сборка gradle не выполняется при import com.foo.Bar, где Bar - это класс scala.

Причина TL;DR: Bar был расположен под src/main/java/... в отличие от src/main/scala/...

Фактическая причина: Bar не компилировалась с compileScala задачи compileScala compileScala (из плагина gradle scala), поскольку она ищет источники scala только в src/<sourceSet>/scala.

С docs.gradle.org:

Все исходные каталоги Scala могут содержать код Scala и Java. Исходные каталоги Java могут содержать только исходный код Java.

Надеюсь это поможет

Ответ 8

У меня была похожая ситуация, которая терпела неудачу как в IntelliJ, так и в maven в командной строке. Я пошел применить предложенное временное исправление (добавив _root_), но intellij так плохо глючил, что было невозможно.

В конце концов я заметил, что неправильно создал пакет, чтобы он повторял весь путь пакета. Это означало, что каталог, в котором находился мой класс, имел подпапку с именем "com", и начало моего файла выглядело так:

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

import com.holdenkarau.spark.testing.DataFrameSuiteBase 

где у меня был другой пакет с именем com.mycompany.mydept.myproject.myfunctionality.sub1.com.mycompany.mydept.myproject.myfunctionality.sub2

И компилятор искал "holdenkarau" под com.mycompany.mydept.myproject.myfunctionality.com и терпел неудачу.

Ответ 9

У меня была похожая проблема, но ни одно из решений здесь не помогло мне. Однако то, что сработало, было простым перезапуском моей машины.

Возможно, это было что-то с моим Intellij, но после быстрого перезапуска все, кажется, работает нормально.

Ответ 10

У меня была эта проблема при использовании Intellij и встроенной оболочки sbt (точнее, я пытался запустить команду console, которая вызывает проверку кода компилятором).

В моем случае, попробовав другие предложенные решения в этой теме, я обнаружил, что могу перезапустить оболочку sbt, и она исчезнет. Там есть кнопка с левой стороны петлевой зеленой стрелки и маленький серый квадрат, который делает это одним щелчком мыши (очевидно, это связано с тем, что Jet Brains не меняет дизайн IDE !!!).

Я надеюсь, что это поможет некоторым людям быстро обойти эту проблему.