Add Gradle Lock Plugin

Issue gh-7788
This commit is contained in:
Rob Winch 2019-12-16 10:45:15 -06:00
parent 06d7443946
commit 1bb1e74a9d
5 changed files with 65 additions and 0 deletions

View File

@ -11,6 +11,7 @@ buildscript {
}
}
apply plugin: 'io.spring.nohttp'
apply plugin: 'locks'
apply plugin: 'io.spring.convention.root'
group = 'org.springframework.security'

View File

@ -10,6 +10,10 @@ gradlePlugin {
id = "trang"
implementationClass = "trang.TrangPlugin"
}
locks {
id = "locks"
implementationClass = "lock.GlobalLockPlugin"
}
}
}

View File

@ -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");
});
}
}

View File

@ -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();
}
}
});
}
}

View File

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