java.lang.NoClassDefFoundError: Could not initialize class Java.lang.NoClassDefFoundError错误:无法初始化类

8

有时运行一些测试时,我遇到了错误java.lang.NoClassDefFoundError

这是环境设置:

测试用Scala编写,服务用Scala和Java编写。同时使用ant和ivy。

Order.scala大致如下:

  object Order extends JdbcEnabled {

  val orderServiceClientIpAddress = Network.localIpAddress
  val PersonalOffersSaleId = "123"
  lazy val checkoutClient = new CheckoutClientImpl(YamlConfigFactory.loadConfig(
    this.getClass.getClassLoader.getResourceAsStream("core_config.yaml")
  ).getRequiredSubConfig("core").getRequiredSubConfig(Environment.HostEnv))


  val storeList = new JLinkedList[Store]()
  storeList.add(OrderHelper.getSelectedStore)
  var skuList = OrderHelper.getAvailableSkus
  val skusForInternationalOrders = skuList


  def createOrder(){...}}

有许多使用TestNG运行的测试。有时候所有测试都能够通过而没有任何问题,但有时候会出现以下异常导致测试失败。

以下是一个测试在调用订单API时失败的代码片段。

val orderNumber = Order.createOrder()

当测试失败时,这是完整的堆栈跟踪:

java.lang.NoClassDefFoundError: Could not initialize class com.api.Order$
    at com.CreateOrder.setUpOnce(CreateOrder.scala:35)

在那个类中第35行,CreateOrder.scala 是:

val orderNumber = Order.createOrder()

我认为这意味着在初始化期间,Order 中的内部类出现了故障。但这可能是 Scala 的特殊用法。 - Hot Licks
4个回答

6

通常,这种问题发生在您的单例对象内部存在未捕获的异常时。尝试在内部放置try catch子句以获取错误的来源。


4

很可能这并不是你的整个类路径,你必须在某个地方有缺失类的名称(可能在“由...引起”的后面)。也许可以配置TestNG以显示完整的堆栈跟踪。

无论如何,初始化程序错误意味着“对象Order”的构造函数抛出了异常,请查看你在那里使用的内容:也许缺少JDBC类?或通过类加载器检索的配置文件?


1
我遇到过类似的问题,但实际的异常并没有被打印出来。我不得不在每一行之间加上“println”语句,才能找出出错的地方! - Mahdi

1
我认为问题出在这里:
  lazy val checkoutClient = new CheckoutClientImpl(YamlConfigFactory.loadConfig(
    this.getClass.getClassLoader.getResourceAsStream("core_config.yaml")
  ).getRequiredSubConfig("core").getRequiredSubConfig(Environment.HostEnv))

正如这里这里所说,似乎存在getClassLoader或类路径的问题。


0

你的Order类似乎是一种代理类。它没有被初始化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接