如何在使用执行 sbt docker:publishLocal 时从编译中排除 类?

How to exclude classes from compiling when using executing sbt docker:publishLocal?

我的 build.sbt 文件有一些配置可以使用 AkkaGrpcPluginDockerPlugin 因为我在 docker 中心发布图像。

lazy val akkaGrpcVersion = "1.0.2"
lazy val protobufVersion = "3.11.4"

enablePlugins(JavaAppPackaging, JavaServerAppPackaging, AkkaGrpcPlugin, DockerPlugin)

akkaGrpcGeneratedLanguages := Seq(AkkaGrpc.Java)
libraryDependencies ++= Seq(
......
)
dockerUsername := Some("felipeogutierrez")

sbt compilesbt run 工作正常,但是命令 sbt docker:publishLocal 不起作用,因为它试图在 target目录。

[error] /home/felipe/workspace-idea/explore-akka/target/scala-2.12/
akka-grpc/main/org/github/felipegutierrez/explore/akka/rpc/greeting/HelloRequest.java:29:7: 
not found: type UnusedPrivateParameter
[error]       UnusedPrivateParameter unused) {
[error]       ^

这些 类 属于 package org.github.felipegutierrez.explore.akka.rpc.greeting 的 类,当我 运行 sbt docker:publishLocal。我试过这个 solution 但它没有用。或者找到一些解决方案来完成这项工作。

问题是我使用 AkkaGrpcPlugin 生成了 Java 文件,它们被放置在我项目的 target 目录中。所以 docker 编译器看不到它。我从 build.sbt 中删除了 AkkaGrpcPluginakkaGrpcGeneratedLanguages := Seq(AkkaGrpc.Java) 并安装了 protobuf 编译器以自己生成 Java 文件。

sudo apt install protobuf-compiler
protoc --java_out=main/java main/protobuf/helloworld.proto

然后文件现在生成在src目录中,Docker可以看到它们。因此,我不必再在 build.sbt.

中排除文件