SchemaZipPlugin.groovy 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package io.spring.gradle.convention
  2. import org.gradle.api.Plugin
  3. import org.gradle.api.Project
  4. import org.gradle.api.plugins.JavaPlugin
  5. import org.gradle.api.tasks.bundling.Zip
  6. import org.springframework.gradle.xsd.CreateVersionlessXsdTask
  7. public class SchemaZipPlugin implements Plugin<Project> {
  8. @Override
  9. public void apply(Project project) {
  10. Zip schemaZip = project.tasks.create('schemaZip', Zip)
  11. schemaZip.group = 'Distribution'
  12. schemaZip.archiveBaseName = project.rootProject.name
  13. schemaZip.archiveClassifier = 'schema'
  14. schemaZip.description = "Builds -${schemaZip.archiveClassifier} archive containing all " +
  15. "XSDs for deployment at static.springframework.org/schema."
  16. def versionlessXsd = project.tasks.create("versionlessXsd", CreateVersionlessXsdTask) {
  17. description = "Generates spring-security.xsd"
  18. versionlessXsdFile = project.layout.buildDirectory.file("versionlessXsd/spring-security.xsd")
  19. }
  20. project.rootProject.subprojects.each { module ->
  21. module.getPlugins().withType(JavaPlugin.class).all {
  22. def Properties schemas = new Properties();
  23. module.sourceSets.main.resources.find {
  24. it.path.endsWith('META-INF/spring.schemas')
  25. }?.withInputStream { schemas.load(it) }
  26. for (def key : schemas.keySet()) {
  27. def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
  28. assert shortName != key
  29. File xsdFile = module.sourceSets.main.resources.find {
  30. it.path.endsWith(schemas.get(key))
  31. }
  32. assert xsdFile != null
  33. schemaZip.into (shortName) {
  34. duplicatesStrategy 'exclude'
  35. from xsdFile.path
  36. }
  37. versionlessXsd.getInputFiles().from(xsdFile.path)
  38. }
  39. }
  40. }
  41. schemaZip.into("security") {
  42. from(versionlessXsd.getOutputs())
  43. }
  44. }
  45. }