gogradle icon indicating copy to clipboard operation
gogradle copied to clipboard

Dependency management does not work in Kotlin build files

Open baron1405 opened this issue 7 years ago • 13 comments

The following dependency in my build.gradle.kts results in a org.gradle.api.IllegalDependencyNotation:

dependencies {
    golang {
        build("github.com/spf13/cobra")
    }
}

The resulting stack trace is:

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'apron-cli'.
> Supplied String module notation 'github.com/spf13/cobra' is invalid. Example notations: 'org.gradle:gradle-core:2.2', 'org.mockito:mockito-core:1.9.5:javadoc'.

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

* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring root project 'apron-cli'.
        at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:94)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.doConfigure(LifecycleProjectEvaluator.java:66)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.access$100(LifecycleProjectEvaluator.java:34)
        at org.gradle.configuration.project.LifecycleProjectEvaluator$ConfigureProject.run(LifecycleProjectEvaluator.java:110)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:50)
        at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:667)
        at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:136)
        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:261)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.initialization.DefaultGradleLauncher.configureBuild(DefaultGradleLauncher.java:173)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:132)
        at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:115)
        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.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:38)
        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.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        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$3.run(RunAsBuildOperationBuildActionRunner.java:45)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:42)
        at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
        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:80)
        at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:53)
        at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:61)
        at org.gradle.tooling.internal.provider.ServicesSetupBuildActionExecuter.execute(ServicesSetupBuildActionExecuter.java:34)
        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:59)
        at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:44)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:46)
        at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:30)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:52)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:379)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:352)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:37)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:23)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:345)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:275)
        at org.gradle.launcher.Main.doAction(Main.java:36)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:60)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:37)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:31)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:108)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
Caused by: org.gradle.api.IllegalDependencyNotation: Supplied String module notation 'github.com/spf13/cobra' is invalid. Example notations: 'org.gradle:gradle-core:2.2', 'org.mockito:mockito-core:1.9.5:javadoc'.
        at org.gradle.api.internal.artifacts.dsl.ParsedModuleStringNotation.assignValuesFromModuleNotation(ParsedModuleStringNotation.java:47)
        at org.gradle.api.internal.artifacts.dsl.ParsedModuleStringNotation.<init>(ParsedModuleStringNotation.java:28)
        at org.gradle.api.internal.notations.DependencyStringNotationConverter.splitModuleFromExtension(DependencyStringNotationConverter.java:62)
        at org.gradle.api.internal.notations.DependencyStringNotationConverter.createDependencyFromString(DependencyStringNotationConverter.java:49)
        at org.gradle.api.internal.notations.DependencyStringNotationConverter.convert(DependencyStringNotationConverter.java:44)
        at org.gradle.api.internal.notations.DependencyStringNotationConverter.convert(DependencyStringNotationConverter.java:29)
        at org.gradle.internal.typeconversion.CharSequenceNotationConverter.convert(CharSequenceNotationConverter.java:31)
        at org.gradle.internal.typeconversion.CompositeNotationConverter.convert(CompositeNotationConverter.java:33)
        at org.gradle.internal.typeconversion.NotationConverterToNotationParserAdapter.parseNotation(NotationConverterToNotationParserAdapter.java:30)
        at org.gradle.internal.typeconversion.ErrorHandlingNotationParser.parseNotation(ErrorHandlingNotationParser.java:47)
        at org.gradle.api.internal.artifacts.DefaultDependencyFactory.createDependency(DefaultDependencyFactory.java:49)
        at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.create(DefaultDependencyHandler.java:98)
        at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.doAdd(DefaultDependencyHandler.java:112)
        at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.add(DefaultDependencyHandler.java:88)
        at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.add(DefaultDependencyHandler.java:83)
        at org.gradle.kotlin.dsl.DependencyHandlerScope.add(DependencyHandlerScope.kt)
        at org.gradle.kotlin.dsl.AccessorsKt.build(accessors.kt:386)
        at Build_gradle$3$1.invoke(build.gradle.kts:28)
        at Build_gradle$3$1.invoke(build.gradle.kts:2)
        at org.gradle.kotlin.dsl.AccessorsKt$sam$Action$1e19bcdd.execute(accessors.kt)
        at org.gradle.api.internal.plugins.ExtensionsStorage$ExtensionHolder.configure(ExtensionsStorage.java:183)
        at org.gradle.api.internal.plugins.ExtensionsStorage.configureExtension(ExtensionsStorage.java:67)
        at org.gradle.api.internal.plugins.DefaultConvention.configure(DefaultConvention.java:222)
        at org.gradle.kotlin.dsl.AccessorsKt.golang(accessors.kt:369)
        at Build_gradle$3.invoke(build.gradle.kts:27)
        at Build_gradle$3.invoke(build.gradle.kts:2)
        at org.gradle.kotlin.dsl.ProjectExtensionsKt.dependencies(ProjectExtensions.kt:184)
        at Build_gradle.<init>(build.gradle.kts:26)
        at org.gradle.kotlin.dsl.provider.KotlinScriptTarget.eval(KotlinScriptTarget.kt:162)
        at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler.executeScriptBody(KotlinBuildScriptCompiler.kt:152)
        at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler.access$executeScriptBody(KotlinBuildScriptCompiler.kt:74)
        at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler$compile$1.invoke(KotlinBuildScriptCompiler.kt:120)
        at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler$compile$1.invoke(KotlinBuildScriptCompiler.kt:74)
        at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler$asKotlinScript$1.invoke(KotlinBuildScriptCompiler.kt:134)
        at org.gradle.kotlin.dsl.provider.KotlinBuildScriptCompiler$asKotlinScript$1.invoke(KotlinBuildScriptCompiler.kt:74)
        at org.gradle.kotlin.dsl.provider.KotlinScriptPluginFactory$createScriptAction$1.invoke(KotlinScriptPluginFactory.kt:65)
        at org.gradle.kotlin.dsl.provider.KotlinScriptPluginFactory$createScriptAction$1.invoke(KotlinScriptPluginFactory.kt:33)
        at org.gradle.kotlin.dsl.provider.KotlinScriptPlugin.apply(KotlinScriptPlugin.kt:36)
        at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:61)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:97)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:58)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:41)
        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:64)
        ... 73 more

