CyclonedxPluginAction Class — spring-boot Architecture
Architecture documentation for the CyclonedxPluginAction class in CyclonedxPluginAction.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
build-plugin/spring-boot-gradle-plugin/src/main/java/org/springframework/boot/gradle/plugin/CyclonedxPluginAction.java lines 44–134
final class CyclonedxPluginAction implements PluginApplicationAction {
@Override
public Class<? extends Plugin<? extends Project>> getPluginClass() {
return CyclonedxPlugin.class;
}
@Override
public void execute(Project project) {
TaskProvider<CyclonedxAggregateTask> cycloneDxTaskProvider = project.getTasks()
.named("cyclonedxBom", CyclonedxAggregateTask.class);
configureCycloneDxTask(cycloneDxTaskProvider, project);
configureJavaPlugin(project, cycloneDxTaskProvider);
configureSpringBootPlugin(project, cycloneDxTaskProvider);
}
private void configureCycloneDxTask(TaskProvider<CyclonedxAggregateTask> taskProvider, Project project) {
taskProvider.configure((task) -> {
task.getProjectType().convention(Component.Type.APPLICATION);
task.getXmlOutput().unsetConvention();
task.getJsonOutput()
.convention(project.getLayout().getBuildDirectory().file("reports/cyclonedx/application.cdx.json"));
task.getIncludeLicenseText().convention(false);
});
}
private void configureJavaPlugin(Project project, TaskProvider<CyclonedxAggregateTask> cycloneDxTaskProvider) {
configurePlugin(project, JavaPlugin.class, (javaPlugin) -> {
JavaPluginExtension javaPluginExtension = project.getExtensions().getByType(JavaPluginExtension.class);
SourceSet main = javaPluginExtension.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME);
configureTask(project, main.getProcessResourcesTaskName(), Copy.class, (copy) -> {
copy.dependsOn(cycloneDxTaskProvider);
Provider<String> sbomFileName = cycloneDxTaskProvider.flatMap(
(cycloneDxTask) -> cycloneDxTask.getJsonOutput().map((file) -> file.getAsFile().getName()));
copy.from(cycloneDxTaskProvider,
(spec) -> spec.include((element) -> element.getName().equals(sbomFileName.get()))
.into("META-INF/sbom"));
});
});
}
private void configureSpringBootPlugin(Project project,
TaskProvider<CyclonedxAggregateTask> cycloneDxTaskProvider) {
configurePlugin(project, SpringBootPlugin.class, (springBootPlugin) -> {
configureBootJarTask(project, cycloneDxTaskProvider);
configureBootWarTask(project, cycloneDxTaskProvider);
});
}
private void configureBootJarTask(Project project, TaskProvider<CyclonedxAggregateTask> cycloneDxTaskProvider) {
configureTask(project, SpringBootPlugin.BOOT_JAR_TASK_NAME, BootJar.class,
(bootJar) -> configureBootJarTask(bootJar, cycloneDxTaskProvider));
}
private void configureBootWarTask(Project project, TaskProvider<CyclonedxAggregateTask> cycloneDxTaskProvider) {
configureTask(project, SpringBootPlugin.BOOT_WAR_TASK_NAME, BootWar.class,
(bootWar) -> configureBootWarTask(bootWar, cycloneDxTaskProvider));
}
private void configureBootJarTask(BootJar task, TaskProvider<CyclonedxAggregateTask> cycloneDxTaskProvider) {
configureJarTask(task, cycloneDxTaskProvider, "");
}
private void configureBootWarTask(BootWar task, TaskProvider<CyclonedxAggregateTask> cycloneDxTaskProvider) {
configureJarTask(task, cycloneDxTaskProvider, "WEB-INF/classes/");
}
private void configureJarTask(Jar task, TaskProvider<CyclonedxAggregateTask> cycloneDxTaskProvider,
String sbomLocationPrefix) {
Provider<String> sbomFileName = cycloneDxTaskProvider
.map((cycloneDxTask) -> "META-INF/sbom/" + cycloneDxTask.getJsonOutput().get().getAsFile().getName());
task.manifest((manifest) -> {
manifest.getAttributes().put("Sbom-Format", "CycloneDX");
manifest.getAttributes()
.put("Sbom-Location", sbomFileName.map((fileName) -> sbomLocationPrefix + fileName));
});
}
private <T extends Task> void configureTask(Project project, String name, Class<T> type, Action<T> action) {
project.getTasks().withType(type).configureEach((task) -> {
if (task.getName().equals(name)) {
action.execute(task);
}
});
}
private <T extends Plugin<?>> void configurePlugin(Project project, Class<T> plugin, Action<T> action) {
project.getPlugins().withType(plugin, action);
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free