jk1 / Gradle-License-Report

A plugin for generating reports about the licenses of third party software using Gradle
Other
328 stars 98 forks source link

[Regression in 0.7] Unable to resolve configuration :runtime #60

Closed znerd closed 6 years ago

znerd commented 6 years ago

I tried to execute plugin version 0.7 on one of our internal projects, but when I executed

rm -rf build/reports && ./gradlew generateLicenseReport --info --stacktrace

…it failed with this error:

$ rm -rf build/reports && ./gradlew generateLicenseReport --info --stacktrace
Starting Build
Settings evaluated using settings file '/Users/***/development/****/settings.gradle'.
Projects loaded. Root project using build file '/Users/***/development/****/build.gradle'.
Included projects: [root project '****']
Evaluating root project '****' using build file '/Users/***/development/****/build.gradle'.
[Asciidoctor] asciidoctorj: 1.5.3.2
[Asciidoctor] asciidoctorj-groovy-dsl: 1.0.0.preview2
Executing task ':updateVersion' (up-to-date check took 0.0 secs) due to:
  Task has not declared any outputs.
All projects evaluated.
Selected primary task 'generateLicenseReport' from project :
Tasks to be executed: [task ':generateLicenseReport']
:generateLicenseReport (Thread[main,5,main]) started.
:generateLicenseReport
Executing task ':generateLicenseReport' (up-to-date check took 0.018 secs) due to:
  Output file /Users/***/development/****/build/reports/dependency-license has changed.
  Output file /Users/***/development/****/build/reports/dependency-license/jackson-datatype-jdk8-2.8.2.jar has been removed.
  Output file /Users/***/development/****/build/reports/dependency-license/logstash-logback-encoder-4.4.jar has been removed.
Processing dependencies for project ****
:generateLicenseReport FAILED
:generateLicenseReport (Thread[main,5,main]) completed. Took 0.062 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':generateLicenseReport'.
> Unable to resolve configurations: [configuration ':runtime']

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

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':generateLicenseReport'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:68)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30)
    at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:151)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:81)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:46)
    at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
    at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:241)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:214)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:207)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
    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:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:129)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
Caused by: com.github.jk1.license.reader.UnresolvableConfigurationException: Unable to resolve configurations: [configuration ':runtime']
    at com.github.jk1.license.reader.ProjectReader.findConfigurationsToScan(ProjectReader.groovy:33)
    at com.github.jk1.license.reader.ProjectReader.read(ProjectReader.groovy:20)
    at com.github.jk1.license.reader.ProjectReader$read.call(Unknown Source)
    at com.github.jk1.license.ReportTask.generateReport(ReportTask.groovy:31)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:228)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 60 more

BUILD FAILED

Total time: 4.552 secs
Stopped 0 compiler daemon(s).

Note that I've used asterisk * characters to mask out some internal names.

I've tested with both 0.5.1 and 0.6.1 and they both work fine. So this appears to be a regression since 0.7, potentially caused by issue #55 / PR #58 .

guenhter commented 6 years ago

Hm, that's unfortunate. Can you post your licenseReport configuration of your gradle-file?

I tested the latest version, and runtime works for me.

Only problem can be, that runtime might not be available on your project. Can you execute

./gradlew dependencies

to see if the configuration runtime is available? Actually, the 0.7 release made a check a little more restrictive, to avoid specifying configurations, which are not available. This is maybe the case here.

znerd commented 6 years ago

There's no licenseReport section in my Gradle file.

Here's the output from gradle dependencies (with some identifiers masked): dependencies.txt

Notice that runtime does show up:

runtime - Runtime dependencies for source set 'main'.
+--- com.*****.apex:*****client:1.3.0
|    \--- com.*****.apex:web:3.4.0 -> 3.19.0
|         +--- commons-codec:commons-codec:1.10
|         +--- com.*****.apex:auth:3.0.0
guenhter commented 6 years ago

Thanks for the report. It seems that the PR broke support for older versions of Gradle. Versions from 3.3 seems to work fine. Version below, have problems. You use version 2.13. Upgrading to version 3.3 or later will solve your problem.

@jk1 Do you tend to be backward compatible with those older versions (Release Date of 3.3. was Jan 03, 2017), or do you prefer adding a minimum required version to the documentation?

I personally like to motivate people to be up to date with their build tool, in order to use all the plugins and feature, so I tend to break compatibility with versions lower than 3.3.

@znerd Is upgrading to a new version an option?

jk1 commented 6 years ago

@guenhter

I personally like to motivate people to be up to date with their build tool, in order to use all the plugins and feature, so I tend to break compatibility with versions lower than 3.3.

So am I. We'd better check Gradle version in Plugin#apply(...) though and print out an explanatory message to avoid confusion. Something like

    private void assertCompatibleGradleVersion() {
        def current = GradleVersion.current().version.split("\\.")
        def major = current[0].toInteger()
        if (major < 4) {
            throw new GradleException("License Report Plugin requires Gradle 4.0. ${GradleVersion.current()} detected.")
        }
    }

will do.

znerd commented 6 years ago

@guenhter Thanks for the swift analysis.

I fully understand it makes sense to stay up-to-date with regards to the current build tool version.

znerd commented 6 years ago

👍 Upgrading to Gradle 4.6 resolved the issue. Thanks! Marking issue as Closed.

( Note: I did run into another issue with the XML renderer, but will file a separate ticket for that. )

guenhter commented 6 years ago

Even though upgrading solved the Problem, #62 added a version check which gives a proper message when using this plugin with an outdated gradle-version.