繁体   English   中英

java.lang.NoClassDefFoundError:无法初始化类

[英]java.lang.NoClassDefFoundError: Could not initialize class

我在运行一些测试时只得到一些错误java.lang.NoClassDefFoundError

这是设置:测试是用Scala和Scala和Java编写的。 使用蚂蚁和常春藤。

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运行了许多测试。 有时所有测试都没有任何问题,但有时它们会因此异常而失败。

这是一个测试如何在失败时调用Order 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()

这可能不是你的整个类路径,你必须在某处有一个缺失类的名称(可能在'由...引起'之后)。 也许TestNG可以配置为显示完整的堆栈跟踪。

无论如何,初始化器错误意味着'对象Order'在其构造函数中引发了异常,所以看看你在那里使用的是什么:可能缺少JDBC类? 或者您通过类加载器检索的配置文件?

您的订单类似乎是一种代理方式。 它没有初始化。

我认为问题是这样的:

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

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

通常,当您的单例对象中存在未捕获的异常时,会发生此类问题。 尝试在里面放一个try catch子句来获取错误的来源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM