Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Scala中的其他目录导入文件?_Scala_Import_Directory_Compilation_Subdirectory - Fatal编程技术网

如何从Scala中的其他目录导入文件?

如何从Scala中的其他目录导入文件?,scala,import,directory,compilation,subdirectory,Scala,Import,Directory,Compilation,Subdirectory,我有如下目录层次结构: src src/Model src/View src/Controller 现在我想构建我的应用程序。我如何从模型视图和控制器导入/包含类,因为编译器看不到它们 //编辑 src/App.scala import swing._ object App extends Application { val model = new Model val view = new View(model) val controller = n

我有如下目录层次结构:

src
src/Model
src/View
src/Controller
现在我想构建我的应用程序。我如何从模型视图和控制器导入/包含类,因为编译器看不到它们

//编辑

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中时,一切正常

使用成熟的构建工具,而不是手工编写shell脚本。SBT一定是你在这里的最佳选择

在每个源文件的顶部,指定它应该属于哪个包。将所有内容都转储到默认包中是不明智的,这会导致将来的名称空间冲突

确保每个文件还导入它依赖的类


由于您尚未报告所遇到的错误,我们只能猜测。然而,基本的错误似乎很简单,您正在编译在不同步骤中相互引用的代码。解决办法很简单:不要那样做。这样做:

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."

-1细节不够详细。请显示一些文件的内容以及您试图如何编译此文件的详细信息。