【问题标题】:Scala with AWS Java SDK - compiles locally but not on jenkinsScala 与 AWS Java SDK - 在本地编译但不在 jenkins 上
【发布时间】:2013-06-17 12:29:55
【问题描述】:

最近我遇到了代码编译的奇怪问题 - 相同的代码在我的开发机器上运行良好(编译),但在 jenkins 上失败。

我的开发机器配置:

  • win7_64
  • sun jdk6 _64

Jenkins 配置:

  • ubuntu x86
  • sun jdk6 x86 - 当前设置为 JAVA_HOME(openjdk6 安装在 sun 旁边的系统中)

都使用 sbt 0.11.2 和 scala 2.9.1

导致问题的代码与 AWS Transcoder 服务相关。

val result = new CreateJobRequest()    
result.setInput(input.asAWSJobInput)    
result.setOutputs(outputs.map(_.asAWSJobOutput))      
result.setPipelineId(pipelineId)
  • CreateJobRequest 是来自 com.amazonaws.services.elastictranscoder.model 包的 CreateJobRequest
  • asAWSJobInput 将 scala 类映射到上述包中的 JobInput
  • asAWSJobOutput 将 scala 类映射到上述包中的 CreateJobOutput
  • 我在这里也使用了 collection.JavaConversions._(在 setOutputs 中转换为 java 集合)。

这在本地编译得很好,并在 jenkins 上返回:

值 setOutputs 不是 com.amazonaws.services.elastictranscoder.model.CreateJobRequest 的成员

我尝试了一些方法,例如显式调用转换或将 setOutputs 参数提取到 val 中。我也尝试过使用 withOutputs - jenkins 上的类似结果。 我还尝试过使用 setOutput(CreateJobOutput) ,它在两台机器上都运行良好。

这似乎是与环境有关的问题,但我现在不知道是什么原因造成的。 非常感谢任何帮助。

最好的问候, 阿雷克

【问题讨论】:

  • 也许您在本地和远程有不同版本的 amazon artifact?

标签: java scala amazon-web-services


【解决方案1】:

根据源代码的the 1.3.32 versionsetOutputs不是CreateJobRequest的成员。但是,它存在于 Maven Central 的最新版本 - 1.4.6 的类中。

您很有可能在本地和 Jenkins 服务器上与不同版本的 AWS API 进行比较。

【讨论】:

  • 早上我将 AWS sdk 的版本从 1.4.5 更新到 1.4.6(setOutputs 事务在 1.4.4.1 中引入)并清理了 jenkins 工作区 - 仅下载和编译了 1.4.6仍然失败
  • @akaczynski - 我敢打赌你仍然使用旧版本......不知何故!您是在使用 Maven / Ivy 还是在尝试手动管理您的依赖项?您的构建类路径中是否可能有多个 AWS 开发工具包副本?
  • 是的,我正在使用 Ivy,sbt 告诉我只有一个版本 (1.4.6) 的 aws-java-sdk 在类路径中
【解决方案2】:

我想通了,这是与 java 相关的问题 - 在较新的 jdk 上运行良好。 @Stephen C 谢谢你的建议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多