Scala fat jar 中的 ExecutionInterceptorChain 中缺少 AWS SDK 执行拦截器

2024-02-02

我对 scala / java / sbt 相当陌生,这是我第一次调试通过 sbt 在“scala”中运行的代码与从编译的 jar 运行的相同代码之间的差异。我有一些 Scala 代码,它利用 AWS Java SDK 发出一些 S3 请求。当我使用 sbt 或 Intellij 在“Scala”中运行代码时,代码按预期成功。如果我使用 sbt 构建一个 fat jar 并使用该 jar 在“Java”中运行相同的代码,则代码会失败。我调试了失败并将其归因于拦截器链中缺少 ExecutionInterceptors:

// Logging the code ran from 'scala'
2022-12-21 14:09:33,861 [main] DEBUG software.amazon.awssdk.core.interceptor.ExecutionInterceptorChain -  Creating an interceptor chain that will apply interceptors in the following order: 
[software.amazon.awssdk.core.internal.interceptor.HttpChecksumRequiredInterceptor@5965844d, 
software.amazon.awssdk.core.internal.interceptor.SyncHttpChecksumInTrailerInterceptor@6d4a65c6, 
software.amazon.awssdk.core.internal.interceptor.HttpChecksumValidationInterceptor@aa004a0, 
software.amazon.awssdk.core.internal.interceptor.AsyncRequestBodyHttpChecksumTrailerInterceptor@4c98a6d5, 
software.amazon.awssdk.core.internal.interceptor.HttpChecksumInHeaderInterceptor@392a04e7, 
software.amazon.awssdk.awscore.interceptor.HelpfulUnknownHostExceptionInterceptor@7f02251, 
software.amazon.awssdk.awscore.eventstream.EventStreamInitialRequestInterceptor@dffa30b, 
software.amazon.awssdk.awscore.interceptor.TraceIdExecutionInterceptor@4d8126f, 
software.amazon.awssdk.services.s3.internal.handlers.EnableChunkedEncodingInterceptor@6d3c232f, 
software.amazon.awssdk.services.s3.internal.handlers.DisableDoubleUrlEncodingInterceptor@6b587673, 
software.amazon.awssdk.services.s3.internal.handlers.EnableTrailingChecksumInterceptor@1bcf67e8, 
software.amazon.awssdk.services.s3.internal.handlers.CreateMultipartUploadRequestInterceptor@5f404594, 
software.amazon.awssdk.services.s3.internal.handlers.GetObjectInterceptor@53692008, 
software.amazon.awssdk.services.s3.internal.handlers.ExceptionTranslationInterceptor@7b2a3ff8, 
software.amazon.awssdk.transfer.s3.internal.ApplyUserAgentInterceptor@1bbae752, 
software.amazon.awssdk.services.s3.internal.handlers.AsyncChecksumValidationInterceptor@460b6d54, 
software.amazon.awssdk.services.s3.internal.handlers.EndpointAddressInterceptor@5cf87cfd, 
software.amazon.awssdk.services.s3.internal.handlers.SignerOverrideInterceptor@76075d65, 
software.amazon.awssdk.services.s3.internal.handlers.GetBucketPolicyInterceptor@3a4ba480, 
software.amazon.awssdk.services.s3.internal.handlers.PutObjectInterceptor@27b71f50, 
software.amazon.awssdk.services.s3.internal.handlers.SyncChecksumValidationInterceptor@383790cf, 
software.amazon.awssdk.services.s3.internal.handlers.DecodeUrlEncodedResponseInterceptor@74971ed9, 
software.amazon.awssdk.services.s3.internal.handlers.CreateBucketInterceptor@131fcb6f, 
software.amazon.awssdk.services.s3.internal.handlers.CopySourceInterceptor@ccd1bc3]
// Logging the same code ran from 'java'
2022-12-21 14:15:06,281 [main] DEBUG software.amazon.awssdk.core.interceptor.ExecutionInterceptorChain -  Creating an interceptor chain that will apply interceptors in the following order: 
[software.amazon.awssdk.core.internal.interceptor.HttpChecksumRequiredInterceptor@147e2ae7, 
software.amazon.awssdk.core.internal.interceptor.SyncHttpChecksumInTrailerInterceptor@448c8166, 
oftware.amazon.awssdk.core.internal.interceptor.HttpChecksumValidationInterceptor@4470fbd6, 
software.amazon.awssdk.core.internal.interceptor.AsyncRequestBodyHttpChecksumTrailerInterceptor@15d49048, 
software.amazon.awssdk.core.internal.interceptor.HttpChecksumInHeaderInterceptor@7098b907, 
software.amazon.awssdk.awscore.interceptor.HelpfulUnknownHostExceptionInterceptor@503f91c3, 
software.amazon.awssdk.awscore.eventstream.EventStreamInitialRequestInterceptor@13526e59, 
software.amazon.awssdk.awscore.interceptor.TraceIdExecutionInterceptor@2235eaab, 
software.amazon.awssdk.transfer.s3.internal.ApplyUserAgentInterceptor@17503f6b]

