Как импортировать файлы из другого каталога в Scala? - PullRequest
0 голосов
/ 15 мая 2011

У меня есть иерархия директорий, такая как:

src
src/Model
src/View
src/Controller

Теперь я хочу построить свое приложение.Как я могу импортировать / включать классы из Model View и Controller, потому что компилятор их не видит?

// edit

src / App.scala

import swing._

object App extends Application {

  val model       = new Model
  val view        = new View(model)
  val controller  = new Controller(model, view)

  view.visible = true

}

src / Model / Model.scala

class Model {
  // some code
}

src / View / View.scala

import swing._

class View(model:Model) extends MainFrame {
  // some code
}

src / Controller / Controller.scala

class Controller(model:Model, view:View) {
  // some code
}

Здесь находитсяскрипт сборки

#!/bin/bash

source ${0%/*}/config.inc.sh

if [ ! -d $CLASSES_PATH ]; then
  notice "Creating classes directory..."
  mkdir $CLASSES_PATH
fi

notice "Building VirtualCut..."
scalac $SOURCE_PATH/Model/*.scala -d $CLASSES_PATH || error "Build failed (Model)."
scalac $SOURCE_PATH/View/*.scala -d $CLASSES_PATH || error "Build failed (View)."
scalac $SOURCE_PATH/Controller/*.scala -d $CLASSES_PATH || error "Build failed (Controller)."
scalac $SOURCE_PATH/*.scala -d $CLASSES_PATH || error "Build failed."
success "Building complete."

exit 0

Все отлично работает, когда все файлы находятся в src dir.

Ответы [ 2 ]

5 голосов
/ 15 мая 2011
  1. Используйте взрослый инструмент для сборки, вместо того, чтобы возиться со сценариями, написанными вручную. SBT должен быть вашей лучшей ставкой здесь.

  2. В верхней части каждого исходного файла укажите, к какому пакету он должен принадлежать. Не рекомендуется просто выгружать все содержимое в пакете по умолчанию - гарантированный рецепт для будущих конфликтов пространства имен.

  3. Убедитесь, что каждый файл также import s классов, от которых он зависит.

3 голосов
/ 16 мая 2011

Поскольку вы не сообщили, какую ошибку вы получаете, нам остается только догадываться. Однако основная ошибка, похоже, заключается в том, что вы компилируете код, который ссылается друг на друга на разных этапах. Решение простое: не делай этого. Сделайте это:

scalac $SOURCE_PATH/Model/*.scala $SOURCE_PATH/View/*.scala $SOURCE_PATH/Controller/*.scala $SOURCE_PATH/*.scala -d $CLASSES_PATH || error "Build failed."
success "Building complete."

Если, однако, вы уверены, что нет перекрестных зависимостей, вам нужно передать CLASSES_PATH как classpath:

scalac $SOURCE_PATH/Model/*.scala-d $CLASSES_PATH || error "Build failed (Model)."
scalac $SOURCE_PATH/View/*.scala -cp $CLASSES_PATH -d $CLASSES_PATH || error "Build failed (View)."
scalac $SOURCE_PATH/Controller/*.scala -cp $CLASSES_PATH -d $CLASSES_PATH || error "Build failed (Controller)."
scalac $SOURCE_PATH/*.scala -cp $CLASSES_PATH -d $CLASSES_PATH || error "Build failed."
...