blob: b92eb08e65b1e1d1a4f69e33a5697715beabd59c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// This gradle should be applied as a plugin to every subproject that requires our dependency management
// E.g.: apply from: "${project.projectDir}/../../gradle/geode-dependency-management.gradle"
class GeodeDependencyExtension {
// While we transition away from external properties, we will consume this plugin
// in build files that should not apply Spring dependency-management.
// Allow this to be configurable via this extension.
boolean applySpringDependencyManagement = true
}
class GeodeDependencyManagementPlugin implements Plugin<Project> {
@Override
void apply(Project project) {
def extension = project.extensions.create('versionManagement', GeodeDependencyExtension)
// Delay evaluation to allow for configuration
project.afterEvaluate {
if (extension.applySpringDependencyManagement) {
project.logger.info("Applying Spring management via GeodeDependencyManagementPlugin to ${project}")
manage_dependencies(project)
}
}
project.logger.info("Applying external property version values via GeodeDependencyManagementPlugin to ${project}")
set_extended_property_versioning(project)
}
void manage_dependencies(Project project) {
project.apply plugin: "io.spring.dependency-management"
project.dependencyManagement {
dependencies {
dependencySet(group: project.group, version: project.version) {
entry('apache-geode')
entry('geode-common')
entry('geode-concurrency-test')
entry('geode-connectors')
entry('geode-core')
entry('geode-cq')
entry('geode-dunit')
entry('geode-experimental-driver')
entry('geode-json')
entry('geode-junit')
entry('geode-lucene')
entry('geode-management')
entry('geode-old-client-support')
entry('geode-old-versions')
entry('geode-protobuf')
entry('geode-protobuf-messages')
entry('geode-pulse')
entry('geode-rebalancer')
entry('geode-wan')
entry('geode-web')
entry('geode-web-api')
entry('geode-web-management')
}
// informal, inter-group dependencySet
dependency('com.sun.xml.bind:jaxb-impl:2.3.1')
dependency('javax.xml.bind:jaxb-api:2.3.1')
dependency(group: 'antlr', name: 'antlr', version: project.'antlr.version')
dependency(group: 'cglib', name: 'cglib', version: project.'cglib.version')
dependency(group: 'com.carrotsearch.randomizedtesting', name: 'randomizedtesting-runner', version: '2.5.0')
dependencySet(group: 'com.fasterxml.jackson.core', version: '2.9.7') {
entry 'jackson-annotations'
entry 'jackson-core'
entry 'jackson-databind'
}
dependency(group: 'com.fasterxml.jackson.module', name: 'jackson-module-scala_2.10', version: '2.9.6')
dependency(group: 'com.github.davidmoten', name: 'geo', version: '0.7.1')
dependency(group: 'com.github.stefanbirkner', name: 'system-rules', version: '1.19.0')
dependency(group: 'com.github.stephenc.findbugs', name: 'findbugs-annotations', version: '1.3.9-1')
dependency(group: 'com.google.guava', name: 'guava', version: '27.0-jre')
dependency(group: 'com.google.protobuf', name: 'protobuf-gradle-plugin', version: project.'protobuf-gradle-plugin.version')
dependency(group: 'com.google.protobuf', name: 'protobuf-java', version: project.'protobuf-java.version')
dependency(group: 'com.healthmarketscience.rmiio', name: 'rmiio', version: '2.1.2')
dependencySet(group: 'com.jayway.jsonpath', version: '2.4.0') {
entry 'json-path-assert'
entry 'json-path'
}
dependency(group: 'com.mockrunner', name: 'mockrunner-servlet', version: '1.1.2')
dependencySet(group: 'com.palantir.docker.compose', version: '0.31.1') {
entry 'docker-compose-rule-core'
entry 'docker-compose-rule-junit4'
}
dependencySet(group: 'com.pholser', version: '0.8.1') {
entry 'junit-quickcheck-core'
entry 'junit-quickcheck-generators'
}
dependency(group: 'com.sun.activation', name: 'javax.activation', version: '1.2.0')
dependency(group: 'com.sun.istack', name: 'istack-commons-runtime', version: '2.2')
dependency(group: 'com.zaxxer', name: 'HikariCP', version: '3.2.0')
dependency(group: 'commons-beanutils', name: 'commons-beanutils', version: '1.9.3')
dependency(group: 'commons-collections', name: 'commons-collections', version: '3.2.2')
dependency(group: 'commons-configuration', name: 'commons-configuration', version: '1.10')
dependency(group: 'commons-digester', name: 'commons-digester', version: '2.1')
dependency(group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.3')
dependency(group: 'commons-io', name: 'commons-io', version: project.'commons-io.version')
dependency(group: 'commons-logging', name: 'commons-logging', version: '1.2')
dependency(group: 'commons-modeler', name: 'commons-modeler', version: '2.0.1')
dependency(group: 'commons-validator', name: 'commons-validator', version: project.'commons-validator.version')
dependency(group: 'io.github.classgraph', name: 'classgraph', version: '4.0.6')
dependency(group: 'io.netty', name: 'netty-all', version: '4.1.31.Final')
dependencySet(group: 'io.springfox', version: '2.9.2') {
entry 'springfox-swagger-ui'
entry 'springfox-swagger2'
}
dependency(group: 'it.unimi.dsi', name: 'fastutil', version: project.'fastutil.version')
dependency(group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2')
dependency(group: 'javax.annotation', name: 'jsr250-api', version: '1.0')
dependency(group: 'javax.ejb', name: 'ejb-api', version: '3.0')
dependency(group: 'javax.mail', name: 'javax.mail-api', version: '1.6.2')
dependency(group: 'javax.resource', name: 'javax.resource-api', version: '1.7.1')
dependency(group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0')
dependency(group: 'junit', name: 'junit', version: project.'junit.version')
dependencySet(group: 'mx4j', version: '3.0.2') {
entry 'mx4j-remote'
entry 'mx4j'
}
dependency(group: 'mx4j', name: 'mx4j-tools', version: '3.0.1')
dependency(group: 'mysql', name: 'mysql-connector-java', version: '5.1.46')
dependency(group: 'net.java.dev.jna', name: 'jna', version: '4.1.0')
dependency(group: 'net.sf.jopt-simple', name: 'jopt-simple', version: '5.0.4')
dependency(group: 'net.spy', name: 'spymemcached', version: '2.12.2')
dependency(group: 'org.apache.bcel', name: 'bcel', version: '6.2')
dependency(group: 'org.apache.commons', name: 'commons-lang3', version: project.'commons-lang3.version')
dependency(group: 'org.apache.derby', name: 'derby', version: '10.14.2.0')
dependency(group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6')
dependency(group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.4.10')
dependencySet(group: 'org.apache.logging.log4j', version: project.'log4j.version') {
entry 'log4j-api'
entry 'log4j-core'
entry 'log4j-jcl'
entry 'log4j-jul'
entry 'log4j-slf4j-impl'
}
dependencySet(group: 'org.apache.lucene', version: '6.6.2') {
entry 'lucene-analyzers-common'
entry 'lucene-analyzers-phonetic'
entry 'lucene-core'
entry 'lucene-queryparser'
entry 'lucene-test-framework'
}
dependency(group: 'org.apache.shiro', name: 'shiro-core', version: project.'shiro.version')
dependency(group: 'org.assertj', name: 'assertj-core', version: '3.11.1')
dependency(group: 'org.awaitility', name: 'awaitility', version: '3.1.2')
dependency(group: 'org.bouncycastle', name: 'bcpkix-jdk15on', version: '1.60')
dependency(group: 'org.codehaus.cargo', name: 'cargo-core-uberjar', version: '1.6.10')
dependency(group: 'org.eclipse.jetty', name: 'jetty-webapp', version: project.'jetty.version')
dependency(group: 'org.eclipse.persistence', name: 'javax.persistence', version: '2.2.1')
dependency(group: 'org.fusesource.jansi', name: 'jansi', version: '1.17.1')
dependencySet(group: 'org.hamcrest', version: '1.3') {
entry 'hamcrest-all'
entry 'hamcrest-core'
entry 'hamcrest-library'
}
dependency(group: 'org.httpunit', name: 'httpunit', version: '1.7.3')
dependency(group: 'org.iq80.snappy', name: 'snappy', version: '0.4')
dependency(group: 'org.jgroups', name: 'jgroups', version: project.'jgroups.version')
dependency(group: 'org.mockito', name: 'mockito-core', version: '2.23.0')
dependency(group: 'org.mortbay.jetty', name: 'servlet-api', version: '3.0.20100224')
dependency(group: 'org.postgresql', name: 'postgresql', version: '42.2.2')
dependencySet(group: 'org.powermock', version: '2.0.0-beta.5') {
entry 'powermock-api-mockito2'
entry 'powermock-core'
entry 'powermock-module-junit4'
}
dependencySet(group: 'org.seleniumhq.selenium', version: '3.13.0') {
entry 'selenium-api'
entry 'selenium-chrome-driver'
entry 'selenium-remote-driver'
entry 'selenium-support'
}
dependency(group: 'org.skyscreamer', name: 'jsonassert', version: '1.5.0')
dependency("org.slf4j:slf4j-api:${project.'slf4j-api.version'}")
dependency('org.springframework.hateoas:spring-hateoas:0.25.0.RELEASE')
dependency('org.springframework.ldap:spring-ldap-core:2.3.2.RELEASE')
dependencySet(group: 'org.springframework.security', version: '4.2.8.RELEASE') {
entry 'spring-security-config'
entry 'spring-security-core'
entry 'spring-security-ldap'
entry 'spring-security-test'
entry 'spring-security-web'
}
dependency('org.springframework.shell:spring-shell:1.2.0.RELEASE')
dependencySet(group: 'org.springframework', version: '4.3.20.RELEASE') {
entry 'spring-aspects'
entry 'spring-beans'
entry 'spring-context'
entry 'spring-core'
entry 'spring-expression'
entry 'spring-oxm'
entry 'spring-test'
entry 'spring-tx'
entry 'spring-web'
entry 'spring-webmvc'
}
dependency(group: 'pl.pragmatists', name: 'JUnitParams', version: '1.1.0')
dependency(group: 'redis.clients', name: 'jedis', version: '2.9.0')
dependency(group: 'xerces', name: 'xercesImpl', version: '2.12.0')
}
}
}
void set_extended_property_versioning(Project project) {
// These versions are consumed beyond the scope of source set dependencies.
project.ext {
// These version numbers are consumed by :geode-modules-assembly:distAppServer filtering
// Some of these are referenced above as well
set('antlr.version', '2.7.7')
set('commons-io.version', '2.6')
set('commons-lang3.version', '3.8.1')
set('commons-validator.version', '1.6')
set('fastutil.version', '8.2.2')
set('javax.transaction-api.version', '1.3')
set('jgroups.version', '3.6.14.Final')
set('log4j.version', '2.11.1')
set('shiro.version', '1.4.0')
set('slf4j-api.version', '1.7.25')
// These version numbers are used in testing various versions of tomcat and are consumed explicitly
// in will be called explicitly in the relevant extensions module, and respective configurations
// in geode-assembly.gradle. Moreover, dependencyManagement does not seem to place nicely when
// specifying @zip in a dependency, in the manner in which we consume them in custom configurations.
// This would possibly be corrected if they were proper source sets.
set('tomcat6.version', '6.0.37')
set('tomcat7.version', '7.0.90')
set('tomcat8.version', '8.5.34')
set('tomcat9.version', '9.0.12')
// The jetty version is also hard-coded in geode-assembly:test
// at o.a.g.sessions.tests.GenericAppServerInstall.java
set('jetty.version', '9.4.12.v20180830')
// These version numbers are consumed by protobuf configurations that are plugin-specific and not
// part of the typical Gradle dependency configurations.
set('protoc.version', '3.6.1')
set('protobuf-gradle-plugin.version', '0.8.6')
set('protobuf-java.version', '3.6.1')
// These versions are referenced in test.gradle, which is aggressively injected into all projects.
// This results in brittle behavior compared to dependency-management.gradle's "opt-in" plugin style.
set('junit.version', '4.12')
set('cglib.version', '3.2.9')
}
}
}
apply plugin: GeodeDependencyManagementPlugin