带有 JacocoPluginExtension 的 NullPointerException
NullPointerException with JacocoPluginExtension
我是 运行 Azure DevOps 中的最新 gradle (6.8) 版本,我遇到了 NPE:
Caused by: java.lang.NullPointerException
at org.gradle.testing.jacoco.plugins.JacocoPluginExtension.applyTo(JacocoPluginExtension.java:162)
at org.gradle.testing.jacoco.plugins.JacocoPluginExtension$applyTo.call(Unknown Source)
at org.akhikhl.gretty.StartBaseTask.initJacoco(StartBaseTask.groovy:156)
at org.akhikhl.gretty.StartBaseTask.<init>(StartBaseTask.groovy:41)
at org.akhikhl.gretty.AppStartTask.<init>(AppStartTask.groovy)
at org.akhikhl.gretty.AppStartTask_Decorated.<init>(Unknown Source)
我在build.gradle中有这样的配置:
buildscript {
repositories {
mavenCentral()
}
}
repositories {
mavenCentral()
}
apply plugin: 'java'
apply plugin: 'jacoco'
group = '*****'
version = '1.0-SNAPSHOT'
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
// my deps
}
test {
maxParallelForks = 1
finalizedBy jacocoTestReport
}
jacocoTestReport {
dependsOn test
}
jacoco {
toolVersion = "0.8.6"
}
我在 Azure DevOps 管道中有这样的配置:
- task: Gradle@2
displayName: 'Build and run unit tests'
inputs:
gradleWrapperFile: project-name/gradlew
workingDirectory: project-name
testResultsFiles: 'project-name/build/test-results/test/TEST-*.xml'
sonarQubeRunAnalysis: true
sonarQubeGradlePluginVersion: 2.6.2
知道为什么会这样吗?
NullPointerException with JacocoPluginExtension
如果repo中项目的文件夹中有一个“.gradle
”文件夹。请尝试从存储库中删除 .gradle
文件夹,然后再次重建管道。
注意:做好备份,以防万一。
此外,如果以上建议不适合您,请尝试在没有 Azure devops 的情况下在您的本地构建它,以检查您是否仍然遇到此问题。
从堆栈跟踪可以看出,当 Gretty 插件尝试配置 JaCoCo 插件时会发生 NullPointerException。
Gradle 发展非常快,API 通常会在至少一个主要版本之后被弃用和删除(例如,在 5.0 中弃用并在 6.0 中删除)。 buildscript 和插件作者通常需要大约一到两年的时间来对这些弃用做出反应。
虽然你没有提到,但我很确定你使用的是三年多前的版本 original Gretty plugin:
至少我可以使用该版本重现问题和相同的堆栈跟踪。
虽然它看起来像几年前就被遗弃了,但事实并非如此。相反,该插件已分叉 moved to a new namespace(从 org.akhikhl.gretty
到 org.gretty
):
甚至还有一个 bug report 描述了 NullPointerException 问题(一直追溯到 Gradle 4.6)。
因此,要修复它,请将 Gretty 插件 ID 更改为新的命名空间并使用最新版本:
plugins {
id "org.gretty" version "3.0.3"
}
我是 运行 Azure DevOps 中的最新 gradle (6.8) 版本,我遇到了 NPE:
Caused by: java.lang.NullPointerException
at org.gradle.testing.jacoco.plugins.JacocoPluginExtension.applyTo(JacocoPluginExtension.java:162)
at org.gradle.testing.jacoco.plugins.JacocoPluginExtension$applyTo.call(Unknown Source)
at org.akhikhl.gretty.StartBaseTask.initJacoco(StartBaseTask.groovy:156)
at org.akhikhl.gretty.StartBaseTask.<init>(StartBaseTask.groovy:41)
at org.akhikhl.gretty.AppStartTask.<init>(AppStartTask.groovy)
at org.akhikhl.gretty.AppStartTask_Decorated.<init>(Unknown Source)
我在build.gradle中有这样的配置:
buildscript {
repositories {
mavenCentral()
}
}
repositories {
mavenCentral()
}
apply plugin: 'java'
apply plugin: 'jacoco'
group = '*****'
version = '1.0-SNAPSHOT'
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
// my deps
}
test {
maxParallelForks = 1
finalizedBy jacocoTestReport
}
jacocoTestReport {
dependsOn test
}
jacoco {
toolVersion = "0.8.6"
}
我在 Azure DevOps 管道中有这样的配置:
- task: Gradle@2
displayName: 'Build and run unit tests'
inputs:
gradleWrapperFile: project-name/gradlew
workingDirectory: project-name
testResultsFiles: 'project-name/build/test-results/test/TEST-*.xml'
sonarQubeRunAnalysis: true
sonarQubeGradlePluginVersion: 2.6.2
知道为什么会这样吗?
NullPointerException with JacocoPluginExtension
如果repo中项目的文件夹中有一个“.gradle
”文件夹。请尝试从存储库中删除 .gradle
文件夹,然后再次重建管道。
注意:做好备份,以防万一。
此外,如果以上建议不适合您,请尝试在没有 Azure devops 的情况下在您的本地构建它,以检查您是否仍然遇到此问题。
从堆栈跟踪可以看出,当 Gretty 插件尝试配置 JaCoCo 插件时会发生 NullPointerException。
Gradle 发展非常快,API 通常会在至少一个主要版本之后被弃用和删除(例如,在 5.0 中弃用并在 6.0 中删除)。 buildscript 和插件作者通常需要大约一到两年的时间来对这些弃用做出反应。
虽然你没有提到,但我很确定你使用的是三年多前的版本 original Gretty plugin:
至少我可以使用该版本重现问题和相同的堆栈跟踪。
虽然它看起来像几年前就被遗弃了,但事实并非如此。相反,该插件已分叉 moved to a new namespace(从 org.akhikhl.gretty
到 org.gretty
):
甚至还有一个 bug report 描述了 NullPointerException 问题(一直追溯到 Gradle 4.6)。
因此,要修复它,请将 Gretty 插件 ID 更改为新的命名空间并使用最新版本:
plugins {
id "org.gretty" version "3.0.3"
}