nebula-plugins / gradle-resolution-rules-plugin Goto Github PK
View Code? Open in Web Editor NEWGradle plugin for providing reusable dependency resolution rules.
License: Apache License 2.0
Gradle plugin for providing reusable dependency resolution rules.
License: Apache License 2.0
We don't have much logging currently, making it difficult to troubleshoot issues with the plugin. We should at least report active rules sources, the number of each type of rule, etc.
Libraries like Jackson have modules that release at difference cadences from the core libraries, either running behind, or ahead on patch releases making it impossible to align by highest version.
In the case of Jackson, everything seems to keep step, but modules that have seen patches that would be problematic for alignment are:
The idea is to support a regular expression pattern that determines how the version is compared for alignment.
I would like to create an alignment rule between some internal libraries and io.grpc
libraries. It doesn't make much sense to pollute the public alignment rule with cruft specific to our internal libraries. OTOH, currently, creating an internal rule will create non-determinism or conflicts with the public rule.
Ideally, I should be able to create the internal rule and have it tell the gradle-resolution-rules-plugin
that it overrides the public rule.
I would like to deny builds with any example-common major minor 2.0 version as as example below, I see that currently deny rule only allows exact matched version in the module, Is there any way I can use wild card.
Thanks
{
"deny": [
{
"module": "com.examplee:example-common:2.0.+",
"reason": "this is bad version",
"author": "Kamesh",
"date": "2018-03-07"
}
]
}
It's common to have a minimum version that is acceptable. If a module has too low of a version the plugin could bring it up to the minimum.
We originally thought this was safe, but first orders can be denied.
Using include
instead of includes
on rules definitions caused problems, we need to expand validation.
We need to fail when we get unresolvable dependencies to prevent this from happening.
include
is confusing because it suggests that included rules are exclusive.
We're seeing resolution of the copied configurations for tasks that don't require it.
Provide the same flexibility that align rules have to the other rule types that can apply to more than one module.
I am surprised that there is no rule type to simply force a specific version of a transitive dependency. I know I can achieve this with:
substitute": [
{
"module" : "org.myorg.group:myartifact",
"with" : "org.myorg.group:myartifact:2.1.2",
"reason" : "blabla",
"author" : "me",
"date" : "2019-06-14"
},
]
but, it looks a bit not straight forward, why do I have to specify the GAV coordinate twice when I simply want to force 2.1.2 there?
Also, I would like to propose another feature. In align rules you have the attribute "includes" which allow formats like:
"includes": ["springfox-(bean-validators|core|schema|spi|spring-web|swagger-common|swagger-ui|swagger2|)"],
why don't you support the same syntax in more attributes, like the previous "substitute", so you can have something like:
substitute": [
{
"module" : "org.myorg.group:(myartifact|myartifact2|myartifact3)",
"with" : "org.myorg.group:(myartifact|myartifact2|myartifact3):2.1.2",
"reason" : "blabla",
"author" : "me",
"date" : "2019-06-14"
},
]
A situation can arise with resolution rules where a dependency is aligned up, but its transitive dependencies are aligned down.
+ project
|
+-- A.A (v1) -> aligned up to v2 through an alignment rule
| |
| +-- B.B (v2) -> aligned down to v1 because that's the highest version already seen
|
+-- B.C (v1)
For instance, jackson-databind
2.8.8.1 will currently be aligned down to 2.8.8.
When I upgrade the plugin to 7.8.2 I get following error:
Cause 39: org.gradle.internal.typeconversion.UnsupportedNotationException: Cannot convert the provided notation to an object of type ModuleIdentifier: javax.annotation:javax.annotation-api:1.+.
The following types/formats are supported:
- Instances of ModuleIdentifier.
- String describing the module in 'group:name' format, for example 'org.gradle:gradle-core'.
at org.gradle.internal.typeconversion.ErrorHandlingNotationParser.parseNotation(ErrorHandlingNotationParser.java:57)
at org.gradle.api.internal.artifacts.dsl.ComponentModuleMetadataContainer$1.replacedBy(ComponentModuleMetadataContainer.java:59)
at nebula.plugin.resolutionrules.ReplaceRule$apply$1.execute(rules.kt:119)
at nebula.plugin.resolutionrules.ReplaceRule$apply$1.execute(rules.kt:102)
at org.gradle.api.internal.artifacts.dsl.DefaultComponentModuleMetadataHandler.module(DefaultComponentModuleMetadataHandler.java:33)
at nebula.plugin.resolutionrules.ReplaceRule.apply(rules.kt:116)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$apply$2$$special$$inlined$onExecute$1.execute(projects.kt:22)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$apply$2$$special$$inlined$onExecute$1.execute(projects.kt)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext$CurrentApplication$1.execute(DefaultUserCodeApplicationContext.java:100)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.run(DefaultListenerBuildOperationDecorator.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction.execute(DefaultListenerBuildOperationDecorator.java:150)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:95)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:83)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:43)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:245)
at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:157)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:61)
at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:346)
at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:249)
at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:141)
at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at com.sun.proxy.$Proxy48.afterEvaluate(Unknown Source)
at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:183)
at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:180)
at org.gradle.api.internal.project.DefaultProject.stepEvaluationListener(DefaultProject.java:1465)
at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:189)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.lambda$run$0(LifecycleProjectEvaluator.java:105)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:250)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$withProjectLock$3(DefaultProjectStateRegistry.java:310)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:213)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:310)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:291)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:249)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:91)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:63)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:721)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:151)
at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:41)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:67)
at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:46)
at org.gradle.configuration.BuildTreePreparingProjectsPreparer.prepareProjects(BuildTreePreparingProjectsPreparer.java:56)
at org.gradle.configuration.BuildOperationFiringProjectsPreparer$ConfigureBuild.run(BuildOperationFiringProjectsPreparer.java:52)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
at org.gradle.configuration.BuildOperationFiringProjectsPreparer.prepareProjects(BuildOperationFiringProjectsPreparer.java:40)
at org.gradle.initialization.DefaultGradleLauncher.prepareProjects(DefaultGradleLauncher.java:226)
at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:163)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:148)
at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:124)
at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:72)
at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:67)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:213)
at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:67)
at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:56)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:77)
at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:49)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:44)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.lambda$execute$0(InProcessBuildActionExecuter.java:54)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:86)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:53)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:29)
at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.lambda$execute$0(BuildTreeScopeLifecycleBuildActionExecuter.java:33)
at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:49)
at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:32)
at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:27)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:104)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:55)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:64)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:37)
at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.lambda$execute$0(SessionScopeLifecycleBuildActionExecuter.java:54)
at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:67)
at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:50)
at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:36)
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.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:55)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
at org.gradle.util.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.base/java.lang.Thread.run(Thread.java:834)
I know similar error was there long time ago with ModuleIdentifier, it seems it is back with DefaultModuleIdentifier
And 7.8.1 works fine.
Gradle prevents configurations with the same name for a same project / configuration container. This plugin uses reflection to bypass that. This causes different problems within gradle builds
configurations.all { c -> tasks.create("resolve${c.name}")}
Reproduced in https://github.com/nadavc/repro-rules-exceptions
$ gw build
Using gradle at '/Users/ncohen/dev/tests/repro/gradlew' to run buildfile '/Users/ncohen/dev/tests/repro/build.gradle':
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring root project 'repro'.
> Failed to notify project evaluation listener.
> Dependency org.slf4j:slf4j-api denied by dependency rule: reproducing bug
> Dependency org.slf4j:slf4j-api denied by dependency rule: reproducing bug
> Dependency org.slf4j:slf4j-api denied by dependency rule: reproducing bug
> Dependency org.slf4j:slf4j-api denied by dependency rule: reproducing bug
> Dependency org.slf4j:slf4j-api denied by dependency rule: reproducing bug
> Dependency org.slf4j:slf4j-api denied by dependency rule: reproducing bug
> Dependency org.slf4j:slf4j-api denied by dependency rule: reproducing bug
> Dependency org.slf4j:slf4j-api denied by dependency rule: reproducing bug
> Dependency org.slf4j:slf4j-api denied by dependency rule: reproducing bug
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
I've used the plugin in a single-project setting and it works. Tried the same thing in a multi-project setting directly in a subproject, and it doesn't work.
Stack trace:
> Could not find method resolutionRules() for arguments [file collection] on org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@66f16742.
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'chronos-example'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:155)
at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:72)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:160)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:38)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:25)
at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:532)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:93)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:42)
at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
at org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:125)
at org.gradle.internal.Factories$1.create(Factories.java:22)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:122)
at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:75)
at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:45)
at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:170)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
at org.gradle.launcher.Main.doAction(Main.java:33)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:56)
Caused by: org.gradle.api.internal.MissingMethodException: Could not find method resolutionRules() for arguments [file collection] on org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated@66f16742.
at org.gradle.api.internal.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:68)
at org.gradle.api.internal.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:56)
at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:175)
at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler_Decorated.invokeMethod(Unknown Source)
at build_bxbpbugxx6x4q243yt7wgguqi$_run_closure1$_closure2.doCall(/Users/lilyhendra/GitHubRepos/chronos-example/build.gradle:23)
at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:67)
at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:130)
at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:91)
at org.gradle.api.internal.project.AbstractProject.dependencies(AbstractProject.java:887)
at build_bxbpbugxx6x4q243yt7wgguqi$_run_closure1.doCall(/Users/lilyhendra/GitHubRepos/chronos-example/build.gradle:20)
at org.gradle.api.internal.ClosureBackedAction.execute(ClosureBackedAction.java:67)
at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:130)
at org.gradle.util.ConfigureUtil.configure(ConfigureUtil.java:91)
at org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:868)
at org.gradle.api.internal.project.AbstractProject.configure(AbstractProject.java:873)
at org.gradle.api.internal.project.AbstractProject.subprojects(AbstractProject.java:856)
at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:236)
at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:130)
at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:150)
at org.gradle.groovy.scripts.BasicScript.methodMissing(BasicScript.java:79)
at build_bxbpbugxx6x4q243yt7wgguqi.run(/Users/lilyhendra/GitHubRepos/chronos-example/build.gradle:16)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
... 50 more
I am currently using the following snippet in my build.gradle.kts
but would love to replace this with a rule for the plugin:
configurations.all {
resolutionStrategy {
eachDependency {
if (requested.group == "com.google.guava" && requested.version?.contains("-android") == true) {
useVersion(requested.version!!.replace("-android", "-jre"))
because("Android Guava lacks certain optimizations: https://github.com/google/guava/issues/2914")
}
}
}
}
I couldn't figure out how to do this based on the information available in the Wiki.
Applying exclude rules is causing:
Changed dependencies of configuration ':compileOnly' after it has been included in dependency resolution. This behaviour has been deprecated and is scheduled to be removed in Gradle 3.0. Use 'defaultDependencies' instead of 'beforeResolve' to specify default dependencies for a configuration.
That's because beforeResolve
only triggers before a configuration is resolved, however it's considered to have been included in dependency resolution when any of the configurations that it extends from have been resolved.
We need to apply some rules in afterEvaluate
, others in beforeResolve
.
When writing Gradle plugins that use Kotlin DSL there is a conflict w/ resolution-rules, resulting in this error:
Cannot change attributes of dependency configuration ':apiElements-published' after it has been resolved
The issue is related to the order of the plugins - changing kotlin-dsl to be following resolution-rules works. Considering this a workaround (at best) as it may not always be an option and indicates some underlying fragility.
This minimal build script reproduces the issue (build.gradle.kts)
plugins {
// if kotlin-dsl plugin is loaded first that results in this error:
// Cannot change attributes of dependency configuration ':apiElements-published' after it has been resolved
// flipping the order is works as expected
`kotlin-dsl`
id("nebula.resolution-rules") version "9.0.0"
}
repositories {
mavenCentral()
}
dependencies {
resolutionRules("com.netflix.nebula:gradle-resolution-rules:latest.release")
}
Reproducible on Gradle 7.1.1 thru 7.3.2 (earlier versions were not tested).
Reproducible on resolution-rules v9.0.0 (v8.0.0 works)
Reject rules currently perform an exact match, it'd be useful to be able to reject ranges of dependencies.
A force of a dependency that's covered by an align rule should result in that version winning, rather than the highest version, providing a simple way of having correctness, as well as the desired version.
Add support for bundling based on a group, or wildcard, so that dependencies in a given bundled are all aligned to the latest version in the graph.
Only dependencies
task face this error. Other tasks such as assemble
, clean
, build
, etc. run successfully. The same task using version 1.6.5
works fine though.
Gradle: 2.14
Java: 1.8.0_91
OS: MacOS 10.11.5
Machine: MacBook Pro 15' 2014
Run gradle dependencies -s
with the following build.gradle
plugins {
id "nebula.resolution-rules" version "1.7.1"
}
apply plugin:'ear'
dependencies {
resolutionRules "com.netflix.nebula:gradle-resolution-rules:0.26.0"
}
Output: -
:dependencies
------------------------------------------------------------
Root project
------------------------------------------------------------
archives - Configuration for archive artifacts.
:dependencies FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':dependencies'.
> Failed to notify dependency resolution listener.
> java.lang.StackOverflowError (no error message)
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':dependencies'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
(TRUNCATED...)
... 68 more
Caused by: java.lang.StackOverflowError
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.validateMutation(DefaultConfiguration.java:620)
at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$2.run(DefaultConfiguration.java:150)
at org.gradle.api.internal.DefaultDomainObjectCollection.assertMutable(DefaultDomainObjectCollection.java:267)
at org.gradle.api.internal.DefaultDomainObjectCollection.remove(DefaultDomainObjectCollection.java:208)
at org.gradle.api.internal.DelegatingDomainObjectSet.remove(DelegatingDomainObjectSet.java:109)
at org.gradle.api.internal.plugins.DefaultArtifactPublicationSet.replaceCurrent(DefaultArtifactPublicationSet.java:53)
at org.gradle.api.internal.plugins.DefaultArtifactPublicationSet.addCandidate(DefaultArtifactPublicationSet.java:42)
at org.gradle.api.plugins.BasePlugin$3$1.execute(BasePlugin.java:162)
at org.gradle.api.plugins.BasePlugin$3$1.execute(BasePlugin.java:160)
at org.gradle.listener.ActionBroadcast.execute(ActionBroadcast.java:39)
at org.gradle.api.internal.DefaultDomainObjectCollection.doAdd(DefaultDomainObjectCollection.java:165)
at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:159)
at org.gradle.api.internal.DelegatingDomainObjectSet.add(DelegatingDomainObjectSet.java:81)
at org.gradle.api.internal.plugins.DefaultArtifactPublicationSet.replaceCurrent(DefaultArtifactPublicationSet.java:54)
at org.gradle.api.internal.plugins.DefaultArtifactPublicationSet.addCandidate(DefaultArtifactPublicationSet.java:42)
at org.gradle.api.plugins.BasePlugin$3$1.execute(BasePlugin.java:162)
at org.gradle.api.plugins.BasePlugin$3$1.execute(BasePlugin.java:160)
at org.gradle.listener.ActionBroadcast.execute(ActionBroadcast.java:39)
at org.gradle.api.internal.DefaultDomainObjectCollection.doAdd(DefaultDomainObjectCollection.java:165)
at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:159)
at org.gradle.api.internal.DelegatingDomainObjectSet.add(DelegatingDomainObjectSet.java:81)
at org.gradle.api.internal.plugins.DefaultArtifactPublicationSet.replaceCurrent(DefaultArtifactPublicationSet.java:54)
at org.gradle.api.internal.plugins.DefaultArtifactPublicationSet.addCandidate(DefaultArtifactPublicationSet.java:42)
at org.gradle.api.plugins.BasePlugin$3$1.execute(BasePlugin.java:162)
at org.gradle.api.plugins.BasePlugin$3$1.execute(BasePlugin.java:160)
at org.gradle.listener.ActionBroadcast.execute(ActionBroadcast.java:39)
at org.gradle.api.internal.DefaultDomainObjectCollection.doAdd(DefaultDomainObjectCollection.java:165)
at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:159)
at org.gradle.api.internal.DelegatingDomainObjectSet.add(DelegatingDomainObjectSet.java:81)
at org.gradle.api.internal.plugins.DefaultArtifactPublicationSet.replaceCurrent(DefaultArtifactPublicationSet.java:54)
at org.gradle.api.internal.plugins.DefaultArtifactPublicationSet.addCandidate(DefaultArtifactPublicationSet.java:42)
at org.gradle.api.plugins.BasePlugin$3$1.execute(BasePlugin.java:162)
at org.gradle.api.plugins.BasePlugin$3$1.execute(BasePlugin.java:160)
(REPEAT...)
I'm trying to apply the plugin to a multiproject Gradle build in a shared Gradle file that all Java projects import. Applying the plugin doesn't cause errors (but does print warning about no found rules) but the addition of the standard rules via resolutionRules 'com.netflix.nebula:gradle-resolution-rules:latest.release'
creates the below method not found errors within Jackson. This seems like a chicken and the egg problem as I have to somehow figure out my dependencies within Gradle to get the dependency in my app together ๐
I've played around with trying to set the Jackson version but haven't had much luck yet. If anyone know another fix for this it would help greatly. Thanks in advance.
Failed to notify project evaluation listener.
com.fasterxml.jackson.databind.introspect.AnnotatedConstructor.getType()Lcom/fasterxml/jackson/databind/JavaType;
com.fasterxml.jackson.databind.introspect.AnnotatedConstructor.getType()Lcom/fasterxml/jackson/databind/JavaType;
... 12 more times.
Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.AnnotatedConstructor.getType()Lcom/fasterxml/jackson/databind/JavaType;
at com.fasterxml.jackson.module.kotlin.KotlinNamesAnnotationIntrospector.hasCreatorAnnotation(KotlinModule.kt:81)
at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.hasCreatorAnnotation(AnnotationIntrospectorPair.java:599)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addDeserializerConstructors(BasicDeserializerFactory.java:401)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:325)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:266)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:266)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:168)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:399)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:348)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:261)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:241)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:394)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3169)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3062)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2214)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin.parseJsonStream(plugin.kt:147)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin.rulesFromConfiguration(plugin.kt:94)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$ruleSet$2.invoke(plugin.kt:37)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$ruleSet$2.invoke(plugin.kt:30)
at kotlin.SynchronizedLazyImpl.getValue(Lazy.kt:131)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin.getRuleSet(plugin.kt)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$apply$1$1.execute(plugin.kt:64)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$apply$1$1.execute(plugin.kt:30)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:93)
at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:82)
at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:44)
... 61 more
I would volunteer to provide an exclusion rule if that makes sense to anyone except me.
Neither reject nor deny allow to just skip a dependency and remove it from the graph. The use case for this is to remove a certain (transitive) dependency that contains duplicate classes that are provided by another jar (or the jdk itself).
We should only call details.useVersion
if the version isn't already aligned with the prevailing version.
Make sure that the user has a report produced in the /build directory of the changes applies and the output notifies the user that a report is available.
We're seeing:
Resolution rule AlignRule ... is unable to honor match. EXCLUDE_SUFFIXES does not match 'latest.release'. Will use 'latest.release'
Any idea, what might be causing these kind of errors when I run autoLintGradle on a project where I use bom imports and gradle resolution rules plugin:
Resolution rules could not resolve all dependencies to align configuration ':lintExcludes':
- org.springframework.boot:spring-boot-starter-data-jpa:null -> org.springframework.boot:spring-boot-starter-data-jpa:null - Could not find org.springframework.boot:spring-boot-starter-data-jpa:null.
Resolution rules could not resolve all dependencies to align configuration ':lintExcludes':
- com.jayway.jsonpath:json-path:null -> com.jayway.jsonpath:json-path:null - Could not find com.jayway.jsonpath:json-path:null.
I have added enableFeaturePreview('IMPROVED_POM_SUPPORT') to settings.gradle
And to give some context I have outline some configuration from my build.gradle file. Its a lot more complicated offcouse as we are using init scripts and theres a lot more going on. And its multi project setup as well.
plugins {
id 'java'
id 'nebula.resolution-rules' version '7.0.4'
id 'nebula.lint' version '9.3.2'
id 'org.springframework.boot' version '2.0.6.RELEASE'
}
gradleLint {
rules = ['unused-exclude-by-dep']
}
dependencies {
resolutionRules 'com.netflix.nebula:gradle-resolution-rules:latest.release'
compile org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
implementation('org.springframework.boot:spring-boot-starter-data-jpa') {
exclude group: 'org.hibernate', module: 'hibernate-entitymanager'
}
}
Unfortunately I'm not able to pin it down to java source code or some transitive dependency that causes this. Using just this clean setup I provided here works fine. Maybe you have had similar issues or have suggestions how to debug it
It's valid to use a force on a dynamic version, such as 1.7+
to avoid being upgraded to a later version. We should allow for such a use case. Should also be possible to support ranges, but not sure about latest.*
versions.
Hi,
I'm trying to use the plugin in one of my projects and I noticed that while the rules are apllied to compile
configuration, they are ignored when the dependencies for compileClasspath
configuration are calculated.
E.g. for rule:
{
"substitute": [
{
"module" : "com.fasterxml.jackson.core:jackson-databind:2.8.11",
"with" : "com.fasterxml.jackson.core:jackson-databind:2.9.4",
}
]
}
I get (dependency tree):
compile - Dependencies for source set 'main'.
...
+--- com.fasterxml.jackson.core:jackson-databind:2.8.11 -> 2.9.4
but
compileClasspath - Compile classpath for source set 'main'.
...
+--- com.fasterxml.jackson.core:jackson-databind:2.8.11
Not sure whether I'm missing something or this is a bug.
Thanks in advance.
When I apply the plugin in my build script like this:
plugins {
id 'java-library'
id 'com.netflix.nebula.resolution-rules' version '10.2.0'
}
it works, but we apply the plugin in custom Gradle wrapper like this:
initscript {
dependencies {
classpath 'com.netflix.nebula:gradle-resolution-rules-plugin:10.2.0'
}
}
And this crashes with an error:
Could not resolve all files for configuration 'classpath'.
> Could not resolve com.fasterxml.jackson:jackson-bom:{strictly 2.9.10.20210106}.
Required by:
unspecified:unspecified:unspecified > com.netflix.nebula:gradle-resolution-rules-plugin:10.2.0
> Cannot find a version of 'com.fasterxml.jackson:jackson-bom' that satisfies the version constraints:
Dependency path 'unspecified:unspecified:unspecified' --> 'com.netflix.nebula:gradle-resolution-rules-plugin:10.2.0' (runtimeElements) --> 'com.fasterxml.jackson:jackson-bom:{strictly 2.9.10.20210106}'
...
Is there a reason why its enforcedPlatgorm?
implementation enforcedPlatform("com.fasterxml.jackson:jackson-bom:2.9.10.+")
It's pretty common to have one type of rules in a file, and if we add additional types of rules, it would render old rules incompatible.
We want to be able to produce a single artifact from https://github.com/nebula-plugins/gradle-resolution-rules that contains many rules sets, some of which are optional. Allow a rules file to be marked optional, and included by name. For instance, log4j-bridge.json
could be included via include 'log4j-bridge'
.
Hi!
I was trying to use the align rules in a spring boot 2 RC1 app and it goes into an infinite loop to determine the configurations.
Here is an example of what I'm doing -> https://github.com/rpalcolea/nebula-spring-conflict/blob/master/build.gradle#L43
And here is an example of my alignment -> https://github.com/rpalcolea/nebula-spring-conflict/blob/master/align-rules.json
If I take out spring boot out of the equation, the alignment works. I'm wondering if I'm doing something wrong or this is an issue between io.spring.dependency-management
and Nebula
I haven't dig into the details on what's happening while trying to resolved dependencies of detachedConfiguration.
Any suggestion for this?
Thanks
Here is a reproduction.
Run gradle check
on this. It will fail with the error in the title. If you remove the plugin from build.gradle
- it succeeds. Don't ask me why there are two subprojects and some crazy code in there - that's what I managed to narrow down the problem to. ๐
DenyRule
is currently using configuration.dependencies()
to match against dependencies. We should consider using configuration.allDependencies()
I've spent a few minutes with the plugin, and it seems to work for typical maven-style dependencies. For example, the com.acme:foo
dependency is denied (as intended) with this configuration:
"deny": [
{
"module": "com.acme:foo",
"reason" : "sibling dependency",
}
],
dependencies {
resolutionRules files('resolution-rules.json')
compile 'com.acme:foo'
}
But it does not deny the dependency if it is declared with project()
, like this:
dependencies {
resolutionRules files('resolution-rules.json')
compile project(':foo')
}
Is this support, or planned? Thanks.
I have a Gradle multi module setup where I apply the plugin exactly as shown in the README. Everything works with JDK 11 but if I switch to JDK 13 or 14 I get the following exception(s):
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':foo'.
// โฆ
Cause 1: java.lang.NoSuchFieldException: modifiers
at nebula.plugin.resolutionrules.ConfigurationsKt.setField(configurations.kt:66)
at nebula.plugin.resolutionrules.ConfigurationsKt.setName(configurations.kt:50)
at nebula.plugin.resolutionrules.ConfigurationsKt.copyConfiguration(configurations.kt:26)
at nebula.plugin.resolutionrules.NebulaResolutionRulesExtension$rulesByFile$2.invoke(plugin.kt:123)
at nebula.plugin.resolutionrules.NebulaResolutionRulesExtension$rulesByFile$2.invoke(plugin.kt:110)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at nebula.plugin.resolutionrules.NebulaResolutionRulesExtension.getRulesByFile(plugin.kt)
at nebula.plugin.resolutionrules.NebulaResolutionRulesExtension.ruleSet(plugin.kt:150)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$apply$1.execute(plugin.kt:80)
at nebula.plugin.resolutionrules.ResolutionRulesPlugin$apply$1.execute(plugin.kt:37)
at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1$1.run(DefaultCollectionCallbackActionDecorator.java:100)
// โฆ
Not sure where this stems from but it seems that this plugin is not compatible with JDK 13+ (I didn't test JDK 12). It should be fairly simple to reproduce, just create a project with a submodule and apply the plugin as stated in the README and try running ./gradlew tasks
.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.