gradle-nebula-integration's People
gradle-nebula-integration's Issues
Dependencies added conditionally are incompatible with core locking
We've been working around IntelliJ's wonky handling of providedCompile
/providedRuntime
by conditionally moving it to provided only when tasks are requested (as is the case when fetching models over the tooling API).
However, that causes core locking to fail when importing into the IDE. We consider that an IntelliJ bug, however we don't have alternative for these provided dependencies and will hamper core locking adoption:
Tracking: Missing rules in selection reasons in dependencyInsight
Tracking issue gradle/gradle#6826
Related to seeing all rules affecting inspected dependency under selections reason.
Older Gradle distribution caches are not cleaned up
While looking at cache cleanup, I see that shared dependency caches such as directories in ~/.gradle/caches/modules-2
and files in ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin
that have not been used recently are cleaned up, but I still see older caches and distributions of Gradle that I have not used in a few months.
I am verifying the age of these version-specific caches and distributions by using tree -D -L <depth> <folder-name>
as run in the script in this repo.
For example, in ~/.gradle.caches
, I see the following caches not cleaned up:
├── [Apr 11 13:01] 2.13
├── [Apr 24 9:45] 4.5.1
├── [May 22 10:58] 4.6
├── [May 24 12:58] 2.10
├── [Jun 12 18:39] 4.8
├── [Jun 26 12:34] 3.3
├── [Jun 26 14:09] 4.8.1
and in ~/.gradle/wrapper/dists
, I see the following distributions:
├── [Feb 22 2018] gradle-4.5.1-bin
├── [Feb 27 12:31] gradle-2.13-bin
├── [Mar 2 8:54] gradle-4.6-bin
├── [Jun 13 12:46] gradle-4.8-bin
├── [Jun 26 12:34] gradle-3.3-all
├── [Jun 26 12:36] gradle-4.8.1-bin
├── [Jul 20 10:27] gradle-2.10-bin
in addition to versions that I have used more recently.
Am I evaluating the age/ "last use" of these version caches the correct way, and these should have been cleaned up?
Excludes defined for individual dependencies are being overridden by dependecyManagement section
Reported in gradle project:gradle/gradle#6128
Possibly related issue: gradle/gradle#5466
Example project: https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/excludes-with-bom
Alignment: dependencies aligned to a non-forced version when there is a force in place
Scenario
Given a build file containing a dependency with an alignment and a force:
dependencies {
compile 'org.slf4j:slf4j-api:1.6.0'
compile 'org.slf4j:slf4j-simple:1.7.20'
}
configurations.all {
resolutionStrategy {
force 'org.slf4j:slf4j-simple:1.5.5'
}
}
project.dependencies.components.all(AlignJackson.class)
class AlignJackson implements ComponentMetadataRule {
void execute(ComponentMetadataContext ctx) {
ctx.details.with { it ->
if (it.getId().getGroup().startsWith("org.slf4j")) {
it.belongsTo("org.slf4j:slf4j-platform:${it.getId().getVersion()}")
}
}
}
}
when I run ./gradlew dependencyInsight --dependency slf4j
with Gradle 4.10-20180801000007+0000
then I should see the final version as 1.5.5
for all dependencies (which I do not)
because the single force to 1.5.5
should have pushed the dependency platform down to this version.
Note: See full output below
Example Project
Please see the whole example project at dependency-insight/docs/alignment/alignment-static-transitive-force/input
Current output for reference
Tasks: dependencyInsight --dependency slf4j-api
> Task :dependencyInsight
org.slf4j:slf4j-api:1.6.0
variant "compile" [
org.gradle.status = release (not requested)
org.gradle.usage = java-api
]
Selection reasons:
- Was requested
- By constraint : belongs to platform org.slf4j:slf4j-platform:1.6.0
- By conflict resolution : between versions 1.6.0 and 1.5.5
org.slf4j:slf4j-api:1.6.0
+--- compileClasspath
\--- org.slf4j:slf4j-simple:1.6.0
+--- compileClasspath
\--- compileClasspath
Tasks: dependencyInsight --dependency slf4j-simple
> Task :dependencyInsight
org.slf4j:slf4j-simple:1.6.0
variant "compile" [
org.gradle.status = release (not requested)
org.gradle.usage = java-api
]
Selection reasons:
- Was requested
- Forced
- By constraint : belongs to platform org.slf4j:slf4j-platform:1.6.0
- By conflict resolution : between versions 1.5.5 and 1.6.0
org.slf4j:slf4j-simple:1.7.20 -> 1.6.0
\--- compileClasspath
Dependency insight with preferred dependency
Tracking gradle/gradle#7334
Related to dependency insight not showing full information on how/ where a preferred dependency contributes to the selection reason.
Intellij - Can't import project with Gradle 5.1 Nightly
Hi folks,
I tried to import a project in IntelliJ using latest nightly gradle-5.1-20181130102259+0000-bin.zip
I get a Connection refused:
Download of the distribution happens:
If I use https\://services.gradle.org/distributions-snapshots/gradle-5.1-20181127213941+0000-bin.zip
it works.
Wonder if a regression happened on Gradle side.
Sample project in https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/import-gradle5-1-nightly-issue
Class-based ComponentMetatdataRule Ordering
Switching over to class-based component metadata rules introduces this exception if everything isn't class-based:
Caused by: java.lang.IllegalArgumentException: Non class based component metadata rules must all be added before class based ones.
When a distribution and plugins are contributing component metadata rules, this prevents consumers and other plugins from using legacy component metadata rules.
Dependency download retries with repository bad credentials
Hi folks!
Some context:
We were applying the following init.gradle
to one of our test projects that use nebula:
allprojects {
buildscript {
repositories {
maven {
name 'internal-plugin-portal'
url 'https://repo.test.netflix.net/artifactory/gradle-plugins' }
}
}
repositories {
maven {
name 'internal-plugin-portal'
url 'https://repo.test.netflix.net/artifactory/gradle-plugins' }
}
}
While building our project using this script in Gradle 4.10.2 there were no issues, but 5.1 nightly was running out of memory and after increasing the heap size it took 13 min to build vs the usual 1 min.
We started looking into why this happened. One thing that we found is that when we applied this gradle script in gradle 4.10.2 we saw multiple errors like this one
Caused by: org.gradle.api.resources.ResourceException: Could not get resource 'https://repo.test.netflix.net/artifactory/gradle-plugins/org/apache/apache/5/apache-5.pom'.
Caused by: java.lang.NullPointerException
at org.gradle.internal.resource.transport.http.ntlm.NTLMCredentials.<init>(NTLMCredentials.java:35)
Thankfully, the error message got enriched in gradle/gradle#6369 gradle/gradle#6379.
With nightly release we found the following:
Caused by: org.gradle.api.resources.ResourceException: Could not get resource 'https://repo.test.netflix.net/artifactory/gradle-plugins/org/apache/apache/5/apache-5.pom'.
Caused by: java.lang.NullPointerException: Username must not be null!
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:906)
at org.gradle.internal.resource.transport.http.ntlm.NTLMCredentials.<init>(NTLMCredentials.java:36)
At this point it was clear to us that the issue was credentials related and then we noticed the retries:
02:20:02.788 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ErrorHandlingModuleComponentRepository$ErrorHandlingModuleComponentRepositoryAccess] Error while accessing remote repository 622fcde3bac6a47b8e324d8bbe011e59. Waiting 1000ms before next retry. 2 retries left
02:20:03.791 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ErrorHandlingModuleComponentRepository$ErrorHandlingModuleComponentRepositoryAccess] Error while accessing remote repository 622fcde3bac6a47b8e324d8bbe011e59. Waiting 2000ms before next retry. 1 retries left
After the 13 min we found around 1.1k retries in our project due to the bad credentials.
Our fix was to not use a repository that requires credentials without them 😅. We didn't notice this issue (and it's been months already probably) before because we didn't have retries so retries are great!
I believe the feedback goes more into if it is possible to avoid retries when there aren't credentials or valid credentials for a repository. Without debugging there are two potential scenarios for users:
- If the dependency graph is small, they might not run out of memory and just see a "slow" build.
- With big project, they might run out of memory like us
Dependency insight: "Force" selection reason does not show up when there is a substitution in place
Scenario
Given a build file containing a dependency with a substitution and a force:
dependencies {
compile 'org.mockito:mockito-all:1.8.0'
}
configurations.all {
resolutionStrategy {
force 'org.mockito:mockito-all:1.10.17'
}
}
def substitutionMessage = '✭ substitution org.mockito:mockito-all -> org.mockito:mockito-core:1.10.19'
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute module('org.mockito:mockito-all') because (substitutionMessage) with module('org.mockito:mockito-core:1.10.19')
}
}
when I run ./gradlew dependencyInsight --dependency mockito
with Gradle 4.10-20180801000007+0000
then I should see the final version as 1.10.19
(which I do)
and I should see a selection reason as Forced
(which I do not)
Note: See full output below
Example Project
Please see the whole example project at dependency-insight/docs/basic/substitute-static-force/input
Current output for reference
> Task :dependencyInsight
org.mockito:mockito-core:1.10.19
variant "compile" [
org.gradle.status = release (not requested)
org.gradle.usage = java-api
]
Selection reasons:
- Was requested
- Selected by rule : ✭ substitution org.mockito:mockito-all -> org.mockito:mockito-core:1.10.19
org.mockito:mockito-all:1.8.0 -> org.mockito:mockito-core:1.10.19
\--- compileClasspath
Setting attribute value of `candidate` prevents from project configuration
When we detect a version that it's a Release Candidate, we set the status
to candidate
.
This is broken starting with 5.0-20180923235913+0000
release.
Running the MyPluginSpec
test from https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/broken-release-candidate-attribute will generate the following exception:
org.gradle.api.GradleException: Build aborted because of an internal error.
at nebula.test.functional.internal.DefaultExecutionResult.rethrowFailure(DefaultExecutionResult.groovy:97)
at nebula.test.IntegrationSpec.runTasksSuccessfully(IntegrationSpec.groovy:149)
at gradle5.rc.issue.MyPluginSpec.specific transitive candidates or snapshots resolved(MyPluginSpec.groovy:76)
Caused by: org.gradle.internal.exceptions.LocationAwareException: A problem occurred configuring root project 'specific-transitive-candidates-or-snapshots-resolved'.
at org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:74)
at org.gradle.initialization.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:49)
at org.gradle.initialization.StackTraceSanitizingExceptionAnalyser.transform(StackTraceSanitizingExceptionAnalyser.java:30)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:164)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:133)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:77)
at org.gradle.internal.invocation.GradleBuildController$1.call(GradleBuildController.java:74)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:154)
at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:38)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:98)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:74)
at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:55)
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$3.run(RunAsBuildOperationBuildActionRunner.java:49)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44)
at org.gradle.tooling.internal.provider.SubscribableBuildActionRunner.run(SubscribableBuildActionRunner.java:51)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:44)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:79)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:44)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:30)
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:62)
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:59)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
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.tooling.internal.provider.DaemonBuildActionExecuter.execute(DaemonBuildActionExecuter.java:60)
at org.gradle.tooling.internal.provider.DaemonBuildActionExecuter.execute(DaemonBuildActionExecuter.java:41)
at org.gradle.tooling.internal.provider.LoggingBridgingBuildActionExecuter.execute(LoggingBridgingBuildActionExecuter.java:58)
at org.gradle.tooling.internal.provider.LoggingBridgingBuildActionExecuter.execute(LoggingBridgingBuildActionExecuter.java:37)
at org.gradle.tooling.internal.provider.ProviderConnection.run(ProviderConnection.java:181)
at org.gradle.tooling.internal.provider.ProviderConnection.run(ProviderConnection.java:124)
at org.gradle.tooling.internal.provider.DefaultConnection.getModel(DefaultConnection.java:208)
at org.gradle.tooling.internal.consumer.connection.CancellableModelBuilderBackedModelProducer.produceModel(CancellableModelBuilderBackedModelProducer.java:53)
at org.gradle.tooling.internal.consumer.connection.PluginClasspathInjectionSupportedCheckModelProducer.produceModel(PluginClasspathInjectionSupportedCheckModelProducer.java:41)
at org.gradle.tooling.internal.consumer.connection.AbstractConsumerConnection.run(AbstractConsumerConnection.java:59)
at org.gradle.tooling.internal.consumer.connection.ParameterValidatingConsumerConnection.run(ParameterValidatingConsumerConnection.java:47)
at org.gradle.tooling.internal.consumer.DefaultBuildLauncher$1.run(DefaultBuildLauncher.java:89)
at org.gradle.tooling.internal.consumer.DefaultBuildLauncher$1.run(DefaultBuildLauncher.java:83)
at org.gradle.tooling.internal.consumer.connection.LazyConsumerActionExecutor.run(LazyConsumerActionExecutor.java:84)
at org.gradle.tooling.internal.consumer.connection.CancellableConsumerActionExecutor.run(CancellableConsumerActionExecutor.java:45)
at org.gradle.tooling.internal.consumer.connection.ProgressLoggingConsumerActionExecutor.run(ProgressLoggingConsumerActionExecutor.java:58)
at org.gradle.tooling.internal.consumer.connection.RethrowingErrorsConsumerActionExecutor.run(RethrowingErrorsConsumerActionExecutor.java:38)
at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:55)
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.api.ProjectConfigurationException: A problem occurred configuring root project 'specific-transitive-candidates-or-snapshots-resolved'.
at org.gradle.configuration.project.LifecycleProjectEvaluator.wrapException(LifecycleProjectEvaluator.java:80)
at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:73)
at org.gradle.configuration.project.LifecycleProjectEvaluator.access$400(LifecycleProjectEvaluator.java:54)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:107)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:68)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:687)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:140)
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:41)
at org.gradle.initialization.DefaultGradleLauncher$ConfigureBuild.run(DefaultGradleLauncher.java:286)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.initialization.DefaultGradleLauncher.configureBuild(DefaultGradleLauncher.java:194)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:150)
... 61 more
Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all artifacts for configuration ':classpath'.
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.rethrowFailure(DefaultConfiguration.java:1076)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$1700(DefaultConfiguration.java:123)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationArtifactCollection.ensureResolved(DefaultConfiguration.java:1511)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationArtifactCollection.getArtifacts(DefaultConfiguration.java:1483)
at org.gradle.composite.internal.CompositeBuildClassPathInitializer.execute(CompositeBuildClassPathInitializer.java:45)
at org.gradle.composite.internal.CompositeBuildClassPathInitializer.execute(CompositeBuildClassPathInitializer.java:32)
at org.gradle.api.internal.initialization.DefaultScriptClassPathResolver.resolveClassPath(DefaultScriptClassPathResolver.java:37)
at org.gradle.api.internal.initialization.DefaultScriptHandler.getScriptClassPath(DefaultScriptHandler.java:72)
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.defineScriptHandlerClassScope(DefaultPluginRequestApplicator.java:204)
at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:82)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:186)
at org.gradle.configuration.BuildOperationScriptPlugin$1$1.run(BuildOperationScriptPlugin.java:69)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:66)
at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:63)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:48)
at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:63)
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$EvaluateProject.run(LifecycleProjectEvaluator.java:105)
... 80 more
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve test.nebula:a:1.1.1-rc.1.
Required by:
project :
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.EdgeState.calculateTargetConfigurations(EdgeState.java:187)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.EdgeState.attachToTargetConfigurations(EdgeState.java:129)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.attachToTargetRevisionsSerially(DependencyGraphBuilder.java:317)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.resolveEdges(DependencyGraphBuilder.java:216)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.traverseGraph(DependencyGraphBuilder.java:169)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:130)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver.resolve(DefaultArtifactDependencyResolver.java:121)
at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolveGraph(DefaultConfigurationResolver.java:169)
at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolveGraph(ShortCircuitEmptyConfigurationResolver.java:86)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:73)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$5.run(DefaultConfiguration.java:533)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveGraphIfRequired(DefaultConfiguration.java:524)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveToStateOrLater(DefaultConfiguration.java:509)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$1800(DefaultConfiguration.java:123)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getSelectedArtifacts(DefaultConfiguration.java:1059)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.access$3100(DefaultConfiguration.java:993)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationArtifactCollection.ensureResolved(DefaultConfiguration.java:1505)
... 102 more
Caused by: org.gradle.internal.component.NoMatchingConfigurationSelectionException: Unable to find a matching variant of test.nebula:a:1.1.1-rc.1:
- Variant 'compile':
- Found org.gradle.component.category 'library' but wasn't required.
- Required org.gradle.status 'release' and found incompatible value 'candidate'.
- Found org.gradle.usage 'java-api' but wasn't required.
- Variant 'enforced-platform-compile':
- Found org.gradle.component.category 'enforced-platform' but wasn't required.
- Required org.gradle.status 'release' and found incompatible value 'candidate'.
- Found org.gradle.usage 'java-api' but wasn't required.
- Variant 'enforced-platform-runtime':
- Found org.gradle.component.category 'enforced-platform' but wasn't required.
- Required org.gradle.status 'release' and found incompatible value 'candidate'.
- Found org.gradle.usage 'java-runtime' but wasn't required.
- Variant 'platform-compile':
- Found org.gradle.component.category 'platform' but wasn't required.
- Required org.gradle.status 'release' and found incompatible value 'candidate'.
- Found org.gradle.usage 'java-api' but wasn't required.
- Variant 'platform-runtime':
- Found org.gradle.component.category 'platform' but wasn't required.
- Required org.gradle.status 'release' and found incompatible value 'candidate'.
- Found org.gradle.usage 'java-runtime' but wasn't required.
- Variant 'runtime':
- Found org.gradle.component.category 'library' but wasn't required.
- Required org.gradle.status 'release' and found incompatible value 'candidate'.
- Found org.gradle.usage 'java-runtime' but wasn't required.
at org.gradle.internal.component.model.AttributeConfigurationSelector.selectConfigurationUsingAttributeMatching(AttributeConfigurationSelector.java:46)
at org.gradle.internal.component.model.LocalComponentDependencyMetadata.selectConfigurations(LocalComponentDependencyMetadata.java:133)
at org.gradle.internal.component.local.model.DslOriginDependencyMetadataWrapper.selectConfigurations(DslOriginDependencyMetadataWrapper.java:60)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.EdgeState.calculateTargetConfigurations(EdgeState.java:184)
... 123 more
- Required org.gradle.status 'release' and found incompatible value 'candidate'.
Ideally, we should be able to set the status
to candidate
.
Platform Artifact Support
project: https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/excludes-in-bom
Excludes within BOM
A dependency that is excluded within a bom ends up brought in anyway.
BOM
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.0.7.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
build.gradle
dependencies {
implementation 'nebulatest:nebulabom:1.0.0' // recommends a version of spring-beans excluding snakeyaml
implementation 'org.springframework:spring-beans' // expecting snakeyaml to be excluded
implementation 'org.yaml:snakeyaml:1.19' // snakeyaml loses to spring-bean's snakeyaml
}
Dependencies Resolved
$ ./gradlew -q dependencies --configuration compileClasspath
------------------------------------------------------------
Root project
------------------------------------------------------------
compileClasspath - Compile classpath for source set 'main'.
+--- nebulatest:nebulabom:1.0.0
| \--- org.springframework:spring-beans:5.0.7.RELEASE
| +--- org.springframework:spring-core:5.0.7.RELEASE
| | \--- org.springframework:spring-jcl:5.0.7.RELEASE
| \--- org.yaml:snakeyaml:1.20 <-- expected to be excluded
+--- org.springframework:spring-beans -> 5.0.7.RELEASE (*)
\--- org.yaml:snakeyaml:1.19 -> 1.20
(*) - dependencies omitted (listed previously)
Ideally I'd like to be able to craft a BOM that can exclude all the known edges that bring in a problematic dependency. Is it expected this would not work today?
I suspect this may be because dependencyManagement
maps to DependencyConstraint, which doesn't have any exclude abilities, but wanted to check.
Dependencies are not aligned when bom is used
Dependencies which are marked to belong to the same group and forced to downgrade have are not aligned in this case.
You can see this output ./gradlew dependencies --configuration compile
compile - Dependencies for source set 'main' (deprecated, use 'implementation' instead).
+--- example:bom:1.0
| +--- example:platform:2.0
| | \--- example:transitive1:1.0
| | \--- example:transitive2:1.0
| | \--- com.fasterxml.jackson.datatype:jackson-datatype-guava:2.2.0 -> 2.9.6
| +--- com.fasterxml.jackson.datatype:jackson-datatype-joda:2.9.6 -> 2.8.6
| \--- com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.6
+--- example:dependency1:1.0
| \--- example:platform:1.0 -> 2.0 (*)
\--- example:dependency2:1.0
+--- com.fasterxml.jackson.datatype:jackson-datatype-joda:2.9.6 -> 2.8.6
\--- com.fasterxml.jackson.datatype:jackson-datatype-guava:2.9.6
I would expect all dependencies at the 2.8.6 version. Full example project https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/broken-alignment-with-bom.
Interesting facts are:
- When
bom
is causing the upgrade ofplatform
from1.0
to2.0
then I see the problem. Direct dependency onplatform:2.0
insteadexample:dependency1:1.0
doesn't have this problem. - It seems that even depth of transitive dependencies in
platform
is playing a role. Whenplatform
directly depended onjackson-datatype-guava:2.2.0
I was getting the right version.
IMPROVED_POM_SUPPORT: Excludes on first-order overwritten by transitive
Example project: https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/consumer-excludes-with-bom
Given a build file with dependencies declared like this:
dependencies {
implementation('org.springframework:spring-beans:5.0.6.RELEASE') { // depends on snakeyaml 1.20
exclude group: 'org.yaml', module: 'snakeyaml'
}
implementation 'nebulatest:mylib:latest.release' // depends on snakeyaml:1.19 and spring-beans:5.0.6.RELEASE
}
I would expect spring-beans opinion of snakeyaml to not participate in conflict resolution since it has been excluded, resulting in 1.19 of snakeyaml.
Without IMPROVED_POM_SUPPORT
$ ./gradlew -DimprovedPom=false -q dependencies --configuration compileClasspath
------------------------------------------------------------
Root project
------------------------------------------------------------
compileClasspath - Compile classpath for source set 'main'.
+--- org.springframework:spring-beans:5.0.6.RELEASE
| \--- org.springframework:spring-core:5.0.6.RELEASE
| \--- org.springframework:spring-jcl:5.0.6.RELEASE
\--- nebulatest:mylib:latest.release -> 1.0.1
+--- org.yaml:snakeyaml:1.19 <-- expected
\--- org.springframework:spring-beans:5.0.6.RELEASE (*)
(*) - dependencies omitted (listed previously)
With IMPROVED_POM_SUPPORT
$ ./gradlew -DimprovedPom=true -q dependencies --configuration compileClasspath
------------------------------------------------------------
Root project
------------------------------------------------------------
compileClasspath - Compile classpath for source set 'main'.
+--- org.springframework:spring-beans:5.0.6.RELEASE
| +--- org.springframework:spring-core:5.0.6.RELEASE
| | \--- org.springframework:spring-jcl:5.0.6.RELEASE
| \--- org.yaml:snakeyaml:1.20 <-- not expected
\--- nebulatest:mylib:latest.release -> 1.0.1
+--- org.yaml:snakeyaml:1.19 -> 1.20
\--- org.springframework:spring-beans:5.0.6.RELEASE (*)
(*) - dependencies omitted (listed previously)
Dependency insight: Rejections do not show up as a contributor when user has not selected a dynamic version
Scenario
Given a build file containing a dependency with a rejection and non-dynamic version selection:
dependencies {
compile 'com.google.guava:guava:18.0'
}
import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.DefaultVersionSelectorScheme
import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.DefaultVersionComparator
configurations.all {
resolutionStrategy.componentSelection.all({ selection ->
def candidate = selection.candidate
def rejectionMessage = '✭ rejection of com.google.guava:guava:16.0.1'
if (candidate.group == 'com.google.guava' && candidate.module == 'guava') {
def comparator = new DefaultVersionComparator()
def scheme = new DefaultVersionSelectorScheme(comparator)
def versionSelector = scheme.parseSelector('16.0.1')
if (candidate.version == null || candidate.version == '' || versionSelector.accept(candidate.version)) {
selection.reject(rejectionMessage)
}
}
})
}
when I run ./gradlew dependencyInsight --dependency guava
with Gradle 4.10-20180801000007+0000
then I should see the final version as 18.0
(which I do)
and I should see a selection reason as Rejection : 16.0.1 by rule because...
(which I do not)
Note: See full output below
Example Project
Please see the whole example project at dependency-insight/docs/reject/reject-static/input
Current output for reference
> Task :dependencyInsight
com.google.guava:guava:18.0
variant "compile" [
org.gradle.status = release (not requested)
org.gradle.usage = java-api
]
com.google.guava:guava:18.0
\--- compileClasspath
Alignment: dependencies are not aligned when there is a force in place
Scenario
Given a build file containing a dependency with an alignment and a force:
dependencies {
compile 'org.slf4j:slf4j-api:1.6.0'
compile 'org.slf4j:slf4j-simple:1.7.20'
}
configurations.all {
resolutionStrategy {
force 'org.slf4j:slf4j-api:1.5.0'
}
}
project.dependencies.components.all(AlignJackson.class)
class AlignJackson implements ComponentMetadataRule {
void execute(ComponentMetadataContext ctx) {
ctx.details.with { it ->
if (it.getId().getGroup().startsWith("org.slf4j")) {
it.belongsTo("org.slf4j:slf4j-platform:${it.getId().getVersion()}")
}
}
}
}
when I run ./gradlew dependencyInsight --dependency slf4j
with Gradle 4.10-20180801000007+0000
then I should see the final version as 1.5.0
for all dependencies (which I do not)
because the single force to 1.5.0
should have pushed the dependency platform down to this version.
Note: See full output below
Example Project
Please see the whole example project at dependency-insight/docs/alignment/alignment-static-direct-force/input
Current output for reference
Tasks: dependencyInsight --dependency slf4j-api
> Task :dependencyInsight
org.slf4j:slf4j-api:1.5.0
variant "compile" [
org.gradle.status = release (not requested)
org.gradle.usage = java-api
]
Selection reasons:
- Was requested
- Forced
- By constraint : belongs to platform org.slf4j:slf4j-platform:1.7.20
org.slf4j:slf4j-api:1.6.0 -> 1.5.0
\--- compileClasspath
org.slf4j:slf4j-api:1.7.20 -> 1.5.0
\--- org.slf4j:slf4j-simple:1.7.20
+--- compileClasspath
\--- compileClasspath
Tasks: dependencyInsight --dependency slf4j-simple
> Task :dependencyInsight
org.slf4j:slf4j-simple:1.7.20
variant "compile" [
org.gradle.status = release (not requested)
org.gradle.usage = java-api
]
Selection reasons:
- Was requested
- By constraint : belongs to platform org.slf4j:slf4j-platform:1.7.20
org.slf4j:slf4j-simple:1.7.20
\--- compileClasspath
Higher version transitive doesn't align its parent dependency.
I found the following situation. netflix:exampleapp-client:80.0.139
depends on netflix:exampleapp-common:80.0.154
. Modules exampleapp-*
are aligned. It causes upgrade of netflix:exampleapp-client
to 80.0.154
which depends on a higher version of common
and the situation repeats. With our resolution rules it converges to this situation:
compile - Dependencies for source set 'main' (deprecated, use 'implementation' instead).
\--- netflix:exampleapp-client:80.0.139 -> 80.0.236
+--- netflix:exampleapp-common:80.0.260
\--- netflix:exampleapp-smart-client:80.0.21
\--- netflix:exampleapp-model:80.0.15
However, with belongsTo
based implementation, it stops sooner. netflix:exampleapp-common:80.0.249
is not causing an upgrade of netflix:exampleapp-client
to the closest possible version which should be 80.0.236
compile - Dependencies for source set 'main' (deprecated, use 'implementation' instead).
\--- netflix:exampleapp-client:80.0.139 -> 80.0.225
+--- netflix:exampleapp-common:80.0.249
\--- netflix:exampleapp-smart-client:80.0.10
Complete example: https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/non-upgraded-dependency-by-alignment
You can comment out:
components.all { ComponentMetadataDetails details ->
if (details.id.name.startsWith('exampleapp')) {
details.belongsTo("aligned-platform:exampleapp:${details.id.version}")
}
}
and uncomment:
resolutionRules files('alignment-rule.json')
to see how our plugin behaves.
Explicit lower versions are allowed when higher level status is requested as attribute in configuration.
When we specify globally in a configuration that requested status attribute is release
we should still be able to resolve a specific version of dependencies which have lower status without the need to duplicate configuration.
Eg:
configurations.all {
attributes {
attribute ProjectInternal.STATUS_ATTRIBUTE, 'release'
}
}
dependencies {
implementation 'org.group:foo:1.0-rc-1'
}
Removed Configuration has lockfile left behind on regeneration
Given a buildfile such as:
apply plugin: 'java'
apply plugin: 'checkstyle'
dependencyLocking {
lockAllConfigurations()
}
repositories { jcenter() }
dependencies {
testImplementation 'junit:junit:4.12'
}
When ./gradlew --write-locks dependencies
is executed, a lockfile is generated as expected for each configure.
However when the checkstyle plugin is removed (and its checkstyle configuration disppears) and ./gradlew --write-locks dependencies
is executed, the files are not removed.
Dependency insight: exclusions do not have any selection reasons
This is a two-part issue:
- Exclusions do not provide a selection reason on their own
- Exclusions remove all other selection reasons from dependency insight
Scenario
Given a build file containing a dependency with a substitution and an exclusion:
dependencies {
compile 'io.netty:netty-all:4.1.20.FINAL'
}
def substitutionMessage = '✭ substitution io.netty:netty-all -> io.netty:netty-common:4.1.23.Final'
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute module('io.netty:netty-all') because (substitutionMessage) with module('io.netty:netty-common:4.1.23.Final')
}
}
def exclusionMessage = '✭ exclusion io.netty:netty-all'
configurations.all {
exclude group: 'io.netty', module: 'netty-all'
}
when I run ./gradlew dependencyInsight --dependency netty
with Gradle 4.10-20180801000007+0000
then I should see no final version selected (which I do)
and I should see a selection reason as excluded
(which I do not)
and I should see a selection reason as substitution
(which I do not), letting me know that the substitution added to the selection, but was not the final chosen version
Note: See full output below
Example Project
Please see the whole example project at dependency-insight/docs/exclude/exclude-substitute-static/input
An example project with a force is at dependency-insight/docs/exclude/exclude-static-force/input
Current output for reference
> Task :dependencyInsight
No dependencies matching given input were found in configuration ':compileClasspath'
Consuming preferred dependencies is unexpected across Gradle, Maven, and Ivy metadata
Tracking gradle/gradle#7351
I'm raising this as an issue/ conversation topic as it relates to functionality not part of Ivy or Maven metadata, but an interesting user flow of:
- User defines preferred dependency version in a project
- User publishes with Maven or Ivy or Gradle metadata format
- User consumes dependency in another project
- User expects to resolve to the preferred transitive dependency version
That will have a different outcome depending on what metadata format is used.
Mainly, I'd like a discussion/ clarification/ README section that details what I should expect with these use cases.
Update lock is generating inconsistent lock with actually resolved dependencies.
I have a bom in a project and one dependency.
dependencyLocking {
lockAllConfigurations()
}
dependencyRecommendations {
mavenBom module: 'netflix:custom-bom:1.0'
}
dependencies {
compile('netflix:common')
}
Steps to reproduce:
- I generate lock via
./gradlew dependencies --write-locks
- I update the bom to a new version
netflix:custom-bom:2.0
- I update lock via
./gradlew dependencies --update-locks 'netflix:custom-bom'
- I run
./gradlew clean assemble
and it fails with error like this.
Could not determine the dependencies of task ':compileJava'.
> Could not resolve all dependencies for configuration ':compileClasspath'.
> Dependency lock state for configuration 'compileClasspath' is out of date:
- Did not resolve 'org.springframework.boot:spring-boot-starter-web:2.0.3.RELEASE' which is part of the lock state
Names and examples are just illustrative. I will share a real project privately.
NPE on `incoming.resolutionResult.allDependencies` in Gradle 5.0
nebula-plugins/gradle-resolution-rules-plugin is failing a test on Gradle 5.0 nightly builds with a NullPointerException while calling incoming.resolutionResult.allDependencies
from alignRule.
Steps to Reproduce
git clone https://github.com/nebula-plugins/gradle-resolution-rules-plugin.git && cd gradle-resolution-rules-plugin
./gradlew wrapper --gradle-version 5.0-20180829062852+0000
./gradlew integTest --tests nebula.plugin.resolutionrules.AlignRulesPluginInteractionSpec
Stacktrace
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:dependencies'.
> Could not resolve all dependencies for configuration ':app:compileCopy'.
> java.lang.NullPointerException (no error message)
* Try:
Run with --debug option to get more log output. Run with --scan to get full insights.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:dependencies'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipCachedTaskExecuter.execute(SkipCachedTaskExecuter.java:105)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ResolveBuildCacheKeyExecuter.execute(ResolveBuildCacheKeyExecuter.java:79)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:61)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:55)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:292)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
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.api.artifacts.ResolveException: Could not resolve all dependencies for configuration ':app:compileCopy'.
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.wrapException(ErrorHandlingConfigurationResolver.java:103)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:75)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$5.run(DefaultConfiguration.java:533)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveGraphIfRequired(DefaultConfiguration.java:524)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveToStateOrLater(DefaultConfiguration.java:509)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$1800(DefaultConfiguration.java:123)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationResolvableDependencies.assertArtifactsResolved(DefaultConfiguration.java:1270)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationResolvableDependencies.access$3000(DefaultConfiguration.java:1159)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationResolvableDependencies$LenientResolutionResult.resolve(DefaultConfiguration.java:1285)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationResolvableDependencies$LenientResolutionResult.getAllDependencies(DefaultConfiguration.java:1304)
at nebula.plugin.resolutionrules.AlignRules.selectedVersions(alignRule.kt:188)
at nebula.plugin.resolutionrules.AlignRules.baselineAligns(alignRule.kt:115)
at nebula.plugin.resolutionrules.AlignRules.apply(alignRule.kt:99)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$apply$1$$special$$inlined$onResolve$1.execute(configurations.kt:22)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$apply$1$$special$$inlined$onResolve$1.execute(configurations.kt)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:324)
at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:234)
at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:140)
at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy51.beforeResolve(Unknown Source)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.performPreResolveActions(DefaultConfiguration.java:582)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$500(DefaultConfiguration.java:123)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$5.run(DefaultConfiguration.java:531)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveGraphIfRequired(DefaultConfiguration.java:524)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveToStateOrLater(DefaultConfiguration.java:509)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$1800(DefaultConfiguration.java:123)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationResolvableDependencies.assertArtifactsResolved(DefaultConfiguration.java:1270)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationResolvableDependencies.access$3000(DefaultConfiguration.java:1159)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationResolvableDependencies$LenientResolutionResult.resolve(DefaultConfiguration.java:1285)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationResolvableDependencies$LenientResolutionResult.getRoot(DefaultConfiguration.java:1298)
at org.gradle.api.tasks.diagnostics.internal.dependencies.AsciiDependencyReportRenderer.render(AsciiDependencyReportRenderer.java:95)
at org.gradle.api.tasks.diagnostics.AbstractDependencyReportTask.generate(AbstractDependencyReportTask.java:65)
at org.gradle.api.tasks.diagnostics.AbstractReportTask$2.generateReport(AbstractReportTask.java:75)
at org.gradle.api.tasks.diagnostics.internal.ReportGenerator.generateReport(ReportGenerator.java:58)
at org.gradle.api.tasks.diagnostics.AbstractReportTask.generate(AbstractReportTask.java:85)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:726)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:693)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
... 32 more
Caused by: java.lang.NullPointerException
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.EdgeState.getFailure(EdgeState.java:207)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.oldresult.ResolutionFailureCollector.visitNode(ResolutionFailureCollector.java:62)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.CompositeDependencyGraphVisitor.visitNode(CompositeDependencyGraphVisitor.java:39)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.CompositeDependencyGraphVisitor.visitNode(CompositeDependencyGraphVisitor.java:39)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.assembleResult(DependencyGraphBuilder.java:357)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.builder.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:130)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver.resolve(DefaultArtifactDependencyResolver.java:123)
at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolveGraph(DefaultConfigurationResolver.java:167)
at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolveGraph(ShortCircuitEmptyConfigurationResolver.java:89)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:73)
... 96 more
Gradle 5.0-rc-1 dependencies added to compileOnly, testCompileOnly, and annotationProcessor are missed by IntelliJ
JetBrains ticket: IDEA-201974
Also mentioned on franzbecker/gradle-lombok#56.
This was discovered while upgrading a project that relies on gradle-lombok plugin from Gradle 4.10.2 -> 5.0-rc-1.
Fail to touch `gc.properties`
Unexpected parent dependency exception when belongsTo alignment is used.
Caused by: java.lang.IllegalStateException: Unexpected parent dependency id 1419. Seen ids: [2, 2053, 1036, 1037, 1038, 2068, 2075, 2077, 2079, 2081, 2083, 2096, 2101, 2115, 2116, 71, 72, 73, 74, 75, 2123, 77, 78, 2126, 80, 81, 2129, 82, 83, 1107, 1108, 1109, 1110, 2134, 1111, 2135, 1112, 1113, 1114, 1115, 1117, 1118, 95, 1119, 96, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 2153, 1130, 2154, 1131, 1132, 1133, 1134, 111, 1135, 1136, 1137, 2161, 114, 1138, 115, 1139, 116, 1140, 2166, 2168, 1145, 1146, 2170, 1149, 2175, 1152, 2189, 2190, 151, 152, 153, 1177, 154, 155, 156, 157, 2205, 158, 159, 160, 161, 1187, 1188, 1189, 1196, 2226, 1207, 1212, 2236, 1213, 2237, 1216, 1221, 1222, 2248, 1225, 2249, 2250, 2251, 2252, 205, 1230, 2255, 210, 1235, 1238, 1245, 1246, 1255, 1261, 241, 242, 1280, 1281, 1283, 1284, 1285, 262, 1286, 1287, 264, 267, 1292, 269, 1297, 278, 281, 282, 283, 284, 285, 286, 287, 289, 290, 291, 1315, 1316, 1318, 1329, 1330, 1331, 1332, 1333, 1352, 1354, 337, 1361, 339, 1364, 341, 344, 347, 349, 351, 353, 1378, 356, 358, 1382, 1386, 363, 1389, 366, 368, 1394, 373, 1397, 375, 1400, 377, 1403, 380, 382, 1406, 385, 1409, 387, 389, 391, 393, 395, 397, 1422, 400, 402, 404, 406, 408, 410, 412, 415, 420, 1444, 1446, 423, 1448, 1454, 431, 1456, 1460, 1465, 1467, 1470, 1473, 1479, 458, 459, 461, 1486, 1491, 1492, 470, 471, 1495, 477, 478, 485, 486, 487, 492, 1518, 1519, 1520, 1521, 1524, 504, 1529, 506, 1530, 507, 1535, 514, 515, 516, 1550, 1551, 1552, 1553, 1562, 1567, 1579, 563, 564, 565, 566, 567, 1591, 568, 1592, 569, 1593, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 596, 597, 598, 599, 600, 1630, 1631, 1632, 610, 612, 1637, 617, 1642, 1643, 1648, 632, 633, 634, 635, 636, 637, 638, 1666, 1667, 1668, 645, 646, 647, 1671, 1676, 1685, 662, 1686, 663, 1687, 664, 665, 666, 667, 668, 1698, 1699, 1710, 1717, 1718, 1719, 697, 698, 1722, 699, 700, 701, 702, 703, 704, 1728, 705, 1729, 706, 707, 708, 1732, 709, 710, 718, 729, 1767, 744, 745, 1770, 752, 753, 754, 767, 768, 771, 775, 802, 1826, 805, 1829, 820, 1844, 1849, 827, 1854, 831, 1855, 1858, 1876, 1878, 1880, 1882, 1884, 1886, 1888, 1890, 1892, 1894, 871, 1896, 873, 1898, 1900, 1902, 880, 883, 1911, 1913, 890, 1914, 893, 1919, 1920, 898, 902, 904, 1929, 906, 908, 910, 1934, 1935, 912, 914, 1942, 921, 1947, 924, 928, 931, 934, 937, 944, 1972, 1973, 957, 958, 959, 960, 965, 966, 969, 1997, 974, 975, 2000, 978, 2005, 2010, 987, 988, 989, 990, 993, 996, 999, 2024, 1002, 1005, 1010, 1011, 2038, 1021, 1022]
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.oldresult.TransientConfigurationResultsBuilder.deserialize(TransientConfigurationResultsBuilder.java:192)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.oldresult.TransientConfigurationResultsBuilder.access$200(TransientConfigurationResultsBuilder.java:49)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.oldresult.TransientConfigurationResultsBuilder$6$1.read(TransientConfigurationResultsBuilder.java:135)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.oldresult.TransientConfigurationResultsBuilder$6$1.read(TransientConfigurationResultsBuilder.java:133)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.DefaultBinaryStore$SimpleBinaryData.read(DefaultBinaryStore.java:128)
... 117 more
I'm getting this exception after following calls:
GRADLE_USER_HOME=./.gradleUserHome ./gradlew -Dnebula.features.coreAlignmentSupport=false -qs gL --offline
GRADLE_USER_HOME=./.gradleUserHome ./gradlew -Dnebula.features.coreAlignmentSupport=true -qs gL --offline
ProfileListener Conditional in Gradle 5.0
Is there a way for a plugin to ensure StartParameter#setProfile(true) is always enabled from a plugin?
I've tried setting it in the plugin, and from an initscript, but both seem to be too late.
nebula-plugins/gradle-metrics-plugin relies on org.gradle.profile.ProfileListener#buildFinished(BuildProfile)
being executed to get timing information and upload results (here).
gradle/gradle@946a56b changed this behavior from being always called to only called when --profile
is passed.
Steps to Reproduce
git clone https://github.com/nebula-plugins/gradle-metrics-plugin.git && cd gradle-metrics-plugin
./gradlew wrapper --gradle-version 5.0-20180829062852+0000
./gradlew check
Unexpected result of resolution when the same dependency is requested multiple times with different attributes
I have a direct dependency on org.junit:junit-engine-api:5.+
with release
requested status attribute. I have another direct dependency org.junit:junit4-engine:5.+
with integration
requested status attribute. junit4-engine
will transitively bring junit-engine-api
. I would assume that each leaf in the dependency graph will pick a candidate version considering requested attribute. Those versions will then conflict resolve. Now my resolution fails because the winner of conflict resolution is not able to fulfill conflicting requested attributes.
Run ./gradlew dependencies
in https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/lowerStatusConflict to see this result:
+--- org.junit:junit4-engine:5.+ -> 5.0.0-SNAPSHOT
| +--- org.junit:junit-engine-api:5.0.0-SNAPSHOT
| | +--- org.junit:junit-commons:5.0.0-SNAPSHOT
| | \--- org.opentest4j:opentest4j:1.0.0-M1
| \--- junit:junit:4.12
| \--- org.hamcrest:hamcrest-core:1.3
\--- org.junit:junit-engine-api:5.+ FAILED
Aligned group through belongsTo needs to be easily downgraded to a specific version
Alignment of libraries implemented in gradle-resolution-rules-plugin supports a feature that if one library from the aligned group is forced to a specific version the whole group is being aligned to that version. Gradle core has incubating feature which is doing an alignment too but doesn't currently support easy way how to downgrade the group.
Example project: https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/alignmentRulesAndForce
`CacheableRule` does not appear to be working with `ComponentMetadataRule`
We were trying to implement a ComponentMetadataRule
using CacheableRule
.
However, it seems that the rule is not getting cache across builds and it gets executed twice.
To give an example, took the same repo we shared for the candidate
issue and added the rule in there -> https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/cache-rule-issue
We have a CacheableStatusRule
annotated with @CacheableRule
in https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/cache-rule-issue and applying it in https://github.com/nebula-plugins/gradle-nebula-integration/blob/master/cache-rule-issue/src/main/groovy/gradle5/rc/issue/MyPlugin.groovy#L23
Then in our test we run the task build
twice passing the --build-cache
flag -> https://github.com/nebula-plugins/gradle-nebula-integration/blob/master/cache-rule-issue/src/test/groovy/gradle5/rc/issue/MyPluginSpec.groovy#L79
We expected the second result to not include the Executing CacheableStatusRule
string in the output, however it shows up.
We also made sure that project.gradle.startParameter.buildCacheEnable
is true
Please let us know if this is an issue or probably we are doing something wrong? or this isn't the expected behavior. Also if you have a better/suggested way to test CacheableRule
will be much appreciated it
java.lang.RuntimeException: Problems reading data from Binary store
When I enable alignment through belongsTo
resolution of dependencies fails with the following error.
Command:
GRADLE_USER_HOME=./gradleHome ./gradlew -Dnebula.features.coreAlignmentSupport=true --info --stacktrace dependencies
Result:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':dependencies'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:96)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:65)
at org.gradle.api.internal.tasks.execution.ActionEventFiringTaskExecuter.execute(ActionEventFiringTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.TimeoutTaskExecuter.execute(TimeoutTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.SnapshotAfterExecutionTaskExecuter.execute(SnapshotAfterExecutionTaskExecuter.java:38)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:61)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:55)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:47)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:298)
at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:283)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
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.api.artifacts.ResolveException: Could not resolve all dependencies for configuration ':compile'.
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.wrapException(ErrorHandlingConfigurationResolver.java:103)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.access$000(ErrorHandlingConfigurationResolver.java:47)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver$ErrorHandlingResolutionResult.getRoot(ErrorHandlingConfigurationResolver.java:201)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationResolvableDependencies$LenientResolutionResult.getRoot(DefaultConfiguration.java:1321)
at org.gradle.api.tasks.diagnostics.internal.dependencies.AsciiDependencyReportRenderer.render(AsciiDependencyReportRenderer.java:95)
at org.gradle.api.tasks.diagnostics.AbstractDependencyReportTask.generate(AbstractDependencyReportTask.java:65)
at org.gradle.api.tasks.diagnostics.AbstractReportTask$2.generateReport(AbstractReportTask.java:75)
at org.gradle.api.tasks.diagnostics.internal.ReportGenerator.generateReport(ReportGenerator.java:58)
at org.gradle.api.tasks.diagnostics.AbstractReportTask.generate(AbstractReportTask.java:85)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:48)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:729)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:696)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:117)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:106)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:85)
... 33 more
Caused by: java.lang.RuntimeException: Problems reading data from Binary store in /private/var/folders/h8/61bdkq1515sbg4w1_23zk2xh0000gn/T/gradle585131709173203072.bin (exist: true)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.DefaultBinaryStore$SimpleBinaryData.read(DefaultBinaryStore.java:130)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory$1.create(StreamingResolutionResultBuilder.java:174)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory$1.create(StreamingResolutionResultBuilder.java:171)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.CachedStoreFactory$SimpleStore.load(CachedStoreFactory.java:99)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.create(StreamingResolutionResultBuilder.java:171)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.create(StreamingResolutionResultBuilder.java:146)
at org.gradle.api.internal.artifacts.result.DefaultResolutionResult.getRoot(DefaultResolutionResult.java:43)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver$ErrorHandlingResolutionResult.getRoot(ErrorHandlingConfigurationResolver.java:199)
... 53 more
Caused by: java.lang.NullPointerException
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.DefaultResolutionResultBuilder.visitOutgoingEdges(DefaultResolutionResultBuilder.java:77)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.deserialize(StreamingResolutionResultBuilder.java:228)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory.access$400(StreamingResolutionResultBuilder.java:146)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory$1$1.read(StreamingResolutionResultBuilder.java:176)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.result.StreamingResolutionResultBuilder$RootFactory$1$1.read(StreamingResolutionResultBuilder.java:174)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.store.DefaultBinaryStore$SimpleBinaryData.read(DefaultBinaryStore.java:128)
... 60 more
I will share a complete example project privately because it contains internal metadata. It uses vanilla Gradle with our resolution plugin. I tried to make it as small as possible.
Interesting notes:
- there are two unusual force declarations. When they are omitted error disappears. They are affecting 2 groups which should be aligned.
- The example uses older nightly. With newer one this project works but I have seen other projects fail even with the new one. I assume the problem is still there.
Resolution time regression with alignments rules implemented with belongsTo
We have seen a difference in resolution times between our resolution rules and belongsTo implementation. I will gather more details but so far it looks like this 2 minutes with old implementation vs 11 minutes with the new one.
The first detail which might be related. I think engine is trying to resolve the artificial module created by belongsTo (aligned-platform:align-jackson-0:2.9.5
) over and over:
11:04:35.830 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainComponentMetaDataResolver] Attempting to resolve component for aligned-platform:align-jackson-0:2.9.5 using repositories [nfrepo-everythingRepo, local, nfrepo-everything-pomMavenRepo]
11:04:35.830 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.ivyresolve.CachingModuleComponentRepository] Cached meta-data for missing module is expired: will perform fresh resolve of 'aligned-platform:align-jackson-0:2.9.5' in 'nfrepo-everythingRepo'
11:04:35.830 [DEBUG] [org.gradle.api.internal.artifacts.repositories.resolver.DefaultExternalResourceArtifactResolver] Loading https://repo.test.netflix.net/artifactory/nfrepo-everything/aligned-platform/align-jackson-0/2.9.5/align-jackson-0-2.9.5-ivy.xml
11:04:35.831 [DEBUG] [org.gradle.internal.resource.transfer.DefaultCacheAwareExternalResourceAccessor] Constructing external resource: https://repo.test.netflix.net/artifactory/nfrepo-everything/aligned-platform/align-jackson-0/2.9.5/align-jackson-0-2.9.5-ivy.xml
11:04:35.831 [DEBUG] [org.gradle.internal.operations.DefaultBuildOperationExecutor] Build operation 'Download https://repo.test.netflix.net/artifactory/nfrepo-everything/aligned-platform/align-jackson-0/2.9.5/align-jackson-0-2.9.5-ivy.xml' started
11:04:35.831 [DEBUG] [org.gradle.internal.resource.transport.http.HttpResourceAccessor] Constructing external resource: https://repo.test.netflix.net/artifactory/nfrepo-everything/aligned-platform/align-jackson-0/2.9.5/align-jackson-0-2.9.5-ivy.xml
11:04:35.831 [DEBUG] [org.gradle.internal.resource.transport.http.HttpClientHelper] Performing HTTP GET: https://repo.test.netflix.net/artifactory/nfrepo-everything/aligned-platform/align-jackson-0/2.9.5/align-jackson-0-2.9.5-ivy.xml
11:04:35.831 [DEBUG] [org.apache.http.client.protocol.RequestAddCookies] CookieSpec selected: default
11:04:35.831 [DEBUG] [org.apache.http.client.protocol.RequestAddCookies] Cookie [version: 0][name: AWSALB][value: NeYMxCDtWNSgWYrWrIQEfMFGcajmFoMAmmxDW7YcHQzfTzuyHPJZuQEkJ6AYnrsyL9Qri0i7MN3HqJdkJgSqSOVaz2w+VUN0jitfc8AKd7nTTu4carKMkO+GlDRm][domain: repo.test.netflix.net][path: /][expiry: Thu Aug 16 11:04:35 PDT 2018] match [(secure)repo.test.netflix.net:443/artifactory/nfrepo-everything/aligned-platform/align-jackson-0/2.9.5/align-jackson-0-2.9.5-ivy.xml]
11:04:35.831 [DEBUG] [org.apache.http.client.protocol.RequestAuthCache] Auth cache not set in the context
11:04:35.831 [DEBUG] [org.apache.http.impl.conn.PoolingHttpClientConnectionManager] Connection request: [route: {s}->https://repo.test.netflix.net:443][total kept alive: 8; route allocated: 8 of 20; total allocated: 8 of 20]
11:04:35.831 [DEBUG] [org.apache.http.impl.conn.PoolingHttpClientConnectionManager] Connection leased: [id: 125][route: {s}->https://repo.test.netflix.net:443][total kept alive: 7; route allocated: 8 of 20; total allocated: 8 of 20]
11:04:35.832 [DEBUG] [org.apache.http.impl.conn.DefaultManagedHttpClientConnection] http-outgoing-125: set socket timeout to 30000
11:04:35.832 [DEBUG] [org.apache.http.impl.conn.DefaultManagedHttpClientConnection] http-outgoing-125: set socket timeout to 30000
11:04:35.832 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Executing request GET /artifactory/nfrepo-everything/aligned-platform/align-jackson-0/2.9.5/align-jackson-0-2.9.5-ivy.xml HTTP/1.1
11:04:35.832 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Target auth state: UNCHALLENGED
11:04:35.832 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Proxy auth state: UNCHALLENGED
11:04:35.832 [DEBUG] [org.apache.http.impl.conn.DefaultHttpResponseParser] Garbage in response: 0
11:04:35.832 [DEBUG] [org.apache.http.impl.conn.DefaultHttpResponseParser] Garbage in response:
11:04:35.886 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Connection can be kept alive indefinitely
Another possibly related thing: Implementation https://github.com/nebula-plugins/gradle-resolution-rules-plugin/blob/master/src/main/kotlin/nebula/plugin/resolutionrules/alignRule.kt#L42-L54. I wanted to avoid bigger changes so I keep using current infrastructure which applies rule with belongsTo not once but multiple times per each configuration.
Force to higher patch version doesn't bring the rest of aligned group up.
I have an alignment configured for all jackson libraries. The project set force to a specific version. The version is a patch version which doesn't exist for all modules e.g: force 'com.fasterxml.jackson.core:jackson-databind:2.8.11.1'
. Unfortunately, it causes that rest of libraries which doesn't have this version are not included in the alignment.
Running ./gradlew dI --dependency jackson --configuration compile --singlepath
has this output:
> Task :dependencyInsight
com.fasterxml.jackson.core:jackson-annotations:2.8.0
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
com.fasterxml.jackson.core:jackson-annotations:2.8.0
\--- com.fasterxml.jackson.core:jackson-databind:2.8.11.1
\--- com.amazonaws:aws-java-sdk-core:1.11.438
\--- com.amazonaws:aws-java-sdk:1.11.438
\--- compile
com.fasterxml.jackson.core:jackson-core:2.8.10
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By conflict resolution : between versions 2.8.10 and 2.6.7
com.fasterxml.jackson.core:jackson-core:2.8.10
\--- com.fasterxml.jackson.core:jackson-databind:2.8.11.1
\--- com.amazonaws:aws-java-sdk-core:1.11.438
\--- com.amazonaws:aws-java-sdk:1.11.438
\--- compile
com.fasterxml.jackson.core:jackson-core:2.6.7 -> 2.8.10
\--- com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.6.7
\--- com.amazonaws:aws-java-sdk-core:1.11.438
\--- com.amazonaws:aws-java-sdk:1.11.438
\--- compile
com.fasterxml.jackson.core:jackson-databind:2.8.11.1
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- Forced
- By constraint : belongs to platform aligned-platform:jackson:2.8.11.1
com.fasterxml.jackson.core:jackson-databind:2.6.7.1 -> 2.8.11.1
\--- com.amazonaws:aws-java-sdk-core:1.11.438
\--- com.amazonaws:aws-java-sdk:1.11.438
\--- compile
com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.6.7
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.6.7
\--- com.amazonaws:aws-java-sdk-core:1.11.438
\--- com.amazonaws:aws-java-sdk:1.11.438
\--- compile
When force is changed to force 'com.fasterxml.jackson.core:jackson-databind:2.8.11'
the output is aligned
> Task :dependencyInsight
com.fasterxml.jackson.core:jackson-annotations:2.8.11
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By constraint : belongs to platform aligned-platform:jackson:2.8.11
- Forced
com.fasterxml.jackson.core:jackson-annotations:2.8.0 -> 2.8.11
\--- com.fasterxml.jackson.core:jackson-databind:2.8.11
\--- com.amazonaws:aws-java-sdk-core:1.11.438
\--- com.amazonaws:aws-java-sdk:1.11.438
\--- compile
com.fasterxml.jackson.core:jackson-core:2.8.11
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By constraint : belongs to platform aligned-platform:jackson:2.8.11
- Forced
com.fasterxml.jackson.core:jackson-core:2.8.11
\--- com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.8.11
\--- com.amazonaws:aws-java-sdk-core:1.11.438
\--- com.amazonaws:aws-java-sdk:1.11.438
\--- compile
com.fasterxml.jackson.core:jackson-core:2.8.10 -> 2.8.11
\--- com.fasterxml.jackson.core:jackson-databind:2.8.11
\--- com.amazonaws:aws-java-sdk-core:1.11.438
\--- com.amazonaws:aws-java-sdk:1.11.438
\--- compile
com.fasterxml.jackson.core:jackson-databind:2.8.11
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- Forced
- By constraint : belongs to platform aligned-platform:jackson:2.8.11
com.fasterxml.jackson.core:jackson-databind:2.6.7.1 -> 2.8.11
\--- com.amazonaws:aws-java-sdk-core:1.11.438
\--- com.amazonaws:aws-java-sdk:1.11.438
\--- compile
com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.8.11
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By constraint : belongs to platform aligned-platform:jackson:2.8.11
- Forced
com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.6.7 -> 2.8.11
\--- com.amazonaws:aws-java-sdk-core:1.11.438
\--- com.amazonaws:aws-java-sdk:1.11.438
\--- compile
Complete project sample https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/force-breaks-alignment
Dependency insight: "Force" selection reason does not show up when there is a recommendation in place
Scenario
Given a build file containing a dependency with a recommendation and a force:
dependencies {
compile 'sample:bom:1.0.0'
compile 'com.google.guava:guava'
}
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:14.0.1'
}
}
and a bom containing:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
</dependencyManagement>
when I run ./gradlew dependencyInsight --dependency guava
with Gradle 4.10-20180801000007+0000
then I should see the final version as 14.0.1
(which I do)
and I should see a selection reason as Forced
(which I do not)
Note: See full output below
Example Project
Please see the whole example project at dependency-insight/docs/basic/rec-force/input
Current output for reference
> Task :dependencyInsight
com.google.guava:guava:14.0.1 (via constraint)
variant "compile" [
org.gradle.status = release (not requested)
org.gradle.usage = java-api
]
com.google.guava:guava -> 14.0.1
\--- compileClasspath
com.google.guava:guava:19.0 -> 14.0.1
\--- sample:bom:1.0.0
\--- compileClasspath
Dependency insight: second order contributors are missing information
Scenario
Given a build file with simplified dependencies in a local repo:
repositories {
maven { url { 'repo' } }
}
dependencies {
compile 'planet:earth:3.0.0'
compile 'planet:mars:4.0.0'
compile 'planet:jupiter:5.0.0'
}
with dependencies represented as
> Task :dependencies
compile
+--- planet:earth:3.0.0
| \--- planet:venus:2.0.0 -> 2.0.1
| \--- planet:mercury:1.0.1 -> 1.0.2
+--- planet:mars:4.0.0
| \--- planet:venus:2.0.1 (*)
\--- planet:jupiter:5.0.0
\--- planet:mercury:1.0.2
when I run ./gradlew dependencyInsight --dependency mercury
and ./gradlew dependencyInsight --dependency venus
with Gradle 4.10-20180801000007+0000
then I would expect to see an indication or more information that second-order dependencies have been conflict resolved (which I do not)
This would be ideal when I am curious who brought in a particular version of my dependency. Currently, dependencyInsight provides information suggesting that earth
and mars
both intended to bring in venus:2.0.1
when running dependencyInsight --dependency mercury
.
Note: See full output below
Example Project
Please see the whole example project at dependency-insight/docs/misc/second-order-contributor/input
Current output for reference
- Tasks: dependencyInsight --dependency mercury
> Task :dependencyInsight
planet:mercury:1.0.2
Selection reasons:
- Was requested
- By conflict resolution : between versions 1.0.2 and 1.0.1
planet:mercury:1.0.2
\--- planet:jupiter:5.0.0
\--- compileClasspath
planet:mercury:1.0.1 -> 1.0.2
\--- planet:venus:2.0.1
+--- planet:earth:3.0.0
| \--- compileClasspath
\--- planet:mars:4.0.0
\--- compileClasspath
(*) - dependencies omitted (listed previously)
and I would expect to see more information listed on the line about the conflict resolution of planet:earth
and planet:mars
near this line:
planet:mercury:1.0.1 -> 1.0.2
\--- planet:venus:2.0.1`
- Tasks: dependencyInsight --dependency venus
> Task :dependencyInsight
planet:venus:2.0.1
Selection reasons:
- Was requested
- By conflict resolution : between versions 2.0.0 and 2.0.1
planet:venus:2.0.1
\--- planet:mars:4.0.0
\--- compileClasspath
planet:venus:2.0.0 -> 2.0.1
\--- planet:earth:3.0.0
\--- compileClasspath
`platform` with dynamic version
When a platform is added with a dynamic version org.example:my-bom:latest.candidate
, other dependencies seem to not be getting their versions supplied by this bom.
Dependencies which have transitive=false in ivy file are not included in alignment
I have a dependency which has transitive dependencies defined in ivy file. All of them are members of the same group for alignment. However, one of them is defined with transitive=false.
<dependency org="com.netflix.governator" name="governator-jetty" rev="1.14.4" conf="compile->default" transitive="false"/>
This dependency is not added to a platform for alignment.
./gradlew dI --dependency governator --configuration compile
gives the following output.
> Task :dependencyInsight
com.netflix.governator:governator-api:1.17.5
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By constraint : belongs to platform aligned-platform:governator:1.17.5
com.netflix.governator:governator-api:1.17.5
\--- com.netflix.governator:governator-core:1.17.5
+--- netflix:library:1.173
| \--- compile
+--- com.netflix.governator:governator-jersey:1.17.5
| +--- netflix:library:1.173 (*)
| \--- compile
+--- com.netflix.governator:governator-servlet:1.17.5
| +--- netflix:library:1.173 (*)
| \--- compile
\--- compile
com.netflix.governator:governator-core:1.17.5
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- Forced
- By constraint : belongs to platform aligned-platform:governator:1.17.5
com.netflix.governator:governator-core:1.17.5
+--- com.netflix.governator:governator-jersey:1.17.5
| +--- netflix:library:1.173
| | \--- compile
| \--- compile
\--- com.netflix.governator:governator-servlet:1.17.5
+--- netflix:library:1.173 (*)
\--- compile
com.netflix.governator:governator-core:1.14.4 -> 1.17.5
\--- netflix:library:1.173
\--- compile
com.netflix.governator:governator-jersey:1.17.5
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By constraint : belongs to platform aligned-platform:governator:1.17.5
- Forced
com.netflix.governator:governator-jersey:1.14.4 -> 1.17.5
\--- netflix:library:1.173
\--- compile
com.netflix.governator:governator-jetty:1.14.4
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
com.netflix.governator:governator-jetty:1.14.4
\--- netflix:library:1.173
\--- compile
com.netflix.governator:governator-providers:1.17.5
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By constraint : belongs to platform aligned-platform:governator:1.17.5
com.netflix.governator:governator-providers:1.17.5
\--- com.netflix.governator:governator-jersey:1.17.5
+--- netflix:library:1.173
| \--- compile
\--- compile
com.netflix.governator:governator-servlet:1.17.5
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By constraint : belongs to platform aligned-platform:governator:1.17.5
- Forced
com.netflix.governator:governator-servlet:1.14.4 -> 1.17.5
\--- netflix:library:1.173
\--- compile
See com.netflix.governator:governator-jetty:1.14.4
Here is the full example project https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/transitive-false-not-aligned
Dependency from aligned group included in initscript classpath and project compile configuration is not aligned
When there is an init script which configures init script classpath with a library which should be aligned it will cause misalignment of that group later when project dependencies are resolved.
some-*
modules should be aligned
some-decrypt
is used in nebula.gradle
init script. When init script is used. The project dependencies are missaligned.
./gradlew -I nebula.gradle dependencies --configuration compile
with a result:
compile - Dependencies for source set 'main' (deprecated, use 'implementation' instead).
+--- netflix.bom:runtime-platform-recommendations:4.7.15
| \--- netflix:some-ipc-common:1.187.0
\--- netflix:common-security:latest.release -> 1.23
\--- netflix:some-decrypt:1.140.0
+--- netflix:some-common:1.140.0
\--- netflix:some-ipc-common:1.140.0 -> 1.187.0
./gradlew dependencies --configuration compile
has expected result:
compile - Dependencies for source set 'main' (deprecated, use 'implementation' instead).
+--- netflix.bom:runtime-platform-recommendations:4.7.15
| \--- netflix:some-ipc-common:1.187.0
\--- netflix:common-security:latest.release -> 1.23
\--- netflix:some-decrypt:1.140.0 -> 1.187.0
+--- netflix:some-common:1.187.0
\--- netflix:some-ipc-common:1.187.0
The full example project is https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/initscript-classpath-breaks-alignment
Unexpected transitive dependency in a graph when using `belongsTo` alignment
I have this project https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/unexpected-module-with-alignment where I'm getting one more dependency in my graph when I start using alignment implemented through belongsTo
./gradlew -Dnebula.features.coreAlignmentSupport=true dI --dependency com.google.protobuf:protobuf-lite --configuration compile
Returns
> Task :dependencyInsight
com.google.protobuf:protobuf-lite:3.0.1
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
]
com.google.protobuf:protobuf-lite:3.0.1
\--- io.grpc:grpc-protobuf-lite:1.10.0
+--- compile
\--- io.grpc:grpc-protobuf:1.10.0
+--- compile
\--- compile
./gradlew -Dnebula.features.coreAlignmentSupport=false dI --dependency com.google.protobuf:protobuf-lite --configuration compile
Task :dependencyInsight
No dependencies matching given input were found in configuration ':compile'
IntelliJ IDEA import fails because it is not honoring gradle.properties
We are enabling experimental features via system properties which are set in gradle.properties
Those properties are read in different places. One of them is in init script. However, when IntelliJ is importing gradle project it is setting properties from gradle.properties
too late and init script is already executed. Example project showing this case https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/broken-intellij-import-with-native-lock
How to reproduce
- Assuming that you are in project directory
cp init.gradle ~/.gradle/init.d/
./gradlew dependencies --write-locks
idea .
(assuming that you have IntelliJ command line launcher)- Click
OK
to finish import.
Project import fails with:
Caused by: org.gradle.api.artifacts.ResolveException: Could not resolve all dependencies for configuration ':resolutionRulesCopy'.
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.wrapException(ErrorHandlingConfigurationResolver.java:103)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:75)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$5.run(DefaultConfiguration.java:533)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveGraphIfRequired(DefaultConfiguration.java:524)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveToStateOrLater(DefaultConfiguration.java:509)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$1800(DefaultConfiguration.java:123)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getSelectedArtifacts(DefaultConfiguration.java:1037)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getFiles(DefaultConfiguration.java:1025)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.getFiles(DefaultConfiguration.java:444)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration_Decorated.getFiles(Unknown Source)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolve(DefaultConfiguration.java:434)
at nebula.plugin.resolutionrules.CopiedConfiguration.resolve(configurations.kt)
at nebula.plugin.resolutionrules.NebulaResolutionRulesExtension$ruleFiles$2.invoke(plugin.kt:172)
at nebula.plugin.resolutionrules.NebulaResolutionRulesExtension$ruleFiles$2.invoke(plugin.kt:164)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at nebula.plugin.resolutionrules.NebulaResolutionRulesExtension.getRuleFiles(plugin.kt)
at nebula.plugin.resolutionrules.NebulaResolutionRulesExtension.ruleFiles(plugin.kt:178)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin.rulesFromConfiguration(plugin.kt:105)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin.access$rulesFromConfiguration(plugin.kt:36)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$ruleSet$2.invoke(plugin.kt:39)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$ruleSet$2.invoke(plugin.kt:36)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin.getRuleSet(plugin.kt)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin.access$getRuleSet$p(plugin.kt:36)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$apply$1$$special$$inlined$onExecute$1.execute(projects.kt:19)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$apply$1$$special$$inlined$onExecute$1.execute(projects.kt)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1$1.run(DefaultListenerBuildOperationDecorator.java:155)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.reapply(DefaultUserCodeApplicationContext.java:58)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.run(DefaultListenerBuildOperationDecorator.java:152)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction.execute(DefaultListenerBuildOperationDecorator.java:149)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:91)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:80)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:230)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:149)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
... 105 more
Caused by: org.gradle.internal.locking.LockOutOfDateException: Dependency lock state for configuration 'resolutionRules' is out of date: Resolved 'io.spring.platform:platform-bom:1.0.1.RELEASE' which is not part of the lock state
at org.gradle.internal.locking.LockOutOfDateException.createLockOutOfDateException(LockOutOfDateException.java:37)
at org.gradle.internal.locking.DependencyLockingArtifactVisitor.throwLockOutOfDateException(DependencyLockingArtifactVisitor.java:153)
at org.gradle.internal.locking.DependencyLockingArtifactVisitor.complete(DependencyLockingArtifactVisitor.java:159)
at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.CompositeDependencyArtifactsVisitor.complete(CompositeDependencyArtifactsVisitor.java:73)
at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolveGraph(DefaultConfigurationResolver.java:178)
at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolveGraph(ShortCircuitEmptyConfigurationResolver.java:89)
at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolveGraph(ErrorHandlingConfigurationResolver.java:73)
... 148 more
Looking at IntelliJ IDEA import process logging shows that flag for coreBomSupport is false hence it didn't exclude resolutionRules
from recommending and so recommender adds bom into it. Because lock was generated from command line where it was excluded it causes missmatch.
Flag read in init script false //read from system property nebula.features.coreBomSupport
> Configure project :
coreBomSupport feature enabled //read from system property nebula.features.coreBomSupport
example-project: coreAlignmentSupport feature enabled
Resolution strategy overrides effects of alignments when used `belongsTo`
Example of difference when resolution strategy is applied. The whole project is here https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/alignmentRulesAndResolutionStrategy
With nebula implementation, a group is aligned in the end a rule effect is overridden.
Call: ./gradlew dependencyInsight --configuration compile --dependency test.nebula
test.nebula:a:1.0.0
variant "default" [
org.gradle.status = release (not requested)
]
Selection reasons:
- Was requested
- Selected by rule : aligned to 1.0.0 by rules
with reasons: nebula.resolution-rules uses: rules.json
test.nebula:a:1.0.0
\--- compile
test.nebula:b:1.0.0
variant "default" [
org.gradle.status = release (not requested)
]
Selection reasons:
- Was requested
- Selected by rule : aligned to 1.0.0 by rules
with reasons: nebula.resolution-rules uses: rules.json
test.nebula:b:0.15.0 -> 1.0.0
\--- compile
test.nebula:c:1.0.0
variant "default" [
org.gradle.status = release (not requested)
]
test.nebula:c:1.0.0
\--- compile
With gradle core based implementation module a
is brought down by a rule and it causes misaligned group.
Call: ./gradlew dependencyInsight --configuration compile --dependency test.nebula -Dnebula.features.coreAlignmentSupport=true
test.nebula:a:0.15.0
variant "default" [
org.gradle.status = release (not requested)
]
Selection reasons:
- Was requested
- By constraint : belongs to platform aligned-platform:rules-0:1.0.0
- Selected by rule
test.nebula:a:1.0.0 -> 0.15.0
\--- compile
test.nebula:b:1.0.0
variant "default" [
org.gradle.status = release (not requested)
]
Selection reasons:
- Was requested
- By constraint : belongs to platform aligned-platform:rules-0:1.0.0
- By conflict resolution : between versions 0.15.0 and 1.0.0
test.nebula:b:0.15.0 -> 1.0.0
\--- compile
test.nebula:c:1.0.0
variant "default" [
org.gradle.status = release (not requested)
]
Selection reasons:
- Was requested
- By constraint : belongs to platform aligned-platform:rules-0:1.0.0
test.nebula:c:1.0.0
\--- compile
Interaction between substitution and alignment
I have a rule which should align guice and I have a rule which should bring guice to 4.1.0 if it is 4.2.+. When I run this ./gradlew dI --dependency guice --configuration compile
I'm getting:
> Task :dependencyInsight
com.google.inject:guice:4.2.1
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By constraint : belongs to platform aligned-platform:guice:4.2.1
- Selected by rule
- By conflict resolution : between versions 4.2.1 and 4.1.0
com.google.inject:guice:4.2.1
\--- com.google.inject.extensions:guice-grapher:4.2.1 (conflict resolution between versions 4.1.0 and 4.2.1)
+--- sample:module:1.0
| \--- compile
\--- compile
com.google.inject:guice:4.1.0 -> 4.2.1
\--- com.google.inject.extensions:guice-assistedinject:4.1.0
+--- com.google.inject.extensions:guice-grapher:4.2.1 (conflict resolution between versions 4.1.0 and 4.2.1)
| +--- sample:module:1.0
| | \--- compile
| \--- compile
\--- compile
com.google.inject:guice:4.+ -> 4.2.1
\--- compile
com.google.inject.extensions:guice-assistedinject:4.1.0
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By constraint : belongs to platform aligned-platform:guice:4.2.1
- Selected by rule
com.google.inject.extensions:guice-assistedinject:4.2.1 -> 4.1.0
\--- com.google.inject.extensions:guice-grapher:4.2.1 (conflict resolution between versions 4.1.0 and 4.2.1)
+--- sample:module:1.0
| \--- compile
\--- compile
com.google.inject.extensions:guice-grapher:4.2.1
variant "runtime" [
org.gradle.status = release (not requested)
org.gradle.usage = java-runtime (not requested)
org.gradle.component.category = library (not requested)
]
Selection reasons:
- By constraint : belongs to platform aligned-platform:guice:4.2.1
- Selected by rule
- By conflict resolution : between versions 4.1.0 and 4.2.1
com.google.inject.extensions:guice-grapher:4.1.0 -> 4.2.1
\--- sample:module:1.0
\--- compile
(*) - dependencies omitted (listed previously)
A web-based, searchable dependency report is available by adding the --scan option.
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed
I would assume that all guice libraries should be at 4.1.0. Here is the full sample https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/alignment-substitution-missalignment
Not aligned jetty libraries in interaction with bom and force
After running our tests I discovered the following issue (more than 100 projects affected)
We apply our BOM to all configurations including configurations created by Gretty plugin. It has a configuration with dependencies for each server it provides. One of them is Jetty 8. The plugin forces a specific version of jetty libraries in those configurations. Our BOM contains a higher version of Jetty. I see most of all libraries forced down except jetty-util. I would expect all versions same because of alignment rule.
./gradlew dependencies --configuration grettyRunnerJetty8
Results to:
grettyRunnerJetty8
+--- example:bom:1.0
| +--- org.eclipse.jetty:jetty-io:9.2.12.v20150709 -> 8.1.8.v20121106
| +--- org.eclipse.jetty:jetty-xml:9.2.12.v20150709 -> 8.1.8.v20121106
| \--- org.eclipse.jetty:jetty-util:9.2.12.v20150709
\--- org.gretty:gretty-runner-jetty8:2.1.0
+--- org.gretty:gretty-runner-jetty:2.1.0
| \--- org.gretty:gretty-runner:2.1.0
| +--- org.codehaus.groovy:groovy:2.4.13
| +--- org.codehaus.groovy:groovy-json:2.4.13
| | \--- org.codehaus.groovy:groovy:2.4.13
| +--- commons-cli:commons-cli:1.2
| +--- commons-io:commons-io:2.4
| \--- ch.qos.logback:logback-classic:1.1.3
| +--- ch.qos.logback:logback-core:1.1.3
| \--- org.slf4j:slf4j-api:1.7.7
+--- javax.servlet:javax.servlet-api:3.0.1
+--- org.eclipse.jetty:jetty-server:8.1.8.v20121106
| +--- org.eclipse.jetty:jetty-continuation:8.1.8.v20121106
| \--- org.eclipse.jetty:jetty-http:8.1.8.v20121106
| \--- org.eclipse.jetty:jetty-io:8.1.8.v20121106
+--- org.eclipse.jetty:jetty-servlet:8.1.8.v20121106
| \--- org.eclipse.jetty:jetty-security:8.1.8.v20121106
| \--- org.eclipse.jetty:jetty-server:8.1.8.v20121106 (*)
+--- org.eclipse.jetty:jetty-webapp:8.1.8.v20121106
| +--- org.eclipse.jetty:jetty-xml:8.1.8.v20121106
| \--- org.eclipse.jetty:jetty-servlet:8.1.8.v20121106 (*)
+--- org.eclipse.jetty:jetty-security:8.1.8.v20121106 (*)
+--- org.eclipse.jetty:jetty-jsp:8.1.8.v20121106
| +--- org.eclipse.jetty.orbit:javax.servlet.jsp:2.2.0.v201112011158
| +--- org.eclipse.jetty.orbit:org.apache.jasper.glassfish:2.2.2.v201112011158
| | \--- org.eclipse.jetty.orbit:javax.servlet.jsp:2.2.0.v201112011158
| +--- org.eclipse.jetty.orbit:javax.servlet.jsp.jstl:1.2.0.v201105211821
| | \--- org.eclipse.jetty.orbit:javax.servlet.jsp:2.1.0.v201105211820 -> 2.2.0.v201112011158
| +--- org.eclipse.jetty.orbit:org.apache.taglibs.standard.glassfish:1.2.0.v201112081803
| | \--- org.eclipse.jetty.orbit:javax.servlet.jsp.jstl:1.2.0.v201105211821 (*)
| +--- org.eclipse.jetty.orbit:javax.el:2.2.0.v201108011116
| +--- org.eclipse.jetty.orbit:com.sun.el:2.2.0.v201108011116
| \--- org.eclipse.jetty.orbit:org.eclipse.jdt.core:3.7.1
+--- org.eclipse.jetty:jetty-annotations:8.1.8.v20121106
| +--- org.eclipse.jetty:jetty-plus:8.1.8.v20121106
| | +--- org.eclipse.jetty.orbit:javax.transaction:1.1.1.v201105210645
| | +--- org.eclipse.jetty:jetty-webapp:8.1.8.v20121106 (*)
| | \--- org.eclipse.jetty:jetty-jndi:8.1.8.v20121106
| | +--- org.eclipse.jetty:jetty-server:8.1.8.v20121106 (*)
| | \--- org.eclipse.jetty.orbit:javax.mail.glassfish:1.4.1.v201005082020
| | \--- org.eclipse.jetty.orbit:javax.activation:1.1.0.v201105071233
| +--- org.eclipse.jetty:jetty-webapp:8.1.8.v20121106 (*)
| +--- org.eclipse.jetty.orbit:javax.annotation:1.1.0.v201108011116
| \--- org.eclipse.jetty.orbit:org.objectweb.asm:3.1.0.v200803061910
\--- org.eclipse.jetty:jetty-plus:8.1.8.v20121106 (*)
This is not aligned down org.eclipse.jetty:jetty-util:9.2.12.v20150709
. Also, it is interesting that there is no actual usage shown in the result the only definition in BOM. jetty-util
is actually brought by jetty-xml
or jetty-io
but that is not shown.
Here is the full example project: https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/not-aligned-jetty
If I remove recommendation grettyRunnerJetty8 platform('example:bom:1.0')
from build file. I'm getting the right result.
It works even if I try to sneak higher version directly like this grettyRunnerJetty8 'org.eclipse.jetty:jetty-util:9.2.12.v20150709'
Dependency insight: show 'critical path' in conflict resolution
Introduction
This is a request related to issue #9
When running dependencyInsight
, a second-order contributor now shows it is conflict resolved, and it does this with --singlepath
, as well.
However, for both the full dependencyInsight
as well as the less noisy --singlepath
, the 'critical path' or 'effective path' to the dependency that originally requested the conflict-resolved version does not stand out. It is useful to know who has introduced this dependency so that it may be dealt with when required.
Scenario
Given a build file with simplified dependencies in a local repo:
repositories {
maven { url { 'repo' } }
}
dependencies {
compile 'planet:earth:3.0.0'
compile 'planet:mars:4.0.0'
compile 'planet:jupiter:5.0.0'
}
with dependencies represented as
> Task :dependencies
compile
+--- planet:earth:3.0.0
| \--- planet:venus:2.0.0 -> 2.0.1
| \--- planet:mercury:1.0.1 -> 1.0.2
+--- planet:mars:4.0.0
| \--- planet:venus:2.0.1 (*)
\--- planet:jupiter:5.0.0
\--- planet:mercury:1.0.2
when I run ./gradlew dependencyInsight --dependency mercury
or ./gradlew dependencyInsight --dependency mercury --singlepath
with Gradle 4.11-20180816235912+0000
then I would expect to see an information that second-order dependencies have been conflict resolved with emphasis on the critical contributor
Note: See full output below
Example Project
Please see the whole example project at dependency-insight/docs/misc/second-order-contributor/input
Current output for reference
- Tasks: dependencyInsight --dependency mercury
> Task :dependencyInsight
planet:mercury:1.0.2
Selection reasons:
- By conflict resolution : between versions 1.0.2 and 1.0.1
planet:mercury:1.0.2
\--- planet:jupiter:5.0.0
\--- compileClasspath
planet:mercury:1.0.1 -> 1.0.2
\--- planet:venus:2.0.1 (conflict resolution between versions 2.0.0 and 2.0.1)
+--- planet:earth:3.0.0
| \--- compileClasspath
\--- planet:mars:4.0.0
\--- compileClasspath
Where it is not clear which of earth
or mars
is the critical contributor of the conflict-resolved dependency
- Tasks: dependencyInsight --dependency mercury --singlepath
> Task :dependencyInsight
planet:mercury:1.0.2
Selection reasons:
- By conflict resolution : between versions 1.0.2 and 1.0.1
planet:mercury:1.0.2
\--- planet:jupiter:5.0.0
\--- compileClasspath
planet:mercury:1.0.1 -> 1.0.2
\--- planet:venus:2.0.1 (conflict resolution between versions 2.0.0 and 2.0.1)
\--- planet:earth:3.0.0
\--- compileClasspath
However earth
is not the original requester of this dependency version, as seen below
- Tasks: dependencyInsight --dependency venus
> Task :dependencyInsight
planet:venus:2.0.1
Selection reasons:
- By conflict resolution : between versions 2.0.0 and 2.0.1
planet:venus:2.0.1
\--- planet:mars:4.0.0
\--- compileClasspath
planet:venus:2.0.0 -> 2.0.1
\--- planet:earth:3.0.0
\--- compileClasspath
Deprecated libraries - Modules deprecated outside of .module file are not resolving correctly
The lifecycle plugin dependency-management-sample contains a demo on how modules can be selected based on their lifecycle status of alive, deprecated, or blacklisted.
In the demo, these attributes are added in the dependency's .module
file.
Upon publishing, modules are not going to list themselves with a deprecated or blacklisted lifecycle, so I want to see what this looks like when these attributes are updated later (as through from an external service). There are some unexpected results in plugin-deprecation-insight-[alive/deprecated].sample.out
in the fork dependency-management-samples with an update where the highest version available is requested, and then the build fails.
What else needs to be done to resolve the dependency when the attributes are updated outside of the module metadata?
Dependency is downgraded and breaks alignment
With core alignment implementation I see this com.amazonaws:aws-java-sdk-kms:1.11.315 -> 1.11.251
with nebula implementation it is com.amazonaws:aws-java-sdk-kms:1.11.315
. The rule for alignment has following patern.
{
"name": "align-aws-java-sdk",
"group": "com.amazonaws",
"includes": ["aws-java-sdk", "aws-java-sdk-.*"],
"excludes": ["aws-java-sdk-(handwritten-samples|sample-extractor|samples-pom|generated-samples|samples|archetype|swf-libraries)"],
"reason": "Align AWS Java SDK libraries",
"author": "Danny Thomas <[email protected]>",
"date": "2016-04-28T22:31:14.321Z"
}
The whole project example project: https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/alignment-broken-by-downgrade-from-spring-bom
I guess it boils down to this issue #11. I wanted to highlight this case because it involves spring recommendations and there might a difference in opinions who should be the last.
Commands to reproduce
./gradlew -Dnebula.features.coreAlignmentSupport=true dependencies --configuration compile
compile - Dependencies for source set 'main' (deprecated, use 'implementation' instead).
\--- org.springframework.cloud:spring-cloud-aws-core -> 2.0.0.RC1
+--- org.springframework:spring-beans:5.0.5.RELEASE
| \--- org.springframework:spring-core:5.0.5.RELEASE
| \--- org.springframework:spring-jcl:5.0.5.RELEASE
+--- org.springframework:spring-aop:5.0.5.RELEASE
| +--- org.springframework:spring-beans:5.0.5.RELEASE (*)
| \--- org.springframework:spring-core:5.0.5.RELEASE (*)
+--- com.amazonaws:aws-java-sdk-core:1.11.251 -> 1.11.315
| +--- org.apache.httpcomponents:httpclient:4.5.5
| | +--- org.apache.httpcomponents:httpcore:4.4.9
| | \--- commons-codec:commons-codec:1.10
| +--- software.amazon.ion:ion-java:1.0.2
| +--- com.fasterxml.jackson.core:jackson-databind:2.6.7.1 -> 2.9.3
| | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0
| | \--- com.fasterxml.jackson.core:jackson-core:2.9.3
| +--- com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.6.7 -> 2.9.3
| | \--- com.fasterxml.jackson.core:jackson-core:2.9.3
| \--- joda-time:joda-time:2.8.1
+--- com.amazonaws:aws-java-sdk-s3:1.11.251 -> 1.11.315
| +--- com.amazonaws:aws-java-sdk-kms:1.11.315 -> 1.11.251
| | +--- com.amazonaws:aws-java-sdk-core:1.11.251 -> 1.11.315 (*)
| | \--- com.amazonaws:jmespath-java:1.11.251
| | \--- com.fasterxml.jackson.core:jackson-databind:2.6.7.1 -> 2.9.3 (*)
| +--- com.amazonaws:aws-java-sdk-core:1.11.315 (*)
| \--- com.amazonaws:jmespath-java:1.11.315 -> 1.11.251 (*)
+--- com.amazonaws:aws-java-sdk-ec2:1.11.251 -> 1.11.315
| +--- com.amazonaws:aws-java-sdk-core:1.11.315 (*)
| \--- com.amazonaws:jmespath-java:1.11.315 -> 1.11.251 (*)
+--- com.amazonaws:aws-java-sdk-cloudformation:1.11.251 -> 1.11.315
| +--- com.amazonaws:aws-java-sdk-core:1.11.315 (*)
| \--- com.amazonaws:jmespath-java:1.11.315 -> 1.11.251 (*)
\--- org.slf4j:slf4j-api:1.7.25
./gradlew -Dnebula.features.coreAlignmentSupport=false dependencies --configuration compile
compile - Dependencies for source set 'main' (deprecated, use 'implementation' instead).
\--- org.springframework.cloud:spring-cloud-aws-core -> 2.0.0.RC1
+--- org.springframework:spring-beans:5.0.5.RELEASE
| \--- org.springframework:spring-core:5.0.5.RELEASE
| \--- org.springframework:spring-jcl:5.0.5.RELEASE
+--- org.springframework:spring-aop:5.0.5.RELEASE
| +--- org.springframework:spring-beans:5.0.5.RELEASE (*)
| \--- org.springframework:spring-core:5.0.5.RELEASE (*)
+--- com.amazonaws:aws-java-sdk-core:1.11.251 -> 1.11.315
| +--- org.apache.httpcomponents:httpclient:4.5.5
| | +--- org.apache.httpcomponents:httpcore:4.4.9
| | \--- commons-codec:commons-codec:1.10
| +--- software.amazon.ion:ion-java:1.0.2
| +--- com.fasterxml.jackson.core:jackson-databind:2.6.7.1 -> 2.9.3
| | +--- com.fasterxml.jackson.core:jackson-annotations:2.9.0 -> 2.9.3
| | \--- com.fasterxml.jackson.core:jackson-core:2.9.3
| +--- com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.6.7 -> 2.9.3
| | \--- com.fasterxml.jackson.core:jackson-core:2.9.3
| \--- joda-time:joda-time:2.8.1
+--- com.amazonaws:aws-java-sdk-s3:1.11.251 -> 1.11.315
| +--- com.amazonaws:aws-java-sdk-kms:1.11.315
| | +--- com.amazonaws:aws-java-sdk-core:1.11.315 (*)
| | \--- com.amazonaws:jmespath-java:1.11.315 -> 1.11.251
| | \--- com.fasterxml.jackson.core:jackson-databind:2.6.7.1 -> 2.9.3 (*)
| +--- com.amazonaws:aws-java-sdk-core:1.11.315 (*)
| \--- com.amazonaws:jmespath-java:1.11.315 -> 1.11.251 (*)
+--- com.amazonaws:aws-java-sdk-ec2:1.11.251 -> 1.11.315
| +--- com.amazonaws:aws-java-sdk-core:1.11.315 (*)
| \--- com.amazonaws:jmespath-java:1.11.315 -> 1.11.251 (*)
+--- com.amazonaws:aws-java-sdk-cloudformation:1.11.251 -> 1.11.315
| +--- com.amazonaws:aws-java-sdk-core:1.11.315 (*)
| \--- com.amazonaws:jmespath-java:1.11.315 -> 1.11.251 (*)
\--- org.slf4j:slf4j-api:1.7.25
Component metadata rules are not invoked for project dependencies if they are present in buildscript classpath
When I have a dependency in a project and the same dependency in buildscript classpath component metadata rules are not invoked for that dependency
Run gw dependencies --info
You won't see Hello from junit:junit:4.12
Example project: https://github.com/nebula-plugins/gradle-nebula-integration/tree/master/attributesAndBuildScriptClasspath
Native lock and IDE integration
IntelliJ IDEA is usually trying to refresh a project after a build file update. When you update a dependency and don't write the change into lock file, gradle fails that there is a mismatch between lock file and build file. Those two features together are causing a poor user experience because after the dependency update IDE calls Gradle which fails and project refresh fails.
Prefer declaration is inconsistent for usage vs publishing
Tracking gradle/gradle#7046
Related to prefer
configuration allowing separate or together dependency declaration for local dependency resolution, but requiring only separate configuration for publishing preferred version propagation.
Build-scans plugin 1.x breaks with gradle 5
Hi folks,
I noticed the following error when using build scans plugin 1.x
java.lang.NoClassDefFoundError: org/gradle/internal/operations/notify/BuildOperationNotificationListener2
at com.gradle.scan.plugin.internal.i.i.a(SourceFile:19)
at com.gradle.scan.plugin.internal.i.g.a(SourceFile:45)
at com.gradle.scan.plugin.internal.i.g.a(SourceFile:25)
at com.gradle.scan.plugin.BuildScanPlugin.a(SourceFile:448)
at com.gradle.scan.plugin.BuildScanPlugin.a(SourceFile:416)
at com.gradle.scan.plugin.BuildScanPlugin.apply(SourceFile:257)
at com.gradle.scan.plugin.BuildScanPlugin.apply(SourceFile:130)
at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:42)
at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:50)
Looks like the change was introduced on this pull request -> https://github.com/gradle/gradle/pull/7023/files
I guess is expected that gradle 5 uses build-scans 2.+ ?
Right now we can't introduce this RC as part of our workflow because it would break backwards compatibility since build scans 2.x is not compatible with Gradle 5. Specially if we introduce this in nebula plugin-plugin which is the base for multiple plugins and also provides build scan to projects using nebula
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.