【问题标题】:How to exclude classes from compiling when using executing sbt docker:publishLocal?使用执行 sbt docker:publishLocal 时如何从编译中排除类?
【发布时间】:2021-03-06 07:03:33
【问题描述】:

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

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 目录中查找由 gRPC 创建的一些类。

[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 时将它们从docker 映像中排除。我试过这个solution,但没有用。或者找到一些解决方案来完成这项工作。

【问题讨论】:

    标签: scala docker sbt grpc


    【解决方案1】:

    问题是我使用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 中的文件了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2020-02-25
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 2014-08-13
      相关资源
      最近更新 更多