【问题标题】:Records requires ASM8记录需要 ASM8
【发布时间】:2021-01-13 03:47:03
【问题描述】:

我想玩转具有预览功能的最新 Java 15。我正在使用 Spring Boot 2.4.0-M2 和 Gradle 6.7-rc2,它们都支持 Java 15 功能。
我想使用 jib 从我的项目中构建一个 docker 映像。这是我的吊臂配置:

jib {
    from {
        image = 'openjdk:15-jdk'
    }   
    to {
        image = '<username>/<project>'
    }
    container {
        jvmFlags = ['--enable-preview']
    }
}

不幸的是,当我运行 ./gradlew jib 时,我收到以下错误:

Execution failed for task ':jib'.
> Records requires ASM8

这是使用--info 标志运行时的输出:

> Task :jib FAILED
Caching disabled for task ':jib' because:
  Build cache is disabled
Task ':jib' is not up-to-date because:
  Task has not declared any outputs despite executing actions.
Searching for main class... Add a 'mainClass' configuration to 'jib' to improve build speed.
Could not find a valid main class from 'jar' task; looking into all class files to infer main class.
:jib (Thread[Execution worker for ':',5,main]) completed. Took 0.003 secs.

有人遇到过类似的问题吗?

【问题讨论】:

  • 指定主类后生效。您可以创建一个答案,以便我接受吗?

标签: java spring-boot docker gradle jib


【解决方案1】:

关于错误消息Could not find a valid main class from 'jar' task,此任务缺少主类。所以你必须添加主类,这个过程应该可以工作:

mainClassName = "your.MainClass"

【讨论】:

    【解决方案2】:

    ASM 有一个内部机制,应用程序必须通过代码选择要使用的 API 级别。这意味着在这种情况下,简单地更新依赖将无济于事。

    对此的长期解决方案是等待 jib 切换到更新的 API 级别。

    但是this Github comment 建议在明确指定主类时不需要 ASM。

    因此,您可以通过指定主类来绕过“旧”ASM API 级别,它还应该加快 jib 构建步骤,如日志中所述)。

    【讨论】:

      【解决方案3】:

      如果您在 Android 上获得此功能并且您使用的是 Moshi 1.13.0 和 Dagger Hilt,请将其添加到您应用根目录下的 gradle.properties 文件中。

       android.jetifier.ignorelist=moshi-1.13.0
      

      https://github.com/square/moshi/issues/1463#issuecomment-994576201

      【讨论】:

        猜你喜欢
        • 2022-11-16
        • 2022-01-19
        • 2013-02-26
        • 2011-02-24
        • 2021-10-24
        • 2014-08-15
        • 2013-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多