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

scalapb和自定义源生成器冲突

公良飞尘
2023-03-14

我希望向sbt添加一个自定义源生成器,并将其与scalapb(Scala协议缓冲区生成器)一起使用。每一个都独立工作。然而,当两者结合在一起时,项目在清理后第一次编译失败。如果我再次运行compile,它就会成功。

name := "Foo root project"

scalaVersion in ThisBuild:= "2.12.1"

sourceGenerators in Compile += Def.task {
  val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
  IO.write(file, """object Test extends App { println("Hi") }""")
  Seq(file)
}.taskValue

PB.targets in Compile := Seq(
  scalapb.gen() -> (sourceManaged in Compile).value
)

错误消息:

[error] source file '/ ... /target/scala-2.12/src_managed/main/demo/Test.scala' could not be found
[error] one error found
[error] (compile:compileIncremental) Compilation failed

要再现此错误,您需要在src/main/protobuf中至少有一个proto文件。

我的自定义任务和scalapb这两个源生成器会发生冲突,这让我感到困惑。它们不应该都写入src\u管理的目录吗?我是否遗漏了一些基本的sbt概念?

共有1个答案

荀裕
2023-03-14

sbt-pro c存在一个已知问题,使其删除src托管目录中的源。

选项1:将ScalaPB生成到srcManaged的子目录,以便只删除该目录:

PB.targets in Compile := Seq(
  scalapb.gen() -> (sourceManaged in Compile).value / "protobufs"
)

选项2:使ScalaPB不删除子目录,但您必须不时自己清理它(例如,当protobuf消息被重命名时):

PB.deleteTargetDirectory in Compile := false
 类似资料:
  • 我有一个自定义文件,其中包含我所有图像的路径及其标签,我在一个数据框中加载使用: MyIndex有两列感兴趣的ImagePath和ClassName 接下来我做一些训练测试拆分和编码输出标签为: 我面临的问题是一次性加载的数据太大,无法放入当前的机器内存,因此我无法处理完整的数据集。 我曾尝试使用datagenerator,但不想遵循它遵循的目录约定,也无法消除增强部分。 问题是,是否有一种方法可

  • 是否有方法重写build方法返回SampleClass以避免执行build.build?

  • 我试图创建一个自定义的原型,它定义了一个实质性的pom.xml并包含几个源文件。 在使用这个原型生成项目时,没有包含我在archetype.xml中定义的任何源(pom.xml按预期生成)。 batfile.bat位于src/main/resources/archetype-resources/src/main/resources中。 我还有一个原型-metadata.xml位于src/main/

  • 问题内容: 我正在尝试使用Maven生成Spring框架要使用的JAXB文件,但是Maven显示以下错误: 我了解它无法生成带有名称的文件,但是我不确定如何解决该问题。 Maven插件 我将以下文件添加到程序包中,但没有帮助。 问题答案: 您面临的错误消息基本上表明您两次使用了wsdl部分中的某些名称。在您的情况下, 所有 标记与其对应的类型(定义为)具有相同的名称。 例: 这很不常见。 解决这些

  • 我的目的是为我的cucumberguice单元测试生成EntityManager和Logger SFL4J实现。 我创建了以下资源生成器 现在,我想我应该使用AbstractModule的实现来绑定这些类,所以:公共类ServiceModule将AbstractModule{@Override protected void configure(){bind(EntityManager.class)

  • 我已经创建了一个自定义的生产者拦截器(Audit病人拦截器),它接受一些自定义配置(application_id,类型等)。)。我已经从奥迪生产者拦截器项目生成了一个罐子,并将罐子放在Kafka连接中 /usr/share/java/monitoring-interceptors.当我尝试发布具有以下配置的JDBC-Source连接器时,我的审计拦截器没有被触发。 正如您在配置中看到的,我在连接器