2015-08-13 3 views
4

Как импортировать класс abc из проекта main, который будет использоваться другим классом в проекте web в конфигурации multi-project sbt?Scala несколько проектов SBT: объект не является членом пакета, не найден тип

После sbt compile я получаю:
object abc is not a member of package com not found: type abc

В то время как компиляция в IntelliJ успешно.

build.sbt

lazy val main = project.in(file("main")) 
    .settings(commonSettings: _*) 

lazy val web = project.in(file("web")) 
    .settings(commonSettings: _*) 
    .enablePlugins(PlayScala) 
    .dependsOn(main) 

lazy val root = (project in file(".")) 
    .dependsOn(web, main) 
    .aggregate(web, main) 
    .settings(commonSettings: _*) 


mainClass in root in Compile := (mainClass in web in Compile).value 

fullClasspath in web in Runtime ++= (fullClasspath in main in Runtime).value 

fullClasspath in root in Runtime ++= (fullClasspath in web in Runtime).value 

Внутри веб-проект:

package com.company.web.controllers 
import _root_.com.company.main.abc // also tried without root. 
// Intellij recognizes the import successuflly 

class Posts @Inject() (repo : abc) extends Controller { .. 

Внутри главный проект:

package com.company.main 
class abc @Inject()(){ 

Что может быть неправильным? Спасибо.

+1

Вы можете публиковать полное сообщение об ошибке. Я подозреваю, что ты что-то творишь. Ваш код выше выглядит правильно. Вам не нужен 'fullClasspath ... ++ =', если у вас есть 'dependOn', это означает, что классы находятся на пути. Может ли быть, что '@ Inject' скрипит с помощью байтового кода? Если это затенение, вы можете переименовать импорт для целей тестирования, например 'import main. {Abc => ABC}' –

+0

Спасибо за подсказку 'fullClasspath'. Убрали его и '@ Inject', но результат был таким же – Alex

+0

« Хотя компиляция из IntelliJ успешна »- IntelliJ использует sbt для компиляции, поэтому либо вы имеете в виду, что компилятор презентации не указывает на ошибку, либо вы действительно строите проект ? Если это так, вы должны столкнуться с запуском sbt с терминала, возможно, с неправильным каталогом (собирает другую сборку/проект)? –

ответ

4

Оказался структуру каталогов проекта main не согласно maven структуре каталогов, так как described here

src/ 
    main/ 
    scala/ 
     com/bla/bla 
    test/ 
    scala/ 
     <test Scala sources 

Intellij успешно компиляции проекта, потому что все, что старая структура каталога была на месте, он был отмечен как source directory под File -> project structure -> modules -> sources

Смежные вопросы