【问题标题】:How to import files from other directory in Scala?如何从Scala中的其他目录导入文件?
【发布时间】:2011-05-15 14:04:02
【问题描述】:

我有这样的目录层次结构:

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

【问题讨论】:

  • -1 细节不足。请显示一些文件的内容以及您尝试编译的详细信息。

标签: scala import directory compilation subdirectory


【解决方案1】:
  1. 使用成熟的构建工具,而不是使用手动滚动的 shell 脚本。 SBT 一定是您最好的选择。

  2. 在每个源文件的顶部,指定它应该属于哪个包。不建议只转储默认包中的所有内容 - 这是未来命名空间冲突的保证方法。

  3. 确保每个文件也有imports 类它所依赖的。

【讨论】:

    【解决方案2】:

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

    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 作为类路径传递:

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

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 2017-07-31
      • 2017-01-25
      • 2021-01-31
      • 2013-07-26
      • 1970-01-01
      • 2017-08-20
      • 2014-09-07
      相关资源
      最近更新 更多