瀏覽代碼

Add Gradle Lock Plugin

Issue gh-7788
Rob Winch 5 年之前
父節點
當前提交
1bb1e74a9d

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

+ 4 - 0
buildSrc/build.gradle

@@ -10,6 +10,10 @@ gradlePlugin {
 			id = "trang"
 			implementationClass = "trang.TrangPlugin"
 		}
+		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();
+				}
+			}
+		});
+	}
+}

+ 4 - 0
gradle/dependency-management.gradle

@@ -117,3 +117,7 @@ dependencies {
 		management "org.thymeleaf:thymeleaf-spring5:3.0.11.RELEASE"
 	}
 }
+
+dependencyLocking {
+	lockAllConfigurations()
+}