SpringMavenPlugin.groovy 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. package io.spring.gradle.convention
  2. import org.gradle.api.Plugin
  3. import org.gradle.api.Project
  4. import org.gradle.api.XmlProvider
  5. import org.gradle.api.artifacts.component.ModuleComponentSelector
  6. import org.gradle.api.artifacts.maven.MavenDeployment
  7. import org.gradle.api.artifacts.maven.MavenPom
  8. import org.gradle.api.artifacts.result.ResolvedDependencyResult
  9. import org.gradle.api.plugins.JavaBasePlugin
  10. import org.gradle.api.plugins.JavaPlugin
  11. import org.gradle.api.plugins.JavaPluginConvention
  12. import org.gradle.api.plugins.MavenPlugin
  13. import org.gradle.api.tasks.SourceSet
  14. import org.gradle.api.tasks.bundling.Jar
  15. import org.gradle.api.tasks.javadoc.Javadoc
  16. import org.gradle.plugins.signing.SigningPlugin
  17. import org.slf4j.Logger
  18. import org.slf4j.LoggerFactory
  19. public class SpringMavenPlugin implements Plugin<Project> {
  20. private static final String ARCHIVES = "archives";
  21. Logger logger = LoggerFactory.getLogger(getClass());
  22. @Override
  23. public void apply(Project project) {
  24. project.getPluginManager().apply(JavaPlugin.class);
  25. project.getPluginManager().apply(MavenPlugin.class);
  26. project.getPluginManager().apply(SigningPlugin.class);
  27. Javadoc javadoc = (Javadoc) project.getTasks().findByPath("javadoc");
  28. Jar javadocJar = project.getTasks().create("javadocJar", Jar.class);
  29. javadocJar.setClassifier("javadoc");
  30. javadocJar.from(javadoc);
  31. JavaPluginConvention java = project.getConvention().getPlugin(JavaPluginConvention.class);
  32. SourceSet mainSourceSet = java.getSourceSets().getByName("main");
  33. Jar sourcesJar = project.getTasks().create("sourcesJar", Jar.class);
  34. sourcesJar.setClassifier("sources");
  35. sourcesJar.from(mainSourceSet.getAllSource());
  36. project.getArtifacts().add(ARCHIVES, javadocJar);
  37. project.getArtifacts().add(ARCHIVES, sourcesJar);
  38. project.install {
  39. repositories.mavenInstaller {
  40. configurePom(project, pom)
  41. }
  42. }
  43. project.uploadArchives {
  44. repositories.mavenDeployer {
  45. configurePom(project, pom)
  46. }
  47. }
  48. inlineDependencyManagement(project);
  49. def hasSigningKey = project.hasProperty("signing.keyId") || project.findProperty("signingKey")
  50. if(hasSigningKey && Utils.isRelease(project)) {
  51. sign(project)
  52. }
  53. project.getPluginManager().apply("io.spring.convention.ossrh");
  54. }
  55. private void inlineDependencyManagement(Project project) {
  56. project.install {
  57. repositories.mavenInstaller {
  58. configurePomForInlineDependencies(project, pom)
  59. }
  60. }
  61. project.uploadArchives {
  62. repositories.mavenDeployer {
  63. configurePomForInlineDependencies(project, pom)
  64. }
  65. }
  66. }
  67. private void configurePomForInlineDependencies(Project project, MavenPom pom) {
  68. pom.withXml { XmlProvider xml ->
  69. project.plugins.withType(JavaBasePlugin) {
  70. def dependencies = xml.asNode()?.dependencies?.dependency
  71. def configuredDependencies = project.configurations.findAll{ it.canBeResolved && it.canBeConsumed }*.incoming*.resolutionResult*.allDependencies.flatten()
  72. dependencies?.each { Node dep ->
  73. def group = dep.groupId.text()
  74. def name = dep.artifactId.text()
  75. ResolvedDependencyResult resolved = configuredDependencies.find { r ->
  76. (r.requested instanceof ModuleComponentSelector) &&
  77. (r.requested.group == group) &&
  78. (r.requested.module == name)
  79. }
  80. if (!resolved) {
  81. return
  82. }
  83. def versionNode = dep.version
  84. if (!versionNode) {
  85. dep.appendNode('version')
  86. }
  87. def moduleVersion = resolved.selected.moduleVersion
  88. dep.groupId[0].value = moduleVersion.group
  89. dep.artifactId[0].value = moduleVersion.name
  90. dep.version[0].value = moduleVersion.version
  91. }
  92. }
  93. }
  94. }
  95. private void sign(Project project) {
  96. project.install {
  97. repositories {
  98. mavenDeployer {
  99. beforeDeployment { MavenDeployment deployment -> project.signing.signPom(deployment) }
  100. }
  101. }
  102. }
  103. project.uploadArchives {
  104. repositories {
  105. mavenDeployer {
  106. beforeDeployment { MavenDeployment deployment -> project.signing.signPom(deployment) }
  107. }
  108. }
  109. }
  110. project.signing {
  111. required { project.gradle.taskGraph.hasTask("uploadArchives") }
  112. def signingKeyId = project.findProperty("signingKeyId")
  113. def signingKey = project.findProperty("signingKey")
  114. def signingPassword = project.findProperty("signingPassword")
  115. if (signingKeyId) {
  116. useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
  117. } else if (signingKey) {
  118. useInMemoryPgpKeys(signingKey, signingPassword)
  119. }
  120. sign project.configurations.archives
  121. }
  122. }
  123. private static void configurePom(Project project, MavenPom pom) {
  124. pom.whenConfigured { p ->
  125. p.dependencies = p.dependencies.sort { dep ->
  126. "$dep.scope:$dep.optional:$dep.groupId:$dep.artifactId"
  127. }
  128. }
  129. pom.project {
  130. boolean isWar = project.hasProperty("war");
  131. String projectVersion = String.valueOf(project.getVersion());
  132. String projectName = Utils.getProjectName(project);
  133. if(isWar) {
  134. packaging = "war"
  135. }
  136. name = project.name
  137. description = project.name
  138. url = 'https://spring.io/spring-security'
  139. organization {
  140. name = 'spring.io'
  141. url = 'https://spring.io/'
  142. }
  143. licenses {
  144. license {
  145. name 'The Apache Software License, Version 2.0'
  146. url 'https://www.apache.org/licenses/LICENSE-2.0.txt'
  147. distribution 'repo'
  148. }
  149. }
  150. scm {
  151. url = 'https://github.com/spring-projects/spring-security'
  152. connection = 'scm:git:git://github.com/spring-projects/spring-security'
  153. developerConnection = 'scm:git:git://github.com/spring-projects/spring-security'
  154. }
  155. developers {
  156. developer {
  157. id = 'rwinch'
  158. name = 'Rob Winch'
  159. email = 'rwinch@pivotal.io'
  160. }
  161. developer {
  162. id = 'jgrandja'
  163. name = 'Joe Grandja'
  164. email = 'jgrandja@pivotal.io'
  165. }
  166. }
  167. if(isWar) {
  168. properties {
  169. 'm2eclipse.wtp.contextRoot' '/'
  170. }
  171. }
  172. if (Utils.isSnapshot(project)) {
  173. repositories {
  174. repository {
  175. id 'spring-snapshot'
  176. url 'https://repo.spring.io/snapshot'
  177. }
  178. }
  179. }
  180. else if (Utils.isMilestone(project)) {
  181. repositories {
  182. repository {
  183. id 'spring-milestone'
  184. url 'https://repo.spring.io/milestone'
  185. }
  186. }
  187. }
  188. }
  189. }
  190. }