该类型的所有拦截器software.amazon.awssdk.services.s3.internal.handlersjar 中运行的代码中缺少这些内容。

我不确定这是否有直接关系。我的build.sbt有以下合并策略:

  assembly / assemblyMergeStrategy := {
    // Don't discard Geotools META-INF service files
    case PathList("META-INF", xs @ _*) =>
      (xs map { _.toLowerCase }) match {
        case ("manifest.mf" :: Nil) | ("index.list" :: Nil) | ("dependencies" :: Nil) =>
          MergeStrategy.discard
        case ps @ (x :: xs) if ps.last.endsWith(".sf") || ps.last.endsWith(".dsa") =>
          MergeStrategy.discard
        case "plexus" :: xs =>
          MergeStrategy.discard
        case "services" :: xs =>
          MergeStrategy.filterDistinctLines
        case ("spring.schemas" :: Nil) | ("spring.handlers" :: Nil) =>
          MergeStrategy.filterDistinctLines
        case _ => MergeStrategy.discard
      }
    case PathList("reference.conf", xs @ _*) => MergeStrategy.concat
    case PathList("version.conf", xs @ _*)   => MergeStrategy.concat
    case x                                   => MergeStrategy.first
  },

当调试编译我的 jar 时sbt assembly我注意到这一行:[debug] Merging 'software/amazon/awssdk/services/s3/execution.interceptors' with strategy 'first' 这与我缺少拦截器的原因有关吗?或者可能还有其他原因导致缺少这些处理程序,例如缺少依赖项?


我解决了这个问题,问题是 aws s3 拦截器被合并了,我将此行添加到合并策略中,它解决了问题:

