Refactor Gradle script naming and organization
- inline test-mvc and tiles3 .gradle files for clarity - rename merge-dist.gradle to merge-artifacts.gradle - polish Javadoc for merge-artifacts.gradle - move merge-artifacts.gradle into gradle subdirectory - move publish-maven.gradle into gradle subdirectory
This commit is contained in:
74
gradle/merge-artifacts.gradle
Normal file
74
gradle/merge-artifacts.gradle
Normal file
@@ -0,0 +1,74 @@
|
||||
import org.gradle.plugins.ide.eclipse.model.ProjectDependency
|
||||
|
||||
/**
|
||||
* Will merge the artifacts of the current project into mergeIntoProject. For example, to
|
||||
* bundle spring-test-mvc in spring-test's jars. This script will perform the following
|
||||
* steps:
|
||||
*
|
||||
* - Ensure that jar tasks of the project being merged from will execute the tasks of the
|
||||
* project being merged into
|
||||
*
|
||||
* - Add the project being merged into to the classpath of the project being merged from
|
||||
*
|
||||
* - Update the pom.xml of the project being merged into to contain the entries from the
|
||||
* project being merged from
|
||||
*
|
||||
* Example Usage:
|
||||
*
|
||||
* ext.mergeIntoProject = project(':spring-test')
|
||||
* apply from: "${rootProject.projectDir}/gradle/merge-artifacts.gradle"
|
||||
*/
|
||||
|
||||
def mergeFromProject = project
|
||||
|
||||
// invoking a task on mergeFromProject will invoke the task with the same name on mergeIntoProject
|
||||
def taskNamesToMerge = ['sourcesJar','jar','javadocJar','javadoc','install','artifactoryPublish']
|
||||
taskNamesToMerge.each { taskName ->
|
||||
def taskToRemove = mergeFromProject.tasks.findByPath(taskName)
|
||||
if(taskToRemove) {
|
||||
taskToRemove.enabled = false
|
||||
taskToRemove.dependsOn mergeIntoProject."$taskName"
|
||||
}
|
||||
}
|
||||
|
||||
// update mergeIntoProject artifacts to contain the mergeFromProject artifact contents
|
||||
mergeIntoProject."sourcesJar" {
|
||||
from mergeFromProject.sourcesJar.source
|
||||
}
|
||||
mergeIntoProject."jar" {
|
||||
from mergeFromProject.jar.source
|
||||
}
|
||||
mergeIntoProject."javadoc" {
|
||||
source += mergeFromProject.javadoc.source
|
||||
classpath += mergeFromProject.javadoc.classpath
|
||||
}
|
||||
|
||||
// GRADLE-1116
|
||||
mergeFromProject.eclipse.classpath.file.whenMerged { classpath ->
|
||||
classpath.entries.removeAll { entry -> entry.path.contains("/${mergeIntoProject.name}/build/") }
|
||||
def dependency = new ProjectDependency("/${mergeIntoProject.name}", mergeIntoProject.path)
|
||||
dependency.exported = true
|
||||
classpath.entries.add(dependency)
|
||||
}
|
||||
|
||||
// Update mergeIntoProject to contain additional configurations that contains all the dependencies from mergeFromProject
|
||||
// so that Maven pom generation works
|
||||
gradle.taskGraph.whenReady {
|
||||
mergeFromProject.configurations.archives.artifacts.clear()
|
||||
|
||||
mergeFromProject.configurations.each { config->
|
||||
def mapping = mergeFromProject.conf2ScopeMappings.getMapping([config])
|
||||
if(mapping.scope) {
|
||||
def newConfigName = mergeFromProject.name + "-"+ config.name
|
||||
mergeIntoProject.configurations.add(newConfigName)
|
||||
config.dependencies.each { dependency ->
|
||||
mergeIntoProject.dependencies.add(newConfigName, dependency)
|
||||
}
|
||||
configure(mergeIntoProject.install.repositories.mavenInstaller.pom.scopeMappings) {
|
||||
addMapping(mapping.priority + 100, mergeIntoProject.configurations."$newConfigName", mapping.scope)
|
||||
}
|
||||
mergeIntoProject.optionalDeps += mergeFromProject.optionalDeps
|
||||
mergeIntoProject.providedDeps += mergeFromProject.providedDeps
|
||||
}
|
||||
}
|
||||
}
|
||||
60
gradle/publish-maven.gradle
Normal file
60
gradle/publish-maven.gradle
Normal file
@@ -0,0 +1,60 @@
|
||||
apply plugin: 'maven'
|
||||
|
||||
ext.optionalDeps = []
|
||||
ext.providedDeps = []
|
||||
|
||||
ext.optional = { optionalDeps << it }
|
||||
ext.provided = { providedDeps << it }
|
||||
|
||||
install {
|
||||
repositories.mavenInstaller {
|
||||
customizePom(pom, project)
|
||||
}
|
||||
}
|
||||
|
||||
def customizePom(pom, gradleProject) {
|
||||
pom.whenConfigured { generatedPom ->
|
||||
// respect 'optional' and 'provided' dependencies
|
||||
gradleProject.optionalDeps.each { dep ->
|
||||
generatedPom.dependencies.findAll { it.artifactId == dep.name }*.optional = true
|
||||
}
|
||||
gradleProject.providedDeps.each { dep ->
|
||||
generatedPom.dependencies.findAll { it.artifactId == dep.name }*.scope = 'provided'
|
||||
}
|
||||
|
||||
// eliminate test-scoped dependencies (no need in maven central poms)
|
||||
generatedPom.dependencies.removeAll { dep ->
|
||||
dep.scope == 'test'
|
||||
}
|
||||
|
||||
// add all items necessary for maven central publication
|
||||
generatedPom.project {
|
||||
name = gradleProject.description
|
||||
description = gradleProject.description
|
||||
url = 'https://github.com/SpringSource/spring-framework'
|
||||
organization {
|
||||
name = 'SpringSource'
|
||||
url = 'http://springsource.org/spring-framework'
|
||||
}
|
||||
licenses {
|
||||
license {
|
||||
name 'The Apache Software License, Version 2.0'
|
||||
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
|
||||
distribution 'repo'
|
||||
}
|
||||
}
|
||||
scm {
|
||||
url = 'https://github.com/SpringSource/spring-framework'
|
||||
connection = 'scm:git:git://github.com/SpringSource/spring-framework'
|
||||
developerConnection = 'scm:git:git://github.com/SpringSource/spring-framework'
|
||||
}
|
||||
developers {
|
||||
developer {
|
||||
id = 'jhoeller'
|
||||
name = 'Juergen Hoeller'
|
||||
email = 'jhoeller@vmware.com'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user