如何在Gradle中迭代项目的依赖项

阿米尔·帕萨扎德(Amir Pashazadeh)

我已经定义了一个简单的任务为

 task printCompileTestLib {
      configurations.testCompile.each { println it }
 }

 test.dependsOn(printCompileTestLib)

但是当我执行任务时,会发生以下错误:

FAILURE: Build failed with an exception.

* Where:
Build file 'D:\projects\fwk\trunk-gradle\ext\build.gradle' line: 2

* What went wrong:
A problem occurred evaluating project ':ext'.
> You can't change a configuration which is not in unresolved state!

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

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating project ':ext'.
    at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
    at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:132)
    at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:38)
    at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:25)
    at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:468)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:76)
    at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:31)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:142)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
    at org.gradle.api.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:46)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.Main.main(Main.java:37)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: org.gradle.api.InvalidUserDataException: You can't change a configuration which is not in unresolved state!
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.throwExceptionIfNotInUnresolvedState(DefaultConfiguration.java:425)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$500(DefaultConfiguration.java:45)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$VetoContainerChangeAction.run(DefaultConfiguration.java:525)
    at org.gradle.api.internal.DefaultDomainObjectCollection.assertMutable(DefaultDomainObjectCollection.java:258)
    at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:158)
    at org.gradle.api.internal.DelegatingDomainObjectSet.add(DelegatingDomainObjectSet.java:80)
    at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.doAdd(DefaultDependencyHandler.groovy:66)
    at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.this$2$doAdd(DefaultDependencyHandler.groovy)
    at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.methodMissing(DefaultDependencyHandler.groovy:102)
    at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.invokeMethod(DefaultDependencyHandler.groovy)
    at build_1baeie9kemtfk46808kipbh9q9$_run_closure1.doCall(D:\projects\fwk\trunk-gradle\ext\build.gradle:2)
    at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:58)
    at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:130)
    at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:91)
    at org.gradle.api.internal.project.AbstractProject.dependencies(AbstractProject.java:883)
    at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:246)
    at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:134)
    at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:147)
    at org.gradle.groovy.scripts.BasicScript.methodMissing(BasicScript.java:79)
    at build_1baeie9kemtfk46808kipbh9q9.run(D:\projects\fwk\trunk-gradle\ext\build.gradle:1)
    at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:52)
    ... 31 more

问题是如何迭代项目的依赖关系?有什么方法可以提取任务中每个依赖项的模块版本

彼得·尼德维瑟

您需要在任务执行时而不是任务配置遍历依赖关系

task printCompileTestLib {
    // doLast adds a so-called task action, which will 
    // only get run if and when the task gets executed
    doLast { 
        configurations.testCompile.each { println it }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Gradle中以编程方式添加传递依赖项?

如何在Maven项目的部署中包含依赖项的测试jar?

如何在Maven中处理子项目依赖项

如何在Gradle中从父项目获取依赖项版本

如何在父项目的Gradle kotlin dsl中定义常见依赖项?

将蜡染添加为Gradle项目的依赖项

如何获取具有gradle项目的所有运行时依赖项的文件?

如何在Gradle中添加“系统”依赖项?

如何在Gradle中为依赖项版本定义变量

如何在Gradle的JAR中包含单个依赖项?

Unity项目作为Gradle中的依赖项

如何在TeamCity中获取项目依赖项的检出目录?

如何在Gradle中更新依赖项

如何在Gitlab CI中缓存Gradle依赖项

如何在gradle.build中添加模块依赖项

在yarn工作区中,如何为子项目的依赖项强制解决方案?

如何确定我的Android项目的gradle构建文件中需要哪些依赖项

获取gradle自动下载android项目的依赖项

Gradle:如何在多项目脚本中对依赖项进行分组?

如何在gradle中的一条指令中将多个项目依赖项添加到配置中

Eclipse:如何使Gradle仅刷新所选项目的依赖项?

如何在gradle中获得项目的实现?

如何在Java类中获取Maven项目的依赖项列表

如何在Gradle项目中插入新的依赖项?

haskell项目的依赖项

如何在 gradle build 中编写依赖项

从 Gradle 中的依赖项中排除项目

如何在 Rust 中使用来自其他项目的依赖项?

列出所有子项目的 gradle 依赖项