Kotlin-dsl-samples: TestKit. withPluginClasspath() issues when testing against `build.gradle.kts` scripts

Created on 12 Sep 2017  路  12Comments  路  Source: gradle/kotlin-dsl-samples

TestKit failing to execute a build in the same way as importing the project locally.

Expected Behavior

TestKit test should exhibit same behavior as standalone project and succeed.

Current Behavior

Test fails unexpectedly, but works when running publishToMavenLocal and consuming the plugin from local ~/.m2/repository in a test project succeeds (example project here https://github.com/mkobit/jenkins-pipeline-shared-library-example)

Build output

org.gradle.testkit.runner.UnexpectedBuildFailure: Unexpected build execution failure in /tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516 with arguments [-s, -i]

Output:
The client will now receive all logging from the daemon (pid: 605). The daemon log file: /tmp/.gradle-test-kit-circleci/test-kit-daemon/4.1/daemon-605.out.log
Starting 7th build in daemon [uptime: 30.778 secs, performance: 98%]
Using 36 worker leases.
Closing daemon's stdin at end of input.
The daemon will no longer process any standard input.
Creating new cache for fileHashes, path /tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/.gradle/4.1/fileHashes/fileHashes.bin, access org.gradle.cache.internal.DefaultCacheAccess@29e6a1ff
Creating new cache for plugin-use-metadata, path /tmp/.gradle-test-kit-circleci/caches/4.1/plugin-resolution/plugin-use-metadata.bin, access org.gradle.cache.internal.DefaultCacheAccess@1c7aae0b
Creating new cache for client-status, path /tmp/.gradle-test-kit-circleci/caches/4.1/plugin-resolution/client-status.bin, access org.gradle.cache.internal.DefaultCacheAccess@1c7aae0b
Starting Build
Settings evaluated using settings file '/tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/settings.gradle'.
Projects loaded. Root project using build file '/tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/build.gradle.kts'.
Included projects: [root project 'Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516']
Evaluating root project 'Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516' using build file '/tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/build.gradle.kts'.
Generating JAR file: /tmp/.gradle-test-kit-circleci/caches/4.1/generated-gradle-jars/gradle-api-4.1.jar
Generating JAR file 'gradle-api-4.1.jar'
Generating JAR file 'gradle-kotlin-dsl-extensions-0.10.3-4.1.jar'
w: Some JAR files in the classpath have the Kotlin Runtime library bundled into them. This may cause difficult to debug problems if there's a different version of the Kotlin Runtime library in the classpath. Consider removing these libraries from the classpath or use '-Xskip-runtime-version-check' to suppress this warning
w: /home/circleci/.gradle/wrapper/dists/gradle-4.1-bin/c3kp51zwwt108wc78u68yt7vs/gradle-4.1/lib/kotlin-compiler-embeddable-1.1.3-2.jar: Library has Kotlin runtime bundled into it
Creating new cache for metadata-1.1/results, path /tmp/.gradle-test-kit-circleci/caches/transforms-1/metadata-1.1/results.bin, access org.gradle.cache.internal.DefaultCacheAccess@721f5cba
w: Some JAR files in the classpath have the Kotlin Runtime library bundled into them. This may cause difficult to debug problems if there's a different version of the Kotlin Runtime library in the classpath. Consider removing these libraries from the classpath or use '-Xskip-runtime-version-check' to suppress this warning
w: /home/circleci/.gradle/wrapper/dists/gradle-4.1-bin/c3kp51zwwt108wc78u68yt7vs/gradle-4.1/lib/kotlin-compiler-embeddable-1.1.3-2.jar: Library has Kotlin runtime bundled into it
e: /tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/build.gradle.kts:14:3: Unresolved reference: groovyVersion
e: /tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/build.gradle.kts:15:3: Unresolved reference: coreVersion
e: /tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/build.gradle.kts:16:3: Unresolved reference: pipelineTestUnitVersion
e: /tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/build.gradle.kts:17:3: Unresolved reference: testHarnessVersion
e: /tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/build.gradle.kts:18:3: Unresolved reference: pluginDependencies
e: /tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/build.gradle.kts:19:5: Unresolved reference: workflowCpsGlobalLibraryPluginVersion
e: /tmp/Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516/build.gradle.kts:20:5: Unresolved reference: blueocean

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516'.
> Could not open cache directory ba2ub9bgjlkw0kyd3fa73oqeq (/tmp/.gradle-test-kit-circleci/caches/4.1/gradle-kotlin-dsl/ba2ub9bgjlkw0kyd3fa73oqeq).
   > Internal error: unable to compile script, see log for details

* Try:
Run with --debug option to get more log output.

* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main7624860855275780516'.
    at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:87)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:65)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.access$100(LifecycleProjectEvaluator.java:33)
    at org.gradle.configuration.project.LifecycleProjectEvaluator$ConfigureProject.run(LifecycleProjectEvaluator.java:103)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:49)
    at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:651)
    at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:133)
    at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:35)
    at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:60)
    at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:38)
    at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuild.run(DefaultGradleLauncher.java:246)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.initialization.DefaultGradleLauncher.configureBuild(DefaultGradleLauncher.java:165)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:124)
    at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:107)
    at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:78)
    at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:75)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:152)
    at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:100)
    at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:75)
    at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:53)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$1.run(RunAsBuildOperationBuildActionRunner.java:43)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:40)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:45)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:29)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:39)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:25)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:71)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45)
    at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:51)
    at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:32)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:64)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:29)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:58)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:33)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.cache.CacheOpenException: Could not open cache directory ba2ub9bgjlkw0kyd3fa73oqeq (/tmp/.gradle-test-kit-circleci/caches/4.1/gradle-kotlin-dsl/ba2ub9bgjlkw0kyd3fa73oqeq).
    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:59)
    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:30)
    at org.gradle.cache.internal.DefaultCacheFactory.doOpen(DefaultCacheFactory.java:89)
    at org.gradle.cache.internal.DefaultCacheFactory.open(DefaultCacheFactory.java:63)
    at org.gradle.cache.internal.DefaultCacheRepository$PersistentCacheBuilder.open(DefaultCacheRepository.java:123)
    at org.gradle.kotlin.dsl.cache.ScriptCache.cacheDirFor(ScriptCache.kt:51)
    at org.gradle.kotlin.dsl.cache.ScriptCache.cacheDirFor$default(ScriptCache.kt:43)
    at org.gradle.kotlin.dsl.provider.CachingKotlinCompiler.cacheDirFor(CachingKotlinCompiler.kt:169)
    at org.gradle.kotlin.dsl.provider.CachingKotlinCompiler.compileScript(CachingKotlinCompiler.kt:130)
    at org.gradle.kotlin.dsl.provider.CachingKotlinCompiler.compileBuildScript(CachingKotlinCompiler.kt:110)
    at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler.compileScriptFile(KotlinBuildScriptCompiler.kt:242)
    at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler.executeScriptBodyOn(KotlinBuildScriptCompiler.kt:114)
    at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler.prepareAndExecuteScriptBodyOn(KotlinBuildScriptCompiler.kt:108)
    at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler.access$prepareAndExecuteScriptBodyOn(KotlinBuildScriptCompiler.kt:51)
    at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler$compileTopLevelScript$1.invoke(KotlinBuildScriptCompiler.kt:91)
    at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler$compileTopLevelScript$1.invoke(KotlinBuildScriptCompiler.kt:51)
    at org.gradle.kotlin.dsl.provider.KotlinScriptPlugin.apply(KotlinScriptPlugin.kt:48)
    at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:61)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:58)
    at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:39)
    at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
    at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:63)
    ... 81 more
