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 только что смутился.
Ответы
Ответ 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 !!!).
Я надеюсь, что это поможет некоторым людям быстро обойти эту проблему.