Компиляция макросов Scala 2.10-RC3 в проекте sbt

Я использую SBT для своего проекта и недавно решил добавить в него макросы.

Итак, я последовал примерам из этого проекта:

https://github.com/adamw/scala-macro-debug/tree/15fc8af48a6e7772c44b726513949a8ac9c9e3b7

В project/Build.scala есть такое:

object ScalaMacroDebugBuild extends Build {
  import BuildSettings._

  lazy val root: Project = Project(
    "root",
    file("."),
    settings = buildSettings) aggregate (macros, src)

  lazy val macros: Project = Project(
    "macros",
    file("macros"),
    settings = buildSettings ++ Seq(
      libraryDependencies <+= (scalaVersion)("org.scala-lang" % "scala-compiler" % _)))

  lazy val src: Project = Project(
    "src",
    file("src"),
    settings = buildSettings) dependsOn (macros)

}

Моя структура каталогов:

                     MyProject
           src                  macros          project         build.sbt
    main         test                       Build.scala
scala   java   scala java

Итак, SBT компилирует все под src, и это прекрасно работает.

Но когда я компилирую файлы в каталоге макросов, они не становятся доступными для файлов в каталоге src, поэтому я получаю ошибку компиляции.

Как мне скомпилировать мои макросы, а затем сделать их доступными, чтобы проект, использующий их, мог их найти?


person James Black    schedule 06.12.2012    source источник
comment
Конфигурация сборки выглядит правильно. Это может помочь отформатировать описание структуры каталогов. Таким образом, мы можем определить, что там что-то не так. В противном случае вам может потребоваться показать образец кода и сообщение об ошибке.   -  person Mark Harrah    schedule 12.12.2012
comment
@MarkHarrah - Извините, я думал, что он отформатирован. Только что сделал это.   -  person James Black    schedule 15.12.2012
comment
О, понятно, извините. Это просто немного отличается от обычного вывода чего-то вроде tree. Я дам правильный ответ ниже.   -  person Mark Harrah    schedule 17.12.2012


Ответы (1)


Нормальный исходный каталог - <project-base>/src/main/scala. В этом примере наличие проекта с базовым каталогом MyProject/src/ сбивает с толку.

Во-первых, это корневой проект, базовым каталогом которого является MyProject и, таким образом, он получает свои основные исходные коды Scala из MyProject/src/main/scala/. Базовый каталог подпроекта src - MyProject/src/ и получает свои источники от MyProject/src/src/main/scala/ (двойное src/ является преднамеренным).

Итак, решение, вероятно, состоит в том, чтобы переименовать базовый каталог для проекта src, а затем поместить источники в ожидаемую структуру каталогов.

Вы можете использовать show root/compile:sources, show src/compile:sources, show root/compile:source-directories и т. Д. Для просмотра того, что sbt считает источниками и каталогами исходных текстов. Это может помочь подтвердить, что все обстоит так, как вы ожидаете, и даст представление о том, что может быть не так. См. Также команду inspect.

person Mark Harrah    schedule 16.12.2012
comment
Я посмотрю на то, что вы предложили. Мой build.sbt находится в каталоге MyProject, поэтому корень обычного источника - это src / ..., а макросы там, где мои макросы, на том же уровне, что и src. - person James Black; 17.12.2012
comment
Я добавил в свою иерархию каталогов, чтобы показать, где находится build.sbt. - person James Black; 17.12.2012