Joe Grandja 5 жил өмнө
parent
commit
a401392bac

+ 1 - 0
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'

+ 14 - 0
buildSrc/build.gradle

@@ -0,0 +1,14 @@
+apply plugin: "java-gradle-plugin"
+
+repositories {
+	mavenCentral()
+}
+
+gradlePlugin {
+	plugins {
+		locks {
+			id = "locks"
+			implementationClass = "lock.GlobalLockPlugin"
+		}
+	}
+}

+ 16 - 0
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<Project> {
+	@Override
+	public void apply(Project project) {
+		project.getTasks().register("writeLocks", GlobalLockTask.class, writeAll -> {
+			writeAll.setDescription("Writes the locks for all projects");
+		});
+	}
+}

+ 40 - 0
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<Project>() {
+			@Override
+			public void accept(Project subproject) {
+				writeLocksFor(subproject);
+			}
+		});
+	}
+
+	private void writeLocksFor(Project project) {
+		project.getConfigurations().configureEach(new Action<Configuration>() {
+			@Override
+			public void execute(Configuration configuration) {
+				if (configuration.isCanBeResolved()) {
+					configuration.resolve();
+				}
+			}
+		});
+	}
+}

+ 6 - 0
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"