gpt4 book ai didi

java - joda DateTimeFormat 的 NoClassDefFoundError

转载 作者:行者123 更新时间:2023-11-30 11:16:58 27 4
gpt4 key购买 nike

我正在尝试在我使用 sbt 作为构建工具的 Spark 项目(在 Scala 中)中使用 joda 的 DateTimeFormat,当我尝试将它作为独立应用程序运行时,它给了我一个 java.lang.NoClassDefFoundError .这对我来说似乎很奇怪,因为当我在控制台中使用它时我没有收到任何错误,但是当我尝试将它作为应用程序运行时,它会出错

Exception in thread "main" java.lang.NoClassDefFoundError: org/joda/time/format/DateTimeFormat
at com.bdcoe.poc.spark.analytics.Driver$.main(Driver.scala:35)
at com.bdcoe.poc.spark.analytics.Driver.main(Driver.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:292)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:55)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: org.joda.time.format.DateTimeFormat
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 9 more

这是我的 build.sbt 文件,它位于项目的根目录中:

import AssemblyKeys._
import net.virtualvoid.sbt.graph.Plugin.graphSettings

organization := "com.bdcoe.poc"

name := "spark-analytics"

scalaVersion := "2.10.4"

resolvers ++= Seq(
"Local Maven" at Path.userHome.asFile.toURI.toURL + ".m2/repository"
)

libraryDependencies ++= {
val slf4jVersion = "1.7.7"
Seq(
"org.apache.spark" %% "spark-core" % "1.0.0",
"com.github.nscala-time" %% "nscala-time" % "1.2.0",
"org.scalatest" %% "scalatest" % "2.0" % "test",
"org.slf4j" % "slf4j-api" % slf4jVersion % "provided",
"org.slf4j" % "slf4j-nop" % slf4jVersion % "test",
"joda-time" % "joda-time" % "2.2",
"org.joda" % "joda-convert" % "1.2"
)
}

这是我对 joda 的导入/使用:

import org.joda.time.format.DateTimeFormat.{ forPattern => formatFor }

val dateTime = formatFor("YYYY-MM-dd HH:mm").parseDateTime _
val timeStamp: DateTime = dateTime(args(2))

关于为什么它可以在 sbt 控制台中找到 joda 但在作为独立应用程序运行时找不到的任何建议?

最佳答案

问题出在运行时的类路径上。

我注意到您正在使用 sbt-assembly。在 build.sbt 中导入后添加此 assemblySettings 行:

import AssemblyKeys._
import net.virtualvoid.sbt.graph.Plugin.graphSettings

assemblySettings

organization := "com.bdcoe.poc"

...

如文档中所述:https://github.com/sbt/sbt-assembly . Sbt-assembly 将找到主类并使用正确配置的 list 打包 JAR。

请注意,您应该运行的任务是assembly,而不是package。如果您的项目中没有包含 assemblySettings,您之前将无法运行此任务,并且由于您正在运行打包的 JAR(很可能),因此您必须使用 package< 生成它 任务,而不是 assembly

关于java - joda DateTimeFormat 的 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24620716/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com