Gradle 4.7 GoGradle 0.9 CentOS 7

baron1405 avatar May 11 '18 06:05 baron1405

Might be a kotlin DSL issue. Could you please share your build.gradle.kts?

blindpirate avatar May 11 '18 06:05 blindpirate

Here is my build.gradle.kts. Note that it uses a number of custom plugins that I have created.

import com.cthing.gradle.plugins.core.ProjectInfoExtension
import com.github.blindpirate.gogradle.task.go.GoBuild

plugins {
    id("com.github.blindpirate.gogradle").version("0.9")
}

buildscript {
    dependencies {
        classpath("com.cthing:gradle-core-plugins:0.1.0-+")
        classpath("com.cthing:gradle-project-site-plugin:0.1.0-+")
    }
}

apply {
    plugin("com.cthing.project")
    plugin("com.cthing.project-site")
}

configure<ProjectInfoExtension> {
    description = "Recipe service command-line client."
    projectUrl = "https://bitbucket.org/cthing/apron-cli/"
    reportsUrl = "http://dist.lan/nexus/content/sites/apron-cli-site/"
}

dependencies {
    golang {
        build("github.com/spf13/cobra")
    }
}

golang {
    packagePath = "cthing.com/apron"
}

tasks {
    "goBuild" {
        val buildTask = this as GoBuild
        buildTask.outputLocation = "build/apron-\${GOOS}"
    }

    "build" { dependsOn("goBuild") }
    "clean" { dependsOn("goClean") }
    "check" { dependsOn("goCheck") }
    create("test").dependsOn("goTest")
    create("dependencies").dependsOn("goDependencies")
}

baron1405 avatar May 11 '18 06:05 baron1405

I didn't see

dependencies {
    golang {
        build("github.com/spf13/cobra")
    }
}

in you script, do you mean adding it to this script will cause error?

blindpirate avatar May 11 '18 06:05 blindpirate

Sorry, I had removed it. Updated now with the dependencies block.

baron1405 avatar May 11 '18 07:05 baron1405

Thanks, I've confirmed this issue. I think this would be a kotlin dsl related issue and I need to consult some kotlin-dsl-experts.

blindpirate avatar May 11 '18 07:05 blindpirate

@bamboo or @eskatos should be able to provide some insights.

baron1405 avatar May 11 '18 07:05 baron1405

Thanks, we work together, I'll ask them for help :-)

blindpirate avatar May 11 '18 07:05 blindpirate

@baron1405 I'm also having issues related kotlin, could you please post the full kts build file?

renannprado avatar May 23 '18 15:05 renannprado

I still face this issue with this simple Gradle file:

plugins {
    id("com.github.blindpirate.gogradle") version "0.11.4"
}

golang {
    packagePath = "gitlab.com/lpireyn/paco"
    goVersion = "1.12.9"
}

dependencies {
    golang {
        // go-junit-report doesn't release versions, so use master
        test("github.com/jstemmer/go-junit-report@master")
    }
}

Any progress?

lpireyn avatar Aug 23 '19 14:08 lpireyn

@lpireyn just stop using this plugin and move to makefiles or https://magefile.org/

it's a lot more suitable for golang...

renannprado avatar Sep 03 '19 16:09 renannprado

If this project is abandoned, the maintainer(s) should say it in the README, and probably archive it.

lpireyn avatar Sep 03 '19 17:09 lpireyn

I managed to work around this issue by doing:

dependencies {
    golang {
        methodMissing("build", arrayOf("github.com/golang/protobuf/protoc-gen-go"))
    }
}

jansendup avatar Apr 10 '20 15:04 jansendup

Just adding this to the build file makes it easier:

fun GolangDependencyHandler.build(dependency: String) {
    methodMissing("build", arrayOf(dependency))
}

It makes this work then:

dependencies {
    golang {
        build("path.to/dep/repo")
    }
}

cromefire avatar May 28 '20 09:05 cromefire