Code Monkey home page Code Monkey logo

gradle-resolution-rules-plugin's People

Contributors

chali avatar danielthomas avatar emccallum avatar nadavc avatar odysseuslives avatar quidryan avatar remy-tiitre avatar rpalcolea avatar rspieldenner avatar sghill avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gradle-resolution-rules-plugin's Issues

Improve logging

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.

Support version patterns for determining which part of the version to align against and compare

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.

Allow rules to override other rules.

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.

Deny rule with wild card is not supported

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"
}
]
}

Support a minimum version

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.

Better way to simply force a dependency

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"
    },
]

Support Multi-Pass Alignment

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)

DefaultModuleIdentifier seems to create an issue

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.

Deny rule shows exception multiple times

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

The plugin does not seem to work with multi-level projects

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

Replace <version>-android with <version>-jre

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.

Exclude rules must be applied outside beforeResolve

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.

Conflict with Gradle kotlin-dsl plugin

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)

Improve interaction with forces for alignment rules

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 bundled dependencies

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.

ear project dependencies task StackOverflowError

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...)

NoSuchMethodError when applying any rules

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

Provide exclusion rule

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).

Gradle 4.10.2 and new IMPROVED_POM_SUPPORT and gradle lint

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

Support dynamic versions in forces, if possible

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.

Rules not applied to compileClasspath configuration

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.

There seems to be an issue on Gradle 8.1.1 and init scripts

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.+")

Nebula - Spring Boot 2 (potential issue)

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

screen shot 2018-02-22 at 4 49 00 pm

I haven't dig into the details on what's happening while trying to resolved dependencies of detachedConfiguration.

Any suggestion for this?

Thanks

project dependencies

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.

JDK 13+ Compatibility

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.