123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- package io.spring.gradle.convention
- import org.gradle.api.Plugin
- import org.gradle.api.Project
- import org.gradle.api.XmlProvider
- import org.gradle.api.artifacts.component.ModuleComponentSelector
- import org.gradle.api.artifacts.maven.MavenDeployment
- import org.gradle.api.artifacts.maven.MavenPom
- import org.gradle.api.artifacts.result.ResolvedDependencyResult
- import org.gradle.api.plugins.JavaBasePlugin
- import org.gradle.api.plugins.JavaPlugin
- import org.gradle.api.plugins.JavaPluginConvention
- import org.gradle.api.plugins.MavenPlugin
- import org.gradle.api.tasks.SourceSet
- import org.gradle.api.tasks.bundling.Jar
- import org.gradle.api.tasks.javadoc.Javadoc
- import org.gradle.plugins.signing.SigningPlugin
- import org.slf4j.Logger
- import org.slf4j.LoggerFactory
- public class SpringMavenPlugin implements Plugin<Project> {
- private static final String ARCHIVES = "archives";
- Logger logger = LoggerFactory.getLogger(getClass());
- @Override
- public void apply(Project project) {
- project.getPluginManager().apply(JavaPlugin.class);
- project.getPluginManager().apply(MavenPlugin.class);
- project.getPluginManager().apply(SigningPlugin.class);
- Javadoc javadoc = (Javadoc) project.getTasks().findByPath("javadoc");
- Jar javadocJar = project.getTasks().create("javadocJar", Jar.class);
- javadocJar.setClassifier("javadoc");
- javadocJar.from(javadoc);
- JavaPluginConvention java = project.getConvention().getPlugin(JavaPluginConvention.class);
- SourceSet mainSourceSet = java.getSourceSets().getByName("main");
- Jar sourcesJar = project.getTasks().create("sourcesJar", Jar.class);
- sourcesJar.setClassifier("sources");
- sourcesJar.from(mainSourceSet.getAllSource());
- project.getArtifacts().add(ARCHIVES, javadocJar);
- project.getArtifacts().add(ARCHIVES, sourcesJar);
- project.install {
- repositories.mavenInstaller {
- configurePom(project, pom)
- }
- }
- project.uploadArchives {
- repositories.mavenDeployer {
- configurePom(project, pom)
- }
- }
- inlineDependencyManagement(project);
- def hasSigningKey = project.hasProperty("signing.keyId") || project.findProperty("signingKey")
- if(hasSigningKey && Utils.isRelease(project)) {
- sign(project)
- }
- project.getPluginManager().apply("io.spring.convention.ossrh");
- }
- private void inlineDependencyManagement(Project project) {
- project.install {
- repositories.mavenInstaller {
- configurePomForInlineDependencies(project, pom)
- }
- }
- project.uploadArchives {
- repositories.mavenDeployer {
- configurePomForInlineDependencies(project, pom)
- }
- }
- }
- private void configurePomForInlineDependencies(Project project, MavenPom pom) {
- pom.withXml { XmlProvider xml ->
- project.plugins.withType(JavaBasePlugin) {
- def dependencies = xml.asNode()?.dependencies?.dependency
- def configuredDependencies = project.configurations.findAll{ it.canBeResolved && it.canBeConsumed }*.incoming*.resolutionResult*.allDependencies.flatten()
- dependencies?.each { Node dep ->
- def group = dep.groupId.text()
- def name = dep.artifactId.text()
- ResolvedDependencyResult resolved = configuredDependencies.find { r ->
- (r.requested instanceof ModuleComponentSelector) &&
- (r.requested.group == group) &&
- (r.requested.module == name)
- }
- if (!resolved) {
- return
- }
- def versionNode = dep.version
- if (!versionNode) {
- dep.appendNode('version')
- }
- def moduleVersion = resolved.selected.moduleVersion
- dep.groupId[0].value = moduleVersion.group
- dep.artifactId[0].value = moduleVersion.name
- dep.version[0].value = moduleVersion.version
- }
- }
- }
- }
- private void sign(Project project) {
- project.install {
- repositories {
- mavenDeployer {
- beforeDeployment { MavenDeployment deployment -> project.signing.signPom(deployment) }
- }
- }
- }
- project.uploadArchives {
- repositories {
- mavenDeployer {
- beforeDeployment { MavenDeployment deployment -> project.signing.signPom(deployment) }
- }
- }
- }
- project.signing {
- required { project.gradle.taskGraph.hasTask("uploadArchives") }
- def signingKeyId = project.findProperty("signingKeyId")
- def signingKey = project.findProperty("signingKey")
- def signingPassword = project.findProperty("signingPassword")
- if (signingKeyId) {
- useInMemoryPgpKeys(signingKeyId, signingKey, signingPassword)
- } else if (signingKey) {
- useInMemoryPgpKeys(signingKey, signingPassword)
- }
- sign project.configurations.archives
- }
- }
- private static void configurePom(Project project, MavenPom pom) {
- pom.whenConfigured { p ->
- p.dependencies = p.dependencies.sort { dep ->
- "$dep.scope:$dep.optional:$dep.groupId:$dep.artifactId"
- }
- }
- pom.project {
- boolean isWar = project.hasProperty("war");
- String projectVersion = String.valueOf(project.getVersion());
- String projectName = Utils.getProjectName(project);
- if(isWar) {
- packaging = "war"
- }
- name = project.name
- description = project.name
- url = 'https://spring.io/spring-security'
- organization {
- name = 'spring.io'
- url = 'https://spring.io/'
- }
- licenses {
- license {
- name 'The Apache Software License, Version 2.0'
- url 'https://www.apache.org/licenses/LICENSE-2.0.txt'
- distribution 'repo'
- }
- }
- scm {
- url = 'https://github.com/spring-projects/spring-security'
- connection = 'scm:git:git://github.com/spring-projects/spring-security'
- developerConnection = 'scm:git:git://github.com/spring-projects/spring-security'
- }
- developers {
- developer {
- id = 'rwinch'
- name = 'Rob Winch'
- email = 'rwinch@pivotal.io'
- }
- developer {
- id = 'jgrandja'
- name = 'Joe Grandja'
- email = 'jgrandja@pivotal.io'
- }
- }
- if(isWar) {
- properties {
- 'm2eclipse.wtp.contextRoot' '/'
- }
- }
- if (Utils.isSnapshot(project)) {
- repositories {
- repository {
- id 'spring-snapshot'
- url 'https://repo.spring.io/snapshot'
- }
- }
- }
- else if (Utils.isMilestone(project)) {
- repositories {
- repository {
- id 'spring-milestone'
- url 'https://repo.spring.io/milestone'
- }
- }
- }
- }
- }
- }
|