3

我正在使用最新的 gradle (6.8) 在 Azure DevOps 中运行构建,我得到了 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

任何想法为什么会发生?

4

2 回答 2

2

从堆栈跟踪中可以看出,NullPointerException 在 Gretty 插件尝试配置 JaCoCo 插件时发生。

Gradle 的发展速度非常快,API 经常被弃用,并在至少一个主要版本之后被移除(例如,在 5.0 中被弃用,在 6.0 中被移除)。buildscript 和插件作者通常需要大约一到两年的时间来对这些弃用做出反应。

尽管您没有提及,但我很确定您使用的是原始 Gretty 插件的三年多版本:

在此处输入图像描述

至少我可以使用该版本重现问题和相同的堆栈跟踪。

虽然它看起来像是几年前被遗弃的,但事实并非如此。相反,该插件已被分叉并移动到一个新的命名空间(从org.akhikhl.grettyorg.gretty):

在此处输入图像描述

甚至还有一个描述 NullPointerException 问题的错误报告(一直追溯到 Gradle 4.6)。

所以要修复它,将 Gretty 插件 ID 更改为新的命名空间并使用最新版本:

plugins {
  id "org.gretty" version "3.0.3"
}
于 2021-01-13T08:48:03.343 回答
0

带有 JacocoPluginExtension 的 NullPointerException

如果.gradlerepo 中项目的文件夹中有“”文件夹。请尝试.gradle从存储库中删除文件夹,然后再次重建管道。

注意:做好备份,以防万一。

此外,如果上述建议对您不起作用,请尝试在没有 Azure devops 的情况下在本地构建它,以检查您是否仍然存在此问题。

于 2021-01-13T02:30:22.317 回答