diff --git a/build.gradle b/build.gradle index a4b0239..5edd923 100644 --- a/build.gradle +++ b/build.gradle @@ -11,6 +11,7 @@ buildscript { } apply plugin: 'io.spring.nohttp' +apply plugin: 'locks' apply plugin: 'io.spring.convention.root' group = 'org.springframework.security.experimental' diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle new file mode 100644 index 0000000..5e9de25 --- /dev/null +++ b/buildSrc/build.gradle @@ -0,0 +1,14 @@ +apply plugin: "java-gradle-plugin" + +repositories { + mavenCentral() +} + +gradlePlugin { + plugins { + locks { + id = "locks" + implementationClass = "lock.GlobalLockPlugin" + } + } +} diff --git a/buildSrc/src/main/java/lock/GlobalLockPlugin.java b/buildSrc/src/main/java/lock/GlobalLockPlugin.java new file mode 100644 index 0000000..955e73e --- /dev/null +++ b/buildSrc/src/main/java/lock/GlobalLockPlugin.java @@ -0,0 +1,16 @@ +package lock; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; + +/** + * @author Rob Winch + */ +public class GlobalLockPlugin implements Plugin { + @Override + public void apply(Project project) { + project.getTasks().register("writeLocks", GlobalLockTask.class, writeAll -> { + writeAll.setDescription("Writes the locks for all projects"); + }); + } +} diff --git a/buildSrc/src/main/java/lock/GlobalLockTask.java b/buildSrc/src/main/java/lock/GlobalLockTask.java new file mode 100644 index 0000000..20a8f8f --- /dev/null +++ b/buildSrc/src/main/java/lock/GlobalLockTask.java @@ -0,0 +1,40 @@ +package lock; + +import org.gradle.api.Action; +import org.gradle.api.DefaultTask; +import org.gradle.api.Project; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.tasks.TaskAction; + +import java.util.function.Consumer; + +/** + * @author Rob Winch + */ +public class GlobalLockTask extends DefaultTask { + @TaskAction + public void lock() { + Project taskProject = getProject(); + if (!taskProject.getGradle().getStartParameter().isWriteDependencyLocks()) { + throw new IllegalStateException("You just specify --write-locks argument"); + } + writeLocksFor(taskProject); + taskProject.getSubprojects().forEach(new Consumer() { + @Override + public void accept(Project subproject) { + writeLocksFor(subproject); + } + }); + } + + private void writeLocksFor(Project project) { + project.getConfigurations().configureEach(new Action() { + @Override + public void execute(Configuration configuration) { + if (configuration.isCanBeResolved()) { + configuration.resolve(); + } + } + }); + } +} diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index 20f8b46..478da46 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -10,6 +10,12 @@ if (!project.hasProperty("reactorVersion")) { ext.reactorVersion = "Dysprosium-SR+" } +if (!project.hasProperty("locksDisabled")) { + dependencyLocking { + lockAllConfigurations() + } +} + dependencyManagement { imports { mavenBom "org.springframework:spring-framework-bom:$springVersion"