1/* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18import java.time.ZonedDateTime 19import java.time.format.DateTimeFormatter 20 21plugins { 22 id "base" 23 id "com.palantir.consistent-versions" version "2.10.0" 24 id "org.owasp.dependencycheck" version "5.3.0" 25 id 'de.thetaphi.forbiddenapis' version '3.3' apply false 26 id "de.undercouch.download" version "4.1.1" apply false 27 id "net.ltgt.errorprone" version "2.0.2" apply false 28 id 'com.diffplug.spotless' version "6.5.0" apply false 29} 30 31apply from: file('gradle/globals.gradle') 32 33// General metadata. 34 35// Calculate project version: 36version = { 37 // Release manager: update base version here after release: 38 String baseVersion = '10.0.0' 39 40 // On a release explicitly set release version in one go: 41 // -Dversion.release=x.y.z 42 43 // Jenkins can just set just a suffix, overriding SNAPSHOT, e.g. using build id: 44 // -Dversion.suffix=jenkins123 45 46 String versionSuffix = propertyOrDefault('version.suffix', 'SNAPSHOT') 47 return propertyOrDefault('version.release', "${baseVersion}-${versionSuffix}") 48}() 49description = 'Grandparent project for Apache Lucene Core' 50 51// Propagate version and derived properties across projects. 52allprojects { 53 version = rootProject.version 54} 55 56ext { 57 // "base" version is stripped of the qualifier. Compute it. 58 baseVersion = { 59 def m = (version =~ /^(\d+\.\d+\.\d+)(-(.+))?/) 60 if (!m) { 61 throw new GradleException("Can't strip version to just x.y.z: " + rootProject.version) 62 } 63 return m[0][1] 64 }() 65 // "majorVersion" is an integer with just the major version. Compute it. 66 majorVersion = { 67 def m = (version =~ /^(\d+)\.\d+\.\d+(-(.+))?/) 68 if (!m) { 69 throw new GradleException("Can't strip version to just major version: " + rootProject.version) 70 } 71 return m[0][1] as int 72 } 73 74 // Minimum Java version required to compile and run Lucene. 75 minJavaVersion = JavaVersion.VERSION_17 76 77 // snapshot build marker used in scripts. 78 snapshotBuild = version.contains("SNAPSHOT") 79 80 // Build timestamp. 81 def tstamp = ZonedDateTime.now() 82 buildDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(tstamp) 83 buildTime = DateTimeFormatter.ofPattern("HH:mm:ss").format(tstamp) 84 buildYear = DateTimeFormatter.ofPattern("yyyy").format(tstamp) 85 86 // Allow definiting external tool locations using system props. 87 externalTool = { name -> 88 def resolved = propertyOrDefault("${name}.exe", name as String) 89 logger.info("External tool '${name}' resolved to: ${resolved}") 90 return resolved 91 } 92} 93 94configurations { 95 groovy 96} 97 98dependencies { 99 // Use a newer groovy that doesn't have illegal reflective accesses. 100 groovy "org.codehaus.groovy:groovy-all:3.0.9" 101} 102 103apply from: file('buildSrc/scriptDepVersions.gradle') 104 105// Include smaller chunks configuring dedicated build areas. 106// Some of these intersect or add additional functionality. 107// The order of inclusion of these files shouldn't matter (but may 108// if the build file is incorrectly written and evaluates something 109// eagerly). 110 111apply from: file('gradle/generation/local-settings.gradle') 112 113// IDE support, settings and specials. 114apply from: file('gradle/ide/intellij-idea.gradle') 115apply from: file('gradle/ide/eclipse.gradle') 116 117// Set up defaults and configure aspects for certain modules or functionality 118// (java, tests) 119apply from: file('gradle/java/folder-layout.gradle') 120apply from: file('gradle/java/javac.gradle') 121apply from: file('gradle/testing/defaults-tests.gradle') 122apply from: file('gradle/testing/randomization.gradle') 123apply from: file('gradle/testing/fail-on-no-tests.gradle') 124apply from: file('gradle/testing/alternative-jdk-support.gradle') 125apply from: file('gradle/java/jar-manifest.gradle') 126apply from: file('gradle/java/modules.gradle') 127 128// Maven artifact publishing. 129apply from: file('gradle/maven/publications.gradle') 130 131// Validation tasks 132apply from: file('gradle/validation/measure-task-times.gradle') 133apply from: file('gradle/validation/error-prone.gradle') 134apply from: file('gradle/validation/precommit.gradle') 135apply from: file('gradle/validation/forbidden-apis.gradle') 136apply from: file('gradle/validation/jar-checks.gradle') 137apply from: file('gradle/validation/git-status.gradle') 138apply from: file('gradle/validation/versions-props-sorted.gradle') 139apply from: file('gradle/validation/validate-source-patterns.gradle') 140apply from: file('gradle/validation/rat-sources.gradle') 141apply from: file('gradle/validation/owasp-dependency-check.gradle') 142apply from: file('gradle/validation/ecj-lint.gradle') 143apply from: file('gradle/validation/gradlew-scripts-tweaked.gradle') 144 145apply from: file('gradle/validation/spotless.gradle') 146 147// Source or data regeneration tasks 148apply from: file('gradle/generation/regenerate.gradle') 149apply from: file('gradle/generation/jflex.gradle') 150apply from: file('gradle/generation/moman.gradle') 151apply from: file('gradle/generation/snowball.gradle') 152apply from: file('gradle/generation/kuromoji.gradle') 153apply from: file('gradle/generation/nori.gradle') 154apply from: file('gradle/generation/icu.gradle') 155apply from: file('gradle/generation/javacc.gradle') 156apply from: file('gradle/generation/forUtil.gradle') 157apply from: file('gradle/generation/antlr.gradle') 158 159apply from: file('gradle/datasets/external-datasets.gradle') 160 161// Shared configuration of subprojects containing native code. 162apply from: file('gradle/native/disable-native.gradle') 163 164// Additional development aids. 165apply from: file('gradle/testing/per-project-summary.gradle') 166apply from: file('gradle/testing/slowest-tests-at-end.gradle') 167apply from: file('gradle/testing/failed-tests-at-end.gradle') 168apply from: file('gradle/testing/profiling.gradle') 169apply from: file('gradle/testing/beasting.gradle') 170apply from: file('gradle/testing/coverage.gradle') 171apply from: file('gradle/help.gradle') 172 173apply from: file('gradle/documentation/documentation.gradle') 174apply from: file('gradle/documentation/changes-to-html.gradle') 175apply from: file('gradle/documentation/markdown.gradle') 176apply from: file('gradle/documentation/render-javadoc.gradle') 177apply from: file('gradle/documentation/check-broken-links.gradle') 178 179apply from: file('gradle/hacks/gradle-archives.gradle') 180apply from: file('gradle/hacks/wipe-temp.gradle') 181apply from: file('gradle/hacks/hashmapAssertions.gradle') 182apply from: file('gradle/hacks/turbocharge-jvm-opts.gradle') 183apply from: file('gradle/hacks/dummy-outputs.gradle') 184 185apply from: file('gradle/pylucene/pylucene.gradle') 186