【问题标题】:Maven surefire-plugin different version at execution than in pomMaven surefire-plugin 执行时的版本与 pom 中的不同
【发布时间】:2021-11-22 15:42:54
【问题描述】:

我正在尝试从 JDK 8 --> JDK 11 迁移,果然 maven surefire-plugin 失败了。所以我知道我需要将它的版本更改为 2.21.0 或更高版本,而且我已经这样做了。该版本仅在一个 pom 中引用,所以一切都应该没问题,甚至 intellIJ 说我使用的是 2.22.2 版本。 问题是当我运行 mvn clean install -U 或 mvn test 或 mvn clean 然后 mvn compile-test 最后一个测试时我仍然收到错误引用: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test (default-test) on project modular-index-composer: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test failed.: NullPointerException

这怎么可能?我 100% 确定该项目的版本必须是 2.22.2。有没有其他方法可以设置?

【问题讨论】:

  • 首先surefire和你升级JDK8->JDK11的关系在哪里?此外,如果没有任何 pom 文件,甚至根本无法猜测出什么是错的或可能是错的......为什么不使用最新版本的 maven-surefire-pugin 呢?
  • Surefire 插件在 2.20.1 版本或低于 jdk 11 的版本中中断。如果你搜索它,你会发现很多人都有这个问题。
  • Surefire 本身通常不会,但它可能取决于使用不同版本的单元测试框架(junit 4.X、junit jupiter、testng?)...

标签: java maven testing maven-surefire-plugin


【解决方案1】:

有点明显/愚蠢的解决方案: 所以这个项目是由多个模块组成的,并且有一个“父”模块,其中大部分依赖于它们的版本。我在这个模块 pom 中更改了 sunfire 版本,似乎没有任何变化。 (尽管 intellij 显示了该插件的正确新版本)

所以我决定排除父 pom 并将 sunfire 插件及其版本直接添加到我的模块中。瞧,它奏效了。 问题可能与父 pom 有关,我的猜测是我的模块没有从正确的父 pom 版本中提取,或者它以某种方式混淆了。

【讨论】:

  • 如果是多模块构建,您有一个父级,您可以通过 pluginManagement 为所有子级定义版本...与依赖无关...
  • 我的错,我可能写得不够清楚。我的模块有一个 sunfire 插件,但它的版本在父 pom.xml 中给出。我更改了该版本(在父 pom 中),但我的模块中似乎没有任何变化,它仍然是旧版本......一旦我直接将这个具有正确版本的插件添加到我的模块中并排除了它在父模块中工作的那个.所以可能我的模块是从不同的父 pom 或类似的东西中提取的。