Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gradle 8 upgrade #219

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:

strategy:
matrix:
java_version: [11]
java_version: [17]

steps:
- name: Checkout
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/publish-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ jobs:
- name: Checkout
uses: actions/checkout@v2

- name: Install JDK 11
- name: Install JDK 17
uses: actions/setup-java@v1
with:
java-version: 11
java-version: 17

- name: Upload release
run: ./gradlew publishAllPublicationsToMavenCentralRepository --no-daemon --no-parallel
Expand Down
33 changes: 12 additions & 21 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,28 +9,17 @@ buildscript {
}

dependencies {
classpath 'com.gradle.publish:plugin-publish-plugin:0.10.1'
classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.16.0'
classpath "com.gradle.publish:plugin-publish-plugin:1.2.0"
classpath 'com.vanniktech:gradle-maven-publish-plugin:0.16.0'
}
}

apply plugin: 'groovy'
apply plugin: 'java-library'
apply plugin: 'java-gradle-plugin'
apply plugin: 'com.vanniktech.android.junit.jacoco'
apply plugin: "com.vanniktech.maven.publish"
apply plugin: 'com.gradle.plugin-publish'

gradlePlugin {
plugins {
androidJUnitJacocoPlugin {
id = 'com.vanniktech.android.junit.jacoco'
implementationClass = 'com.vanniktech.android.junit.jacoco.GenerationPlugin'
}
}
}

repositories {
mavenCentral()
google()
Expand All @@ -41,12 +30,12 @@ dependencies {
api gradleApi()
api localGroovy()

compileOnly 'com.android.tools.build:gradle:7.1.2'
compileOnly 'com.android.tools.build:gradle:8.0.0'

testImplementation 'com.android.tools.build:gradle:7.1.2'
testImplementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10'
testImplementation 'junit:junit:4.13'
testImplementation 'org.spockframework:spock-core:2.2-M1-groovy-3.0', { exclude module: "groovy-all" } // Use localGroovy()
testImplementation 'com.android.tools.build:gradle:8.0.0'
testImplementation 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.21'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.3'
testImplementation 'org.spockframework:spock-core:2.4-M1-groovy-3.0', { exclude module: "groovy-all" } // Use localGroovy()

// https://github.com/gradle/gradle/issues/16774#issuecomment-893493869
def toolingApiBuildersJar = (project as ProjectInternal).services.get(ModuleRegistry.class)
Expand All @@ -57,17 +46,19 @@ dependencies {
testRuntimeOnly(files(toolingApiBuildersJar))
}

sourceCompatibility = JavaVersion.VERSION_1_8
sourceCompatibility = JavaVersion.VERSION_17

pluginBundle {
gradlePlugin {
website = POM_URL
vcsUrl = POM_SCM_URL

plugins {
androidJUnitJacocoPlugin {
id = POM_ARTIFACT_ID
implementationClass = POM_IMPLEMENTATION_CLASS
displayName = POM_NAME
tags = ['gradle', 'android', 'jacoco', 'app module', 'library module', 'junit', 'unit', 'testing', 'coverage']
description = POM_DESCRIPTION
tags.set(['gradle', 'android', 'jacoco', 'app module', 'library module', 'junit', 'unit', 'testing', 'coverage'])
}
}
}
Expand All @@ -79,6 +70,6 @@ tasks.withType(Test).configureEach {
}

wrapper {
gradleVersion = '7.4'
gradleVersion = '8.0'
distributionType = Wrapper.DistributionType.ALL
}
7 changes: 4 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
GROUP=com.vanniktech
VERSION_NAME=0.17.0-SNAPSHOT
VERSION_NAME=0.17.0

POM_ARTIFACT_ID=gradle-android-junit-jacoco-plugin
POM_ARTIFACT_ID=com.vanniktech.android.junit.jacoco
POM_IMPLEMENTATION_CLASS =com.vanniktech.android.junit.jacoco.JunitJacocoExtension

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this really correct? Plugin is implemented by com.vanniktech.android.junit.jacoco.GenerationPlugin

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@themockgraeme I uploaded this gradle 8 upgrade plugin jar to internal repo, and applied getting the following error
can you let me know what could be the issue?

FAILURE: Build failed with an exception.

  • Where:
    Build file 'build.gradle' line: 37

  • What went wrong:
    An exception occurred applying plugin request [id: 'com.vanniktech.android.junit.jacoco', version: '0.18.7']

Failed to apply plugin 'com.vanniktech.android.junit.jacoco'.
'com.vanniktech.android.junit.jacoco.JunitJacocoExtension' is neither a plugin or a rule source and cannot be applied.

  • Try:

Run with --info or --debug option to get more log output.
Run with --scan to get full insights.

  • Exception is:
    org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'com.vanniktech.android.junit.jacoco', version: '0.18.7']
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.exceptionOccurred(DefaultPluginRequestApplicator.java:222)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:204)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyLegacyPlugin(DefaultPluginRequestApplicator.java:157)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.access$300(DefaultPluginRequestApplicator.java:60)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator$1$1.lambda$addLegacy$0(DefaultPluginRequestApplicator.java:113)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.lambda$applyPlugins$0(DefaultPluginRequestApplicator.java:142)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:142)
    at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:117)
    at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:65)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
    at org.gradle.configuration.BuildOperationScriptPlugin.lambda$apply$0(BuildOperationScriptPlugin.java:62)
    at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:44)
    at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:62)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:388)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:406)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:387)
    at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:42)
    at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
    at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:35)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.lambda$run$0(LifecycleProjectEvaluator.java:109)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:388)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$fromMutableState$1(DefaultProjectStateRegistry.java:411)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withReplacedLocks(DefaultWorkerLeaseService.java:345)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:411)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:387)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:100)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:72)
    at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:792)
    at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:156)
    at org.gradle.api.internal.project.ProjectLifecycleController.lambda$ensureSelfConfigured$2(ProjectLifecycleController.java:84)
    at org.gradle.internal.model.StateTransitionController.lambda$doTransition$13(StateTransitionController.java:247)
    at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:258)
    at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:246)
    at org.gradle.internal.model.StateTransitionController.lambda$maybeTransitionIfNotCurrentlyTransitioning$10(StateTransitionController.java:207)
    at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:34)
    at org.gradle.internal.model.StateTransitionController.maybeTransitionIfNotCurrentlyTransitioning(StateTransitionController.java:203)
    at org.gradle.api.internal.project.ProjectLifecycleController.ensureSelfConfigured(ProjectLifecycleController.java:84)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.ensureConfigured(DefaultProjectStateRegistry.java:362)
    at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:33)
    at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:47)
    at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:42)
    at org.gradle.configuration.BuildTreePreparingProjectsPreparer.prepareProjects(BuildTreePreparingProjectsPreparer.java:64)
    at org.gradle.configuration.BuildOperationFiringProjectsPreparer$ConfigureBuild.run(BuildOperationFiringProjectsPreparer.java:52)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
    at org.gradle.configuration.BuildOperationFiringProjectsPreparer.prepareProjects(BuildOperationFiringProjectsPreparer.java:40)
    at org.gradle.initialization.VintageBuildModelController.lambda$prepareProjects$2(VintageBuildModelController.java:84)
    at org.gradle.internal.model.StateTransitionController.lambda$doTransition$13(StateTransitionController.java:247)
    at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:258)
    at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:246)
    at org.gradle.internal.model.StateTransitionController.lambda$transitionIfNotPreviously$11(StateTransitionController.java:221)
    at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:34)
    at org.gradle.internal.model.StateTransitionController.transitionIfNotPreviously(StateTransitionController.java:217)
    at org.gradle.initialization.VintageBuildModelController.prepareProjects(VintageBuildModelController.java:84)
    at org.gradle.initialization.VintageBuildModelController.getConfiguredModel(VintageBuildModelController.java:64)
    at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$withProjectsConfigured$1(DefaultBuildLifecycleController.java:116)
    at org.gradle.internal.model.StateTransitionController.lambda$notInState$4(StateTransitionController.java:154)
    at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
    at org.gradle.internal.model.StateTransitionController.notInState(StateTransitionController.java:150)
    at org.gradle.internal.build.DefaultBuildLifecycleController.withProjectsConfigured(DefaultBuildLifecycleController.java:116)
    at org.gradle.internal.build.DefaultBuildToolingModelController.locateBuilderForTarget(DefaultBuildToolingModelController.java:57)
    at org.gradle.internal.buildtree.DefaultBuildTreeModelCreator$DefaultBuildTreeModelController.lambda$locateBuilderForTarget$0(DefaultBuildTreeModelCreator.java:73)
    at org.gradle.internal.build.DefaultBuildLifecycleController.withToolingModels(DefaultBuildLifecycleController.java:185)
    at org.gradle.internal.build.AbstractBuildState.withToolingModels(AbstractBuildState.java:134)
    at org.gradle.internal.buildtree.DefaultBuildTreeModelCreator$DefaultBuildTreeModelController.locateBuilderForTarget(DefaultBuildTreeModelCreator.java:73)
    at org.gradle.internal.buildtree.DefaultBuildTreeModelCreator$DefaultBuildTreeModelController.locateBuilderForDefaultTarget(DefaultBuildTreeModelCreator.java:68)
    at org.gradle.tooling.internal.provider.runner.DefaultBuildController.getTarget(DefaultBuildController.java:157)
    at org.gradle.tooling.internal.provider.runner.DefaultBuildController.getModel(DefaultBuildController.java:101)
    at org.gradle.tooling.internal.consumer.connection.ParameterAwareBuildControllerAdapter.getModel(ParameterAwareBuildControllerAdapter.java:39)
    at org.gradle.tooling.internal.consumer.connection.UnparameterizedBuildController.getModel(UnparameterizedBuildController.java:113)
    at org.gradle.tooling.internal.consumer.connection.NestedActionAwareBuildControllerAdapter.getModel(NestedActionAwareBuildControllerAdapter.java:31)
    at org.gradle.tooling.internal.consumer.connection.UnparameterizedBuildController.findModel(UnparameterizedBuildController.java:97)
    at org.gradle.tooling.internal.consumer.connection.NestedActionAwareBuildControllerAdapter.findModel(NestedActionAwareBuildControllerAdapter.java:31)
    at org.gradle.tooling.internal.consumer.connection.UnparameterizedBuildController.findModel(UnparameterizedBuildController.java:81)
    at org.gradle.tooling.internal.consumer.connection.NestedActionAwareBuildControllerAdapter.findModel(NestedActionAwareBuildControllerAdapter.java:31)
    at org.gradle.tooling.internal.consumer.connection.UnparameterizedBuildController.findModel(UnparameterizedBuildController.java:66)
    at org.gradle.tooling.internal.consumer.connection.NestedActionAwareBuildControllerAdapter.findModel(NestedActionAwareBuildControllerAdapter.java:31)
    at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:125)
    at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:42)
    at org.gradle.tooling.internal.consumer.connection.InternalBuildActionAdapter.execute(InternalBuildActionAdapter.java:64)
    at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner$ActionAdapter.runAction(AbstractClientProvidedBuildActionRunner.java:131)
    at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner$ActionAdapter.beforeTasks(AbstractClientProvidedBuildActionRunner.java:99)
    at org.gradle.internal.buildtree.DefaultBuildTreeModelCreator.beforeTasks(DefaultBuildTreeModelCreator.java:52)
    at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$fromBuildModel$2(DefaultBuildTreeLifecycleController.java:74)
    at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$runBuild$4(DefaultBuildTreeLifecycleController.java:98)
    at org.gradle.internal.model.StateTransitionController.lambda$transition$6(StateTransitionController.java:177)
    at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:258)
    at org.gradle.internal.model.StateTransitionController.lambda$transition$7(StateTransitionController.java:177)
    at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
    at org.gradle.internal.model.StateTransitionController.transition(StateTransitionController.java:177)
    at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.runBuild(DefaultBuildTreeLifecycleController.java:95)
    at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.fromBuildModel(DefaultBuildTreeLifecycleController.java:73)
    at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner.runClientAction(AbstractClientProvidedBuildActionRunner.java:43)
    at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:53)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:49)
    at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:65)
    at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:140)
    at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
    at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:40)
    at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:122)
    at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:40)
    at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40)
    at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:65)
    at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53)
    at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:65)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:61)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:57)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
    at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
    at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:57)
    at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:36)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:249)
    at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:109)
    at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:36)
    at org.gradle.tooling.internal.provider.continuous.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:110)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64)
    at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46)
    at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:100)
    at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:88)
    at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:69)
    at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:62)
    at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:41)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:63)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:50)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:38)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
    at org.gradle.util.internal.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:64)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
    Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin 'com.vanniktech.android.junit.jacoco'.
    at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:173)
    at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:146)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.lambda$applyLegacyPlugin$2(DefaultPluginRequestApplicator.java:159)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:199)
    ... 180 more
    Caused by: org.gradle.api.plugins.InvalidPluginException: 'com.vanniktech.android.junit.jacoco.JunitJacocoExtension' is neither a plugin or a rule source and cannot be applied.
    at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:162)
    ... 183 more

  • Get more help at https://help.gradle.org

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed, this code must be com.vanniktech.android.junit.jacoco.GenerationPlugin as @theernis456 said.

POM_NAME=Gradle Android Jacoco Plugin
POM_PACKAGING=jar

Expand All @@ -18,4 +19,4 @@ POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo

POM_DEVELOPER_ID=vanniktech
POM_DEVELOPER_NAME=Niklas Baudy
POM_DEVELOPER_NAME=Niklas Baudy
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import com.android.build.gradle.api.BaseVariant
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.testing.Test
import org.gradle.testing.jacoco.tasks.JacocoMerge
import org.gradle.testing.jacoco.tasks.JacocoReport

class GenerationPlugin implements Plugin<Project> {
Expand All @@ -15,12 +14,12 @@ class GenerationPlugin implements Plugin<Project> {
final def hasSubProjects = rootProject.subprojects.size() > 0

if (hasSubProjects) {
final def (JacocoMerge mergeTask, JacocoReport mergedReportTask) = addJacocoMergeToRootProject(rootProject, rootProject.junitJacoco)
final def JacocoReport mergedReportTask = addJacocoMergeToRootProject(rootProject, rootProject.junitJacoco)

rootProject.subprojects { subProject ->
afterEvaluate {
final def extension = rootProject.junitJacoco
addJacoco(subProject, extension, mergeTask, mergedReportTask)
addJacoco(subProject, extension, mergedReportTask)
}
}
} else {
Expand All @@ -33,22 +32,22 @@ class GenerationPlugin implements Plugin<Project> {
}

protected static boolean addJacoco(final Project subProject, final JunitJacocoExtension extension) {
return addJacoco(subProject, extension, null, null)
return addJacoco(subProject, extension, null)
}

protected static boolean addJacoco(final Project subProject, final JunitJacocoExtension extension, JacocoMerge mergeTask, JacocoReport mergedReportTask) {
protected static boolean addJacoco(final Project subProject, final JunitJacocoExtension extension, JacocoReport mergedReportTask) {
if (!shouldIgnore(subProject, extension)) {
if (isAndroidProject(subProject)) {
return addJacocoAndroid(subProject, extension, mergeTask, mergedReportTask)
return addJacocoAndroid(subProject, extension, mergedReportTask)
} else if (isJavaProject(subProject) || isKotlinMultiplatform(subProject)) {
return addJacocoJava(subProject, extension, mergeTask, mergedReportTask)
return addJacocoJava(subProject, extension, mergedReportTask)
}
}

return false
}

private static boolean addJacocoJava(final Project subProject, final JunitJacocoExtension extension, JacocoMerge mergeTask, JacocoReport mergedReportTask) {
private static boolean addJacocoJava(final Project subProject, final JunitJacocoExtension extension, JacocoReport mergedReportTask) {
subProject.plugins.apply('jacoco')

subProject.jacoco {
Expand All @@ -62,9 +61,9 @@ class GenerationPlugin implements Plugin<Project> {
description = 'Generate Jacoco coverage reports.'

reports {
xml.enabled = extension.xml.enabled
csv.enabled = extension.csv.enabled
html.enabled = extension.html.enabled
xml.required = extension.xml.enabled
csv.required = extension.csv.enabled
html.required = extension.html.enabled
}

getClassDirectories().from(subProject.fileTree(
Expand All @@ -89,10 +88,8 @@ class GenerationPlugin implements Plugin<Project> {
getExecutionData().from(subProject.files(subProject.files("${subProject.buildDir}/jacoco/test.exec")))
}

if (mergeTask != null) {
mergeTask.executionData.setFrom(executionData.files + mergeTask.executionData.files)
}
if (mergedReportTask != null) {
mergedReportTask.executionData.setFrom(executionData.files + mergedReportTask.executionData.files)
mergedReportTask.classDirectories.setFrom(classDirectories.getFrom() + mergedReportTask.classDirectories.getFrom())
mergedReportTask.additionalSourceDirs.setFrom(additionalSourceDirs.getFrom() + mergedReportTask.additionalSourceDirs.getFrom())
mergedReportTask.sourceDirectories.setFrom(sourceDirectories.getFrom() + mergedReportTask.sourceDirectories.getFrom())
Expand All @@ -103,7 +100,7 @@ class GenerationPlugin implements Plugin<Project> {
return true
}

private static boolean addJacocoAndroid(final Project subProject, final JunitJacocoExtension extension, JacocoMerge mergeTask, JacocoReport mergedReportTask) {
private static boolean addJacocoAndroid(final Project subProject, final JunitJacocoExtension extension, JacocoReport mergedReportTask) {
subProject.plugins.apply('jacoco')

subProject.jacoco {
Expand Down Expand Up @@ -146,11 +143,11 @@ class GenerationPlugin implements Plugin<Project> {
final def jvmTestTaskName = "test${sourceName.capitalize()}UnitTest"
final def instrumentationTestTaskName = "create${sourceName.capitalize()}CoverageReport"

addJacocoTask(false, subProject, extension, mergeTask, mergedReportTask, jvmTaskName,
addJacocoTask(false, subProject, extension, mergedReportTask, jvmTaskName,
jvmTestTaskName, instrumentationTestTaskName, sourceName, sourcePath, productFlavorName, buildTypeName)

if (buildType.testCoverageEnabled) {
addJacocoTask(true, subProject, extension, mergeTask, mergedReportTask, combinedTaskName,
addJacocoTask(true, subProject, extension, mergedReportTask, combinedTaskName,
jvmTestTaskName, instrumentationTestTaskName, sourceName, sourcePath, productFlavorName, buildTypeName)
}
}
Expand All @@ -159,7 +156,7 @@ class GenerationPlugin implements Plugin<Project> {
}

private static void addJacocoTask(final boolean combined, final Project subProject, final JunitJacocoExtension extension,
JacocoMerge mergeTask, JacocoReport mergedReportTask, final String taskName,
JacocoReport mergedReportTask, final String taskName,
final String jvmTestTaskName, final String instrumentationTestTaskName, final String sourceName,
final String sourcePath, final String productFlavorName, final String buildTypeName) {
def destinationDir
Expand All @@ -181,15 +178,15 @@ class GenerationPlugin implements Plugin<Project> {

reports {
xml {
enabled = extension.xml.enabled
required = extension.xml.enabled
destination subProject.file("$destinationDir/${sourceName}/jacoco.xml")
}
csv {
enabled = extension.csv.enabled
required = extension.csv.enabled
destination subProject.file("$destinationDir/${sourceName}/jacoco.csv")
}
html {
enabled = extension.html.enabled
required = extension.html.enabled
destination subProject.file("$destinationDir/${sourceName}")
}
}
Expand Down Expand Up @@ -240,27 +237,17 @@ class GenerationPlugin implements Plugin<Project> {

if (combined) {
// add instrumentation coverage execution data
doFirst {
def instrumentationTestCoverageDirs = subProject.fileTree("${subProject.buildDir}/outputs/code_coverage")
.matching { include "**/*.ec" }
def allCodeCoverageFiles = instrumentationTestCoverageDirs.files + executionData.files
subProject.logger.with {
info("using following code coverage files for ${taskName}")
allCodeCoverageFiles.each { coverageFile ->
info(coverageFile.path)
}
}
executionData.setFrom(allCodeCoverageFiles)
def codeCoverageDirs = subProject.fileTree("${subProject.buildDir}/outputs/code_coverage").matching {
include "**/*.ec"
}
executionData.setFrom(codeCoverageDirs.files + executionData.files)
}

// add if true in extension or for the unit test Jacoco task
def addToMergeTask = !combined || extension.includeInstrumentationCoverageInMergedReport

if (mergeTask != null && addToMergeTask) {
mergeTask.executionData.setFrom(executionData.files + mergeTask.executionData.files)
}
if (mergedReportTask != null && addToMergeTask) {
mergedReportTask.executionData.setFrom(executionData.files + mergedReportTask.executionData.files)
mergedReportTask.classDirectories.setFrom(classDirectories.getFrom() + mergedReportTask.classDirectories.getFrom())
mergedReportTask.additionalSourceDirs.setFrom(additionalSourceDirs.getFrom() + mergedReportTask.additionalSourceDirs.getFrom())
mergedReportTask.sourceDirectories.setFrom(sourceDirectories.getFrom() + mergedReportTask.sourceDirectories.getFrom())
Expand All @@ -280,38 +267,20 @@ class GenerationPlugin implements Plugin<Project> {
}
}

def mergeTask = project.task("mergeJacocoReports", type: JacocoMerge) {
def mergedReportTask = project.task("jacocoTestReportMerged", type: JacocoReport) {
executionData project.files().asFileTree // Start with an empty collection.
destinationFile project.file("${project.buildDir}/jacoco/mergedReport.exec")

doFirst {
// Filter non existing files.
def realExecutionData = project.files()

executionData.each {
if (it.exists()) {
realExecutionData.setFrom(project.files(it) + realExecutionData.files)
}
}

executionData = realExecutionData
}
}

def mergedReportTask = project.task("jacocoTestReportMerged", type: JacocoReport, dependsOn: mergeTask) {
executionData mergeTask.destinationFile

reports {
xml {
enabled = extension.xml.enabled
required = extension.xml.enabled
destination project.file("${project.buildDir}/reports/jacoco/jacoco.xml")
}
csv {
enabled = extension.csv.enabled
required = extension.csv.enabled
destination project.file("${project.buildDir}/reports/jacoco/jacoco.csv")
}
html {
enabled = extension.html.enabled
required = extension.html.enabled
destination project.file("${project.buildDir}/reports/jacoco")
}
}
Expand All @@ -322,7 +291,7 @@ class GenerationPlugin implements Plugin<Project> {
getSourceDirectories().from(project.files())
}

return [mergeTask, mergedReportTask]
return mergedReportTask
}

static List<String> getExcludes(final JunitJacocoExtension extension) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class JunitJacocoExtension {
* define the version of jacoco which should be used
* @since 0.3.0
*/
String jacocoVersion = '0.8.7'
String jacocoVersion = '0.8.10'

/**
* subprojects that should be ignored
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import spock.lang.Unroll

final class GenerationPluginSpec extends Specification {
final static ANDROID_PLUGINS = ["com.android.application", "com.android.library", "com.android.test", "com.android.dynamic-feature"]
final static COMPILE_SDK_VERSION = 28
final static BUILD_TOOLS_VERSION = "28.0.3"
final static APPLICATION_ID = "com.example"
final static COMPILE_SDK_VERSION = 33
final static BUILD_TOOLS_VERSION = "33.0.0"
final static APPLICATION_ID = "com.vanniktech"

def project

Expand Down