public class PropHolder {
  public static Properties prop;

  static {
    //code for loading properties from file
  }
}

// Referencing the class somewhere else:
Properties prop = PropHolder.prop;

propolder是我自己的一个类。类驻留在主类的同一个JAR文件中。所以这不应该,因为类路径中缺少任何JAR。

当我通过JAR tf myjarfile查看JAR文件时,我可以看到propolder .class列在那里。

顺便说一句:代码在我的本地机器上运行良好。但是当我将它与一些脚本一起部署到Linux服务器上时就无法工作了。所以我认为这不是代码的问题。 但出于某种原因。部署过程很难跟踪。

有什么问题吗?


当前回答

添加这些import语句解决了这个问题:

import org.junit.runner.RunWith;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

其他回答

我遇到了同样的例外,这就是我解决问题的方法:

先决条件:

Junit类(和test),它扩展了另一个类。 ApplicationContext使用spring初始化,初始化项目。 应用程序上下文在@Before方法中初始化

解决方案:

从@BeforeClass方法初始化应用程序上下文,因为父类也需要一些在应用程序上下文中初始化的类。

希望这能有所帮助。

NoClassDefFoundError没有提供关于静态块内部发生了什么错误的太多线索。在static{…中总是有这样一个块是很好的实践。}初始化代码:

static {
  try {

    ... your init code here

  } catch (Throwable t) {
    LOG.error("Failure during static initialization", t);
    throw t;
  }
}

我认为这里有个问题:

static {
    //code for loading properties from file
}

它会出现一些未捕获的异常,并传播到实际的ClassLoader,试图加载该类。不过,我们需要一个堆栈跟踪来确认这一点。

要么是这样,要么是在创建propolder时发生的。道具静态变量。

添加这些import语句解决了这个问题:

import org.junit.runner.RunWith;

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

你会得到一个java.lang.NoClassDefFoundError,这并不意味着你的类丢失了(在这种情况下,你会得到一个java.lang.ClassNotFoundException)。ClassLoader在读取类定义时遇到错误。

在静态初始化器中放入try/catch并查看异常。如果你在那里读取一些文件,它与你的本地环境不同,这很可能是问题的原因(可能文件找不到,没有权限等)。