2016-04-15 6 views
2

У меня возникли трудности с пониманием синтаксиса для scalapb, в частности, я пытаюсь добавить несколько исходных каталогов .proto для многопроектной сборки SBT.Добавить несколько скалярных исходных каталогов в Multi-Project SBT Build

Моя структура проекта выглядит следующим образом:

/build.sbt 
/main/src/protobuf 
/common/main/src/protobuf 
/client/main/src/protobuf 

Мой build.sbt выглядит следующим образом:

name := "myApp" 

import Dependencies._ 

import com.trueaccord.scalapb.{ScalaPbPlugin => PB} 

val protoDirectories = Seq(
    file("common/src/main/protobuf"), 
    file("client/src/main/protobuf") 
) 

sourceDirectories in PB.protobufConfig ++= protoDirectories 

PB.protobufSettings ++ Seq(
    flatPackage := false 
) 

lazy val common = (project in file("common")). 
    settings(Commons.settings: _*). 
    settings(libraryDependencies ++= commonDependencies) 

lazy val client = (project in file("client")). 
    settings(Commons.settings: _*). 
    settings(libraryDependencies ++= clientDependencies). 
    dependsOn(common) 

Когда я бегу sbt compile, я получаю следующее сообщение об ошибке:

[error] Reference to undefined setting: 
[error] 
[error] sphere/*:sourceDirectories from myApp/*:sourceDirectories (<path_to_project_dir>\build.sbt:11) 
[error]  Did you mean myApp/protobuf:sourceDirectories ? 

Может ли кто-нибудь указать мне в правильном направлении? Я не в состоянии понять некоторые основные концепции здесь ...

EDIT

Итак, я указывал на неправильную последовательность для protoDirectories. Я изменил build.sbt, чтобы отразить новые изменения. У меня все еще есть проблема, что мои файлы .proto не скомпилированы в подпроектах. Если я перемещаю свои файлы .proto в файл root/main/src/protobuf, они просто компилируются.

ответ

1

Вам необходимо включить плагин ScalaPB для обоих проектов отдельно, если оба файла содержат файлы в src/main/protobuf. В этом примере также показано, как установить путь поиска импорта. Полный пример: https://github.com/thesamet/scalapb-test/tree/multiproject

import com.trueaccord.scalapb.{ScalaPbPlugin => PB} 

version in PB.protobufConfig := "3.0.0-beta-2" 

lazy val common = (project in file("common")). 
    settings(PB.protobufSettings) 

lazy val client = (project in file("client")). 
    settings(PB.protobufSettings ++ Seq(
    // If you want proto files in client to import proto files in common. 
    PB.includePaths in PB.protobufConfig += file("common/src/main/protobuf") 
)). 
    dependsOn(common) 

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

  • Нет связанных вопросов^_^