当前位置: 首页 > 知识库问答 >
问题:

将多个scalapb源目录添加到多项目SBT构建中

公西俊才
2023-03-14

我在理解scalapb的语法时遇到了一些困难,特别是我正在尝试添加多个。多项目SBT构建的原型源目录。

我的项目结构如下:

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

我的身材。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编译时,我得到以下错误消息:

[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 ?

有人能给我指出正确的方向吗?我不明白这里的一些基本概念...

编辑

好的,我指向了错误的原始目录序列。我已经修改了版本。sbt以反映新的变化。我仍然有一个问题,我的。子项目中未编译原型文件。如果我移动我的。proto文件到root/main/src/protobuf,它们编译得很好。

共有1个答案

濮阳安澜
2023-03-14

如果两个项目都包含src/main/Pro buf中的文件,则需要分别为两个项目启用ScalaPB插件。此示例还显示了如何设置导入搜索路径。完整示例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)
 类似资料:
  • 为了定义一个多项目构建, 你需要创建一个设置文件 ( settings file). 设置文件放在源代码的根目录, 它指定要包含哪个项目. 它的名字必须叫做 settings.gradle. 在这个例子中, 我们使用一个简单的分层布局. 下面是对应的设置文件: Example 7.11. 多项目构建 - settings.gradle file settings.gradle include "s

  • 多项目 通常在一个工程中构建多个项目间会有关联,尤其是它们都依赖一个项目时可以很容易的更新项目 在一个工程中每个子项目都会有自己的源代码目录、生成各自的jar包当执行 package 时. 一个项目通过申明一个 Project 类型的懒值来定义,例如: lazy val util = project lazy val core = project 这个变量值名称将被用来当做 Project Id

  • 简介 每一个活跃的项目会随着时间慢慢增长的,一开始可能只是个很小的项目到后面可能包含很多包和类。为了提高可维护性和解藕的目的,你可能想把项目根据逻辑和功能来划分成一个个模块。模块通常按照等级来组织,相互之间可以定义依赖。 Gradle给项目模块化提供了强大的支持,在Gradle中每个模块都是一个项目,我们称之为多项目构建,这一章介绍Gradle的多项目构建。

  • 在Eclipse中,我创建了RCP插件项目。 我还创建了简单的java项目。 我添加了简单的java项目来构建RCP项目的路径。 因此,我能够在RCP中导入和编译代码,但当我启动RCP应用程序时,在到达使用添加的java项目的代码时,我会遇到异常: 如何解决这个问题(无需创建java项目的jar并将其作为库添加到rcp项目中)?

  • 主要内容:多项目构建的结构,指定常规构建配置,项目指定配置和依赖关系,Gradle多项目构建的示例,子项目配置,参考可以轻松处理各种大小规模的项目。小项目由一个单一的构建文件和一个源代码树构成。 大项目可以将其拆分成更小的,相互依赖的模块,以便更容易理解。Gradle完美支持这种多项目构建的场景。 多项目构建的结构 这种构建有各种形状和大小,但它们都有一些共同的特点 - 在项目的根目录或主目录中都有一个文件。 根目录或主目录都有一个文件。 具有自己的构建文件的子目录(某些多项目构建可能会省略子项

  • sbt子项目是否可以有自己的目录?或者只有根项目可以用。Scala帮助器文件为构建项目的目录?。下面是我目前的建筑结构。无法访问中定义的对象。 更新:sub-project-1/build.sbt中的以下sbt定义 由于以下错误而失败 Common在/my-project/projects/Common.scala中定义,没有问题。但是Localhost是在/my-project/sub-proj