diff --git a/build.gradle b/build.gradle index b7828fba2de..379d45f67e6 100644 --- a/build.gradle +++ b/build.gradle @@ -46,6 +46,7 @@ configure(allprojects) { } configure(subprojects) { subproject -> + apply plugin: MergePlugin apply from: "${gradleScriptDir}/publish-maven.gradle" jar { @@ -432,10 +433,8 @@ project("spring-orm") { project("spring-orm-hibernate4") { description = "Spring Object/Relational Mapping - Hibernate 4 support" - ext.mergeIntoProject = project(":spring-orm") - apply from: "${gradleScriptDir}/merge-artifacts.gradle" + merge.into = project(":spring-orm") dependencies { - compile(project(":spring-orm").sourceSets.main.output) compile(project(":spring-tx")) compile(project(":spring-jdbc")) optional("org.hibernate:hibernate-core:4.1.0.Final") @@ -506,11 +505,9 @@ project("spring-webmvc") { project("spring-webmvc-tiles3") { description = "Spring Framework Tiles3 Integration" - ext.mergeIntoProject = project(":spring-webmvc") - apply from: "${gradleScriptDir}/merge-artifacts.gradle" + merge.into = project(":spring-webmvc") dependencies { compile(project(":spring-context")) - compile(project(":spring-webmvc").sourceSets.main.output) provided("javax.el:el-api:1.0") provided("javax.servlet:jstl:1.2") provided("javax.servlet.jsp:jsp-api:2.1") @@ -581,13 +578,10 @@ project("spring-test") { project("spring-test-mvc") { description = "Spring Test MVC Framework" - ext.mergeIntoProject = project(":spring-test") - apply from: "${gradleScriptDir}/merge-artifacts.gradle" - apply from: "ide.gradle" + merge.into = project(":spring-test") dependencies { optional(project(":spring-context")) compile(project(":spring-webmvc")) - compile(project(":spring-test").sourceSets.main.output) provided("javax.servlet:javax.servlet-api:3.0.1") optional("org.hamcrest:hamcrest-core:1.3") optional("com.jayway.jsonpath:json-path:0.8.1") @@ -663,6 +657,7 @@ configure(rootProject) { description = "Spring Framework" apply plugin: "docbook-reference" + apply plugin: "groovy" apply from: "${gradleScriptDir}/jdiff.gradle" reference { @@ -674,6 +669,8 @@ configure(rootProject) { configurations.archives.artifacts.clear() dependencies { // for integration tests + compile gradleApi() + groovy localGroovy() testCompile(project(":spring-core")) testCompile(project(":spring-beans")) testCompile(project(":spring-aop")) diff --git a/buildsrc/src/main/groovy/MergePlugin.groovy b/buildsrc/src/main/groovy/MergePlugin.groovy new file mode 100644 index 00000000000..2f49938c053 --- /dev/null +++ b/buildsrc/src/main/groovy/MergePlugin.groovy @@ -0,0 +1,130 @@ +import org.gradle.api.* +import org.gradle.api.artifacts.Configuration +import org.gradle.api.artifacts.ProjectDependency; +import org.gradle.api.artifacts.maven.Conf2ScopeMapping +import org.gradle.api.plugins.MavenPlugin +import org.gradle.api.tasks.* +import org.gradle.plugins.ide.eclipse.EclipsePlugin +import org.gradle.plugins.ide.eclipse.model.EclipseClasspath; +import org.gradle.plugins.ide.idea.IdeaPlugin +import org.gradle.api.invocation.* + +/** + * Gradle plugin that allows projects to merged together. Primarily developed to + * allow Spring to support multiple multiple incompatible versions of third-party + * dependencies (for example Hibernate v3 and v4). + *

+ * The 'merge' extension should be used to define how projects are merged, for example: + *

+ * configure(subprojects) {
+ *     apply plugin: MergePlugin
+ * }
+ *
+ * project("myproject") {
+ * }
+ *
+ * project("myproject-extra") {
+ *     merge.into = project("myproject")
+ * }
+ * 
+ *

+ * This plugin adds two new configurations: + *