首页 > 解决方案 > Scala bazel Worker 进程没有返回 WorkResponse:

问题描述

在 BAZELWORKSPACE文件中我添加了:

maven_jar(name = "com_chuusai_shapeless", artifact = "com.chuusai:shapeless_2.12:2.3.3")

BUILD文件中还添加了这个依赖:

deps = [
        "@com_chuusai_shapeless//jar"
    ],

在我的代码中,我有:

import shapeless._

object ShapelessPG {

  def run() = {
    val emp = Employee("Maciej", 1, true)
    val iceCream = IceCream("Vanillia", 5, false)

    println(s"emp: $emp iceCream: $iceCream")

    val genEmp = Generic[Employee]
    val genIce = Generic[IceCream]

使用build命令时,但运行时出现错误:

bazel build :App
DEBUG: /private/var/tmp/_bazel_userXYZ/daf16773bdceeb074610f489c565e309/external/io_bazel_rules_scala/scala/scala_maven_import_external.bzl:59:9: 'jar_sha256' is deprecated. Please use 'artifact_sha256'
INFO: Analyzed target //:App (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
ERROR: /Users/userXYZ/workspace/shapeless-bazel-zio-cats-playground/BUILD:3:1: scala //:App failed: Worker process did not return a WorkResponse:

---8<---8<--- Start of log snippet, file at /private/var/tmp/_bazel_userXYZ/daf16773bdceeb074610f489c565e309/bazel-workers/worker-3-Scalac.log ---8<---8<---

日志文件显示:

Exception in thread "main" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file shapeless/ReprTypes
        at java.lang.ClassLoader.defineClass1(Native Method)

因为代码:

val genEmp = Generic[Employee]

在 sbt 中运行良好。

我不知道如何解决它..有人可以帮助我吗?

谢谢!

标签: scalabazel

解决方案


maven_jar不会引入shapeless的传递依赖关系,例如macro-compatscala-library。改用rules_jvm_external

load("@rules_jvm_external//:defs.bzl", "maven_install")

maven_install(
    artifacts = [
        "com.chuusai:shapeless_2.12:2.3.3",
    ],
    repositories = [
        "https://jcenter.bintray.com",
    ],
)

这将自动解析并macro_compat获取shapeless. 然后在BUILD文件中,你可以这样依赖shapeless

scala_library(
    name = "my_jar",
    srcs = # ...
    deps = [
        "@maven//:com_chuusai_shapeless_2_12",
    ],
)

推荐阅读