You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven集成测试启动Jetty遇空指针且未执行测试求助

问题排查与解决方案

咱们把问题拆成两个核心部分来处理:Jetty启动时触发的空指针异常,以及maven-failsafe-plugin未执行测试的问题,一步步来解决:

一、修复Jetty启动时的NullPointerException

从堆栈信息能看到,空指针出现在nl.nn.adapterframework.util.Misc.getBuildOutputDirectory()方法里,这说明Ibis框架的Misc类在尝试获取构建输出目录时,找不到必要的系统属性。结合你的Jetty配置,问题根源是缺少Maven构建相关的系统属性传递,导致框架无法定位项目基础目录和构建输出目录。

解决步骤:

在Jetty插件的<systemProperties>节点中,添加两个Maven内置的系统属性:

<systemProperty>
  <name>basedir</name>
  <value>${project.basedir}</value>
</systemProperty>
<systemProperty>
  <name>project.build.directory</name>
  <value>${project.build.directory}</value>
</systemProperty>

这两个属性会把Maven的项目根目录和构建输出目录(默认是target)传递给Jetty,让Misc类能正确获取路径,避免空指针异常。

另外,日志里提到找不到DeploymentSpecifics.properties,你需要确认这个配置文件是否存在于src/main/resources目录下,如果缺失,得补充这个文件,消除启动警告。

二、让maven-failsafe-plugin执行测试

你的测试类ChromeTestIT.java符合*IT.java的命名规范,但测试没执行,可能有以下几个原因,逐一排查:

1. 确保测试目录被Maven识别

你的测试文件放在webapp\src\test\java\nl\nn\adapterframework\webcontrol\api,默认情况下Maven会自动识别src/test/java作为测试源目录,但如果是多模块项目,可能需要明确配置:

<build>
  <testSourceDirectory>src/test/java</testSourceDirectory>
</build>

2. 完善failsafe插件的配置

虽然你配置了阶段执行,但可以添加<includes>明确指定测试类的匹配规则,确保插件能找到你的测试文件:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.20.1</version>
  <executions>
    <execution>
      <id>integration-test</id>
      <goals>
        <goal>integration-test</goal>
      </goals>
      <configuration>
        <includes>
          <include>**/*IT.java</include>
        </includes>
      </configuration>
    </execution>
    <execution>
      <id>verify</id>
      <goals>
        <goal>verify</goal>
      </goals>
    </execution>
  </executions>
</plugin>

3. 确保Jetty真正启动成功

日志里显示Jetty启动成功,但实际上ConfigurationServlet初始化失败,应用上下文并没有正确加载。解决完第一个空指针问题后,Jetty才能真正把应用跑起来,这时failsafe插件才会在integration-test阶段执行测试。

三、额外优化建议

  • 升级Jetty插件版本:你当前用的Jetty 9.0.7版本比较老旧,建议升级到9.4.x系列的稳定版本,能避免一些潜在的兼容性问题。
  • 检查Selenium依赖:确认ChromeTestIT.java里的ChromeDriver配置正确,并且pom.xml中已经添加了Selenium的相关依赖。

修改完配置后,执行mvn clean verify重新测试,看看空指针是否消失,同时确认failsafe插件是否开始执行你的Selenium测试。

内容的提问来源于stack exchange,提问作者Laurens Mäkel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:48:19