|  | /* | 
|  | * 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. | 
|  | */ | 
|  |  | 
|  | plugins { | 
|  | id "org.nosphere.apache.rat" version "0.6.0" | 
|  | id "com.diffplug.gradle.spotless" version "3.0.0" | 
|  | id "de.undercouch.download" version "3.1.2" | 
|  | } | 
|  |  | 
|  | allprojects { | 
|  | repositories { | 
|  | if (!gradle.usingGeodeCompositeBuild) { | 
|  | maven { | 
|  | url project.findProperty('geodeRepositoryUrl') ?: 'https://maven.apachegeode-ci.info/snapshots' | 
|  | content { | 
|  | includeGroup 'org.apache.geode' | 
|  | } | 
|  | } | 
|  | } | 
|  | mavenCentral() | 
|  | } | 
|  | } | 
|  |  | 
|  | def installDir = "$buildDir/apache-geode" | 
|  |  | 
|  | configurations { | 
|  | geodeDistribution | 
|  | } | 
|  |  | 
|  | dependencies { | 
|  | geodeDistribution("org.apache.geode:apache-geode:$geodeVersion@tgz") { | 
|  | if (gradle.usingGeodeCompositeBuild) { | 
|  | targetConfiguration = 'compositeTarget' | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | task installGeode(type: Copy) { | 
|  | if (gradle.usingGeodeCompositeBuild) { | 
|  | dependsOn(gradle.includedBuild('geode').task(':geode-assembly:distTar')) | 
|  | } | 
|  | from { | 
|  | tarTree(configurations.geodeDistribution.singleFile) | 
|  | } | 
|  | eachFile { fcp -> | 
|  | fcp.path = fcp.path.replaceFirst("^apache-geode-[a-zA-Z0-9\\.\\-]+\\/", "apache-geode/") | 
|  | } | 
|  | into buildDir | 
|  | includeEmptyDirs false | 
|  | } | 
|  |  | 
|  | subprojects { | 
|  | apply plugin: 'java-library' | 
|  |  | 
|  | dependencies { | 
|  | // All callouts to org.apache.geode here, need to be specified in settings.gradle | 
|  | // for composite build to work | 
|  | api(platform("org.apache.geode:geode-all-bom:$geodeVersion")) | 
|  | implementation("org.apache.geode:geode-core") | 
|  | implementation("org.apache.geode:geode-cq") | 
|  | implementation("org.apache.geode:geode-logging") | 
|  | implementation('com.google.guava:guava') | 
|  | implementation('org.apache.commons:commons-lang3') | 
|  | implementation("org.apache.logging.log4j:log4j-core") | 
|  |  | 
|  | testImplementation("org.awaitility:awaitility") | 
|  | testImplementation("junit:junit") | 
|  | testImplementation("org.mockito:mockito-core") | 
|  | testImplementation("com.github.stefanbirkner:system-rules") | 
|  | testImplementation("org.assertj:assertj-core") | 
|  | testImplementation('org.apache.httpcomponents:httpcore') | 
|  | testImplementation('org.apache.httpcomponents:httpclient') | 
|  | runtimeOnly "org.apache.logging.log4j:log4j-slf4j-impl" | 
|  | } | 
|  |  | 
|  | jar { | 
|  | archiveName "${baseName}.${extension}" | 
|  | } | 
|  |  | 
|  | task cleanServer { | 
|  | doLast { | 
|  | delete 'locator' | 
|  | delete 'locator-ln' | 
|  | delete 'locator-ny' | 
|  | delete 'server1' | 
|  | delete 'server2' | 
|  | delete 'server-ln-1' | 
|  | delete 'server-ln-2' | 
|  | delete 'server-ny-1' | 
|  | delete 'server-ny-2' | 
|  | } | 
|  | } | 
|  | clean.finalizedBy cleanServer | 
|  |  | 
|  | def geodePath = "${System.env.PATH}${System.getProperty('path.separator')}${installDir}/bin" | 
|  | task start(type: Exec, dependsOn: [installGeode, build, cleanServer]) { | 
|  | workingDir projectDir | 
|  | environment 'GEODE_HOME', installDir | 
|  | environment 'PATH', geodePath | 
|  | commandLine 'sh', '-c', "gfsh run --file=${projectDir}/scripts/start.gfsh" | 
|  | } | 
|  |  | 
|  | task stop(type: Exec, dependsOn: installGeode) { | 
|  | workingDir projectDir | 
|  | environment 'GEODE_HOME', installDir | 
|  | environment 'PATH', geodePath | 
|  | commandLine 'sh', '-c', "gfsh run --file=${projectDir}/scripts/stop.gfsh" | 
|  | } | 
|  |  | 
|  | task run(type: JavaExec, dependsOn: build) { | 
|  | description = 'Run example' | 
|  | classpath = sourceSets.main.runtimeClasspath | 
|  | main = "org.apache.geode_examples.${project.name}.Example" | 
|  | } | 
|  |  | 
|  | task waitForExitingMembers(type: Exec) { | 
|  | workingDir projectDir | 
|  | environment 'GEODE_HOME', installDir | 
|  | environment 'PATH', geodePath | 
|  | ignoreExitValue true | 
|  | commandLine 'sh', '-c', "" + | 
|  | "TIMEOUT=120 ;" + | 
|  | "echo \"Waiting at most \$TIMEOUT seconds for all members to shut down...\" ;" + | 
|  | "while pgrep -f \"(Server|Locator)Launcher\" > /dev/null ; do" + | 
|  | "  printf \".\" ; " + | 
|  | "  sleep 1 ;" + | 
|  | "  TIMEOUT=\$((\$TIMEOUT - 1)) ;" + | 
|  | "  if [ \$TIMEOUT -eq 0 ] ; then" + | 
|  | "    echo \"\" ;" + | 
|  | "    exit 10 ;" + | 
|  | "  fi ;" + | 
|  | "done ;" + | 
|  | "echo \"\"" | 
|  | doLast { | 
|  | // We use exit code 10 to avoid conflict with pgrep exit codes. | 
|  | if (execResult.exitValue == 10) { | 
|  | throw new GradleException("A member process persisted beyond permitted timeout.  Aborting.") | 
|  | } else if (execResult.exitValue != 0) { | 
|  | throw new GradleException("waitForExistingMembers failed with exit code: " + execResult.exitValue) | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | task verifyNoMembersRunning(type: Exec) { | 
|  | workingDir projectDir | 
|  | environment 'GEODE_HOME', installDir | 
|  | environment 'PATH', geodePath | 
|  | ignoreExitValue true | 
|  | commandLine 'sh', '-c', "echo \"Looking for existing member processes...\" ; " + | 
|  | "pgrep -f \"(Server|Locator)Launcher\" ; " | 
|  | doLast { | 
|  | if (execResult.exitValue == 0) { | 
|  | throw new GradleException("Existing members detected.  Examples expect a clean environment in which to run.") | 
|  | } | 
|  | } | 
|  | } | 
|  | if (gradle.usingGeodeCompositeBuild) { | 
|  | tasks.withType(JavaCompile) { | 
|  | options.fork = true | 
|  | options.forkOptions.jvmArgs += ['-Xmx3g'] | 
|  | } | 
|  | } | 
|  |  | 
|  | task runAll(dependsOn: [verifyNoMembersRunning, start, run, stop, waitForExitingMembers]) | 
|  | start.mustRunAfter verifyNoMembersRunning | 
|  | run.mustRunAfter start | 
|  | stop.mustRunAfter run | 
|  | waitForExitingMembers.mustRunAfter stop | 
|  | } | 
|  |  | 
|  | apply from: "gradle/spotless.gradle" | 
|  | apply from: "gradle/ide.gradle" | 
|  | apply from: "gradle/rat.gradle" | 
|  | apply from: "gradle/release.gradle" |