case PathList(
        "software",
        "amazon",
        "awssdk",
        "services",
        "s3",
        "execution.interceptors",
        xs @ _*
        ) =>
      MergeStrategy.concat
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala fat jar 中的 ExecutionInterceptorChain 中缺少 AWS SDK 执行拦截器 的相关文章

  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 配置Scala工作表的工作目录

    我希望 Scala 工作表 和 Scala 解释器 的工作目录是 Eclipse 项目路径而不是 Eclipse 安装目录 我怎样才能 非编程方式 实现这一目标 我知道我可以使用System setProperty user dir 但恕我
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何在Slick 3.0.0中使用StaticQuery?

    在 Slick 2 1 中 我使用以下代码从文件执行 sql 查询 def fetchResult T sql String implicit getResult GetResult T List T val query Q queryNA
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 在案例类中重载 unapply 方法:scala

    考虑下面的代码 case class User id Int name String object User def unapply str String Some User 0 str Scala 抱怨 错误 无法解析重载未应用 案例类
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • java.lang.OutOfMemoryError:Scala 上超出了 GC 开销限制

    我是 Scala 开发人员 我在Routes它包含的文件1008行如果我添加另一行 则会抛出下面的错误 Uncaught error from thread sbt web scheduler 1 shutting down JVM sin
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • `?` 运算符只能在返回 `Result` 或 `Option` (或实现 `std::ops::Try` 的其他类型)的函数中使用

    我正在做我的作业 其中包括与 Rust 中的数据库建立连接 我正在使用最新版本的 mysql crate mysql 18 2 0 当我打印池变量时 我的数据库连接成功 我为表学生编写了自己的代码 但收到错误 然后我粘贴文档代码 我收到以下
  • 在 html 页面上一次播放一个视频

    我有一个 html 页面 我使用了视频标签来在线播放视频 我使用了两个视频标签 但是当我播放这两个视频时 两个视频同时播放 我想要一个解决方案 如果我播放一个视频 然后单击第二个视频 那么第一个视频应该暂停 第二个视频开始播放 任何帮助 将
  • 是否可以在 El Capitan 上运行 Xcode 6.3?

    我真的很想尝试 El Capitan 但我不知道是否可以在其上运行旧的 Xcode 因为它现在对我来说至关重要 有人尝试过吗 在终端上运行此命令 Applications Xcode app Contents MacOS Xcode dev
  • Visual Studio 操作系统的条件编译

    我知道有一种方法可以有条件地编译目标框架 例如 if net461 elif 但是有没有一种方法可以针对特定操作系统进行条件编译 像目标 os MAC或目标 os win 如果有人可以指导我如何实现它的文档或教程 第2部分 另外 有没有办法
  • Spring 注释:使用 thymeleaf 对 bean 内部对象属性进行表单验证

    Thymeleaf 有没有办法验证 bean 对象属性中的属性 考虑一下我们确实有一个 Department 类 如下所示 public class Departement Id GeneratedValue strategy Genera
  • 如何获取Web应用程序服务的使用指标数据?

    我正在尝试执行 REST API 以从部署在 Azure 上的 Web 应用程序获取使用指标数据 Hi 我正在尝试执行 REST API 以从部署在 Azure 上的 Web 应用程序获取使用指标数据 https management az
  • php随机名称

    HI 为文件夹创建随机名称的最佳方法是什么 它将用于存储文档的文件夹名称 但是将创建大量文件夹 因此如果可能的话 每次都需要唯一 长度应该在 7 个字符左右 您也可以尝试 PHP 的uniqid http us php net manual
  • ASP.NET WebAPI 将 urlencoded 正文中的空字符串作为 null 传递

    我有一个简单的 ApiController public HttpResponseMessage Put int orderid FromBody Order order Do something useful with order Not
  • EF4 Code First、TDD、CRUD 和事务

    过去 我在创建数据访问 存储库代码时为简单的 CRUD 操作编写了单元测试 如下所示 using var connection new WhateverConnection connectionString connection Open
  • PHP cURL 内容类型未设置

    我想连接一个简单的网络服务 为了发布一些XML 这将在网络服务端正确进行 我需要准备一个正确的请求 我在用cURL对于这样的 try ch curl init if FALSE ch throw new Exception failed t
  • 我该怎么做才能在 WordPress 中获得实际的准备好的语句

    我的公司希望在他们的网站上使用 WordPress 我主要关心的是准备好的语句的使用 根据this https wordpress stackexchange com a 139431 我自己难以置信地阅读了源代码 WordPress 清理
  • 无法将源类型转换为目标类型

    我已经让这个子类实现了我的接口 并且在满足合同方面没有错误 但是 当我尝试在子类的构造函数中设置当前会话时 当它尝试将变量类型与 GetCurrentSession 返回的类型进行比较时 我收到此编译时错误 无法将源类型 IAPISessi
  • SQL Server 2000 - 跳出循环

    我不擅长 SQL Server 2000 我有一个以逗号分隔的 id 列表 我需要查看该 ID 是否存在于表中 如果是这样 我想跳出循环 并将该 ID 保存在可以在存储过程中使用的变量中 这就是我现在正在尝试的 DECLARE coreID
  • 如何使用 std::atomic 实现可重用的线程屏障

    我有 N 个线程执行各种任务 这些线程必须定期与线程屏障同步 如下图所示 有 3 个线程和 8 个任务 表示时间屏障 所有线程必须等到8个任务完成才能再次启动 Thread 1 task1 task6 wait taskB Thread 2
  • 如何一个接一个地运行参数化作业(没有参数)

    我在 Jenkins 有一份工作 有 2 个参数 我想运行另一个没有参数的计划 并从该计划中根据需要多次启动现有计划 新计划需要安排每 15 分钟运行一次 将由 Jenkins 的调度程序选项完成 该计划的代码将 连接到数据库 获取所需的记
  • 如何进行字段枚举迁移 yii2

    我做了字段ENUM 当我使用时结果是错误的yii migrate up在 CMD 窗口上 public function up tableOptions null if this gt db gt driverName mysql tabl
  • 在 c 中使用 malloc 实现堆栈 [初学者]

    出于学习目的 我正在用 c 语言实现一个堆栈及其函数 我添加了一些小的附加功能来第一次使用 malloc 并尝试正确理解它 我编写了一个最初创建堆栈结构的函数 该函数的返回值是一个具有已分配内存的新结构 在返回值应该是结构的函数中处理 ma
  • 如何在 emacs-ess 中的 R 会话之间切换?

    我在 Emacs ESS 中打开了两个会话 一个在我的桌面上 另一个在使用 trapmp 的服务器上 我如何告诉 ESS 使用哪个会话 嗯 我用 M x ess switch process 一直在 Emacs 内的 本地 R 会话之间切换
  • 无法读取 Zsh 历史记录的时间戳

    Problem 了解以下时间戳 1241036430 在 history 1241036336 0 vim zshrc 1241036379 0 vim bin HideTopBar 1241036421 0 ls 1241036430 0
  • Scala fat jar 中的 ExecutionInterceptorChain 中缺少 AWS SDK 执行拦截器

    我对 scala java sbt 相当陌生 这是我第一次调试通过 sbt 在 scala 中运行的代码与从编译的 jar 运行的相同代码之间的差异 我有一些 Scala 代码 它利用 AWS Java SDK 发出一些 S3 请求 当我使