Caused by: java.lang.IllegalStateException: Internal error: unable to compile script, see log for details
    at org.gradle.kotlin.dsl.support.KotlinCompilerKt.compileKotlinScriptToDirectory(KotlinCompiler.kt:80)
    at org.gradle.kotlin.dsl.provider.CachingKotlinCompiler$compileScriptTo$$inlined$run$lambda$1.invoke(CachingKotlinCompiler.kt:154)
    at org.gradle.kotlin.dsl.provider.CachingKotlinCompiler$compileScriptTo$$inlined$run$lambda$1.invoke(CachingKotlinCompiler.kt:46)
    at org.gradle.kotlin.dsl.provider.CachingKotlinCompiler.withProgressLoggingFor(CachingKotlinCompiler.kt:213)
    at org.gradle.kotlin.dsl.provider.CachingKotlinCompiler.compileScriptTo(CachingKotlinCompiler.kt:152)
    at org.gradle.kotlin.dsl.provider.CachingKotlinCompiler.access$compileScriptTo(CachingKotlinCompiler.kt:46)
    at org.gradle.kotlin.dsl.provider.CachingKotlinCompiler$compileScript$cacheDir$1.invoke(CachingKotlinCompiler.kt:132)
    at org.gradle.kotlin.dsl.provider.CachingKotlinCompiler$compileScript$cacheDir$1.invoke(CachingKotlinCompiler.kt:46)
    at org.gradle.kotlin.dsl.cache.ScriptCacheKt$sam$Action$904ef041.execute(ScriptCache.kt)
    at org.gradle.cache.internal.DefaultPersistentDirectoryCache$Initializer.initialize(DefaultPersistentDirectoryCache.java:103)
    at org.gradle.cache.internal.FixedSharedModeCrossProcessCacheAccess$1.run(FixedSharedModeCrossProcessCacheAccess.java:73)
    at org.gradle.cache.internal.DefaultFileLockManager$DefaultFileLock.doWriteAction(DefaultFileLockManager.java:190)
    at org.gradle.cache.internal.DefaultFileLockManager$DefaultFileLock.writeFile(DefaultFileLockManager.java:180)
    at org.gradle.cache.internal.FixedSharedModeCrossProcessCacheAccess.open(FixedSharedModeCrossProcessCacheAccess.java:71)
    at org.gradle.cache.internal.DefaultCacheAccess.open(DefaultCacheAccess.java:133)
    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.open(DefaultPersistentDirectoryStore.java:57)
    ... 107 more


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

BUILD FAILED in 15s

    at org.gradle.testkit.runner.internal.DefaultGradleRunner$1.execute(DefaultGradleRunner.java:222)
    at org.gradle.testkit.runner.internal.DefaultGradleRunner$1.execute(DefaultGradleRunner.java:219)
    at org.gradle.testkit.runner.internal.DefaultGradleRunner.run(DefaultGradleRunner.java:282)
    at org.gradle.testkit.runner.internal.DefaultGradleRunner.build(DefaultGradleRunner.java:219)
    at testsupport.GradleTestKitKt.buildWithPluginClasspath(gradleTestKit.kt:13)
    at com.mkobit.jenkins.pipelines.IntegrationTestSourceIntegrationTest.Kotlin DSL extension configuration$jenkins_pipeline_shared_libraries_gradle_plugin_main(IntegrationTestSourceIntegrationTest.kt:116)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:167)
    at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:163)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:110)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:83)
    at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
    at java.util.Iterator.forEachRemaining(Iterator.java:116)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
    at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
    at java.util.Iterator.forEachRemaining(Iterator.java:116)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
    at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:51)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
    at org.junit.platform.console.tasks.ConsoleTestExecutor.executeTests(ConsoleTestExecutor.java:65)
    at org.junit.platform.console.tasks.ConsoleTestExecutor.lambda$execute$0(ConsoleTestExecutor.java:57)
    at org.junit.platform.console.tasks.CustomContextClassLoaderExecutor.invoke(CustomContextClassLoaderExecutor.java:33)
    at org.junit.platform.console.tasks.ConsoleTestExecutor.execute(ConsoleTestExecutor.java:57)
    at org.junit.platform.console.ConsoleLauncher.executeTests(ConsoleLauncher.java:84)
    at org.junit.platform.console.ConsoleLauncher.execute(ConsoleLauncher.java:74)
    at org.junit.platform.console.ConsoleLauncher.execute(ConsoleLauncher.java:47)
    at org.junit.platform.console.ConsoleLauncher.main(ConsoleLauncher.java:39)

Context

I was testing my plugin to make sure it was friendly in the Kotlin DSL.

Steps to Reproduce (for bugs)

UPDATE: https://github.com/gradle/kotlin-dsl/issues/492#issuecomment-371575354 for reduced example

Your Environment

UPDATE: https://github.com/gradle/kotlin-dsl/issues/492#issuecomment-371575354 for updated example

feature kotlin-dsl-runtime groovy-parity testing

All 12 comments

I think I have a much more minimal examples showing issues at https://github.com/mkobit/kotlin-dsl-issue-492/tree/using-kotlin-dsl-plugin.

Here is code first, with simple reproduce steps to clone/run below it.

  • (One example) of build.gradle.kts

    ``kotlin plugins { java-gradle-plugin // Case 1: kotlin-dsl`
    }

    tasks {
    "wrapper"(Wrapper::class) {
    gradleVersion = "4.3-rc-4"
    }
    }

    repositories {
    jcenter()
    }

    dependencies {
    testImplementation("junit:junit:4.12")
    }

    gradlePlugin {
    plugins.invoke {
    // Don't get the extensions for NamedDomainObjectContainer here because we only have a NamedDomainObjectContainer
    // See https://github.com/gradle/kotlin-dsl/issues/459
    "example" {
    id = "com.mkobit.example-plugin"
    implementationClass = "com.mkobit.ExamplePlugin"
    }
    }
    }
    ````

  • plugin and extension:

    package com.mkobit
    
    import org.gradle.api.Plugin
    import org.gradle.api.Project
    
    class ExamplePlugin : Plugin<Project> {
      override fun apply(project: Project) {
        project.extensions.create("exampleExtension", ExampleExtension::class.java, "hello")
      }
    }
    
    open class ExampleExtension(var myValue: String) {
    }
    
  • Test

    package com.mkobit
    
    import org.gradle.testkit.runner.GradleRunner
    import org.junit.Before
    import org.junit.Test
    import java.io.File
    
    class ExampleTestKitTest {
    
      private lateinit var gradleKts: File
      private lateinit var gradleRunner: GradleRunner
    
      @Before
      fun setUp() {
        val projectDir = createTempDir().apply {
          deleteOnExit()
        }
        gradleKts = projectDir.resolve("build.gradle.kts")
        gradleKts.writeText("""
          plugins {
            id("com.mkobit.example-plugin")
          }
        """.trimIndent())
        gradleRunner = GradleRunner.create()
            .withProjectDir(projectDir)
            .withPluginClasspath()
      }
    
      @Test
      fun `can println out extensions`() {
        gradleKts.appendText("""
          println(extensions)
        """.trimIndent())
    
        gradleRunner.build()
      }
    
      @Test
      fun `can access extension by name`() {
        gradleKts.appendText("""
          println(exampleExtension)
        """.trimIndent())
    
        gradleRunner.build()
      }
    
      @Test
      fun `can access extension property`() {
        gradleKts.appendText("""
          println(exampleExtension.myValue)
        """.trimIndent())
    
        gradleRunner.build()
      }
    
      @Test
      fun `can set extension property`() {
        gradleKts.appendText("""
          exampleExtension {
            myValue = "hello there!"
          }
          println(exampleExtension.myValue)
        """.trimIndent())
    
        gradleRunner.build()
      }
    }
    
  • git clone https://github.com/mkobit/kotlin-dsl-issue-492.git && cd kotlin-dsl-issue-492

  • git checkout using-kotlin-dsl-plugin && ./gradlew build

    • one test fails with e: /tmp/tmp5888418560765600275.tmp/build.gradle.kts:3:2: Unresolved reference: println
    • one test fails with:

      e: /tmp/tmp8440621454011785073.tmp/build.gradle.kts:3:2: Unresolved reference: println
      e: /tmp/tmp8440621454011785073.tmp/build.gradle.kts:3:27: Unresolved reference: myValue

    • one test fails with:

      Output:
      e: /tmp/tmp1687580607934068733.tmp/build.gradle.kts:3:2: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
      public fun Project.exampleExtension(configure: Any.() -> Unit): Unit defined in org.gradle.kotlin.dsl
      e: /tmp/tmp1687580607934068733.tmp/build.gradle.kts:4:3: Unresolved reference: myValue
      e: /tmp/tmp1687580607934068733.tmp/build.gradle.kts:6:26: Unresolved reference: myValue
      
  • git checkout using-embedded-kotlin && ./gradlew build

    • All these fail with error presumable because of some compileOnly type dependency with the embedded-kotlin dependency:

      java.lang.NoClassDefFoundError: kotlin/io/FilesKt
      at com.mkobit.ExampleTestKitTest.setUp(ExampleTestKitTest.kt:15)

  • git checkout using-kotlin-jvm-plugin && ./gradlew build

    • similar (same?) errors as the kotlin-dsl plugin

I'm wondering if this might have to do with how test kit uses the plugin classpath using .withPluginClasspath()? Or possibly how the tooling API invokes the build? Any pointers on where to go for this?

Does the configuration inside of this repository offer any hints?
Clearly this project is able to test itself.

I pushed an update to the master branch in https://github.com/mkobit/kotlin-dsl-issue-492 that has all 3 example merges into a single multi-project build and a report at build/testReports/index.html after running ./gradlew build.

Somebody else brought up what sounded like a similar issue in the #gradle channel, so I asked them to also post in here.

In response to @mkobit: https://kotlinlang.slack.com/archives/C19FD9681/p1520527369000289
Originally I had asked for help hehttps://kotlinlang.slack.com/archives/C0922A726/p1520441466000341

In essence I have the problem that extension class decorators seem to be found by TestKit, but the properties of the extension are not found. The plugin that I started developing has a failing test case that shows the problem here: https://github.com/FWiesner/magicdraw-gradle-plugin/blob/master/src/test/kotlin/florianwiesner/gradle/magicdraw/MagicDrawGradlePluginSpec.kt

I'm having a similar problem testing the Spotless project.
I've setup my test so that the Groovy and the Kotlin are exactly the same syntax.
The following Groovy test succeeds:

public class SimpleLicenseHeaderExtensionTest extends GradleIntegrationTest {
    private static final String HEADER = "// License Header";

    @Test
    public void testWithCommonInterfaceForConfiguringLicences() throws IOException {
        setFile("build.gradle").toLines(
            "plugins {",
            "    id(\"org.jetbrains.kotlin.jvm\") version \"1.2.31\"",
            "    id(\"com.diffplug.gradle.spotless\")",
            "}",
            "repositories { mavenCentral() }",
            "spotless {",
            "    kotlin {",
            "        licenseHeader(\"" + HEADER + "\")",
            "        ktlint()",
            "    }",
            "}");
        gradleRunner()
            .withGradleVersion("4.6")
            .withArguments("spotlessApply")
            .forwardOutput()
            .build();
    }
}

But when I change to Kotlin using the file name build.gradle.kts the following tests fails.

public class SimpleLicenseHeaderExtensionTest extends GradleIntegrationTest {
    private static final String HEADER = "// License Header";

    @Test
    public void testWithCommonInterfaceForConfiguringLicences() throws IOException {
        setFile("build.gradle.kts").toLines(
            "plugins {",
            "    id(\"org.jetbrains.kotlin.jvm\") version \"1.2.31\"",
            "    id(\"com.diffplug.gradle.spotless\")",
            "}",
            "repositories { mavenCentral() }",
            "spotless {",
            "    kotlin {",
            "        licenseHeader(\"" + HEADER + "\")",
            "        ktlint()",
            "    }",
            "}");
        gradleRunner()
            .withGradleVersion("4.6")
            .withArguments("spotlessApply")
            .forwardOutput()
            .build();
    }
}

With the following exceptions:

BUILD FAILED in 7s
com.diffplug.gradle.spotless.SimpleLicenseHeaderExtensionTest > testWithCommonInterfaceForConfiguringLicences FAILED
    org.gradle.testkit.runner.UnexpectedBuildFailure at SimpleLicenseHeaderExtensionTest.java:28

Unexpected build execution failure in /private/var/folders/_z/rsm6yq417ggcpzb6jf_c8hh80000gn/T/junit1640032401369206282 with arguments [spotlessApply]

Output:
e: /private/var/folders/_z/rsm6yq417ggcpzb6jf_c8hh80000gn/T/junit1640032401369206282/build.gradle.kts:8:9: Unresolved reference: licenseHeader
e: /private/var/folders/_z/rsm6yq417ggcpzb6jf_c8hh80000gn/T/junit1640032401369206282/build.gradle.kts:9:9: Unresolved reference: ktlint

FAILURE: Build failed with an exception.

* Where:
Build file '/private/var/folders/_z/rsm6yq417ggcpzb6jf_c8hh80000gn/T/junit1640032401369206282/build.gradle.kts' line: 8

* What went wrong:
Script compilation errors:

  Line 8:         licenseHeader("// License Header")
                  ^ Unresolved reference: licenseHeader

  Line 9:         ktlint()
                  ^ Unresolved reference: ktlint

2 errors

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

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

BUILD FAILED in 7s

org.gradle.testkit.runner.UnexpectedBuildFailure: Unexpected build execution failure in /private/var/folders/_z/rsm6yq417ggcpzb6jf_c8hh80000gn/T/junit1640032401369206282 with arguments [spotlessApply]

Output:
e: /private/var/folders/_z/rsm6yq417ggcpzb6jf_c8hh80000gn/T/junit1640032401369206282/build.gradle.kts:8:9: Unresolved reference: licenseHeader
e: /private/var/folders/_z/rsm6yq417ggcpzb6jf_c8hh80000gn/T/junit1640032401369206282/build.gradle.kts:9:9: Unresolved reference: ktlint

FAILURE: Build failed with an exception.

* Where:
Build file '/private/var/folders/_z/rsm6yq417ggcpzb6jf_c8hh80000gn/T/junit1640032401369206282/build.gradle.kts' line: 8

* What went wrong:
Script compilation errors:

  Line 8:         licenseHeader("// License Header")
                  ^ Unresolved reference: licenseHeader

  Line 9:         ktlint()
                  ^ Unresolved reference: ktlint

2 errors

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

@mkobit Does this seem to be the same issue or does it merit it's own issue?

@JLLeitschuh that looks to me like the same issue.

EDIT: it may actually be different (could be function scopes and container handling in Groovy), I'lll take a peak at the source to see

Ok I just looked at it again and that does look similar. I went through my demo project at https://github.com/mkobit/kotlin-dsl-issue-492 for some more examples of the problem compared to Groovy and it still shows up in 4.7

Hey @mkobit, could you try the latest snapshot distro on your project and report back whether the implemented fix works for you?

./gradlew wrapper --gradle-distribution-url https://repo.gradle.org/gradle/kotlin-dsl-snapshots-local/gradle-kotlin-dsl-4.8-20180505151226+0000-all.zip

@bamboo I tried it out on https://github.com/mkobit/kotlin-dsl-issue-492 and it looks like it fixed it. I'm still going to try it on a couple of other projects.

EDIT: Just tried on another real project, and it looks good!

Great. Thanks, @mkobit!

Hi together,
I encounter same issue. I use gradle version 6.4.1. Not quite sure if it is a regression or if something has changed in how to use the GradleRunner

Was this page helpful?
0 / 5 - 0 ratings