blob: f24ee350b385ca9b44b32960d595e30bee0cf073 [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.
*/
plugins {
id 'me.champeau.buildscan-recipes' version '0.2.3'
id 'com.github.ben-manes.versions' version '0.51.0'
id 'com.github.blindpirate.osgi' version '0.0.7'
id 'com.github.jk1.dependency-license-report' version '2.7'
id 'org.sonarqube' version '5.0.0.4638'
id 'org.apache.groovy-core'
id 'java-test-fixtures'
id 'org.apache.groovy-jacoco-aggregation'
}
buildScanRecipes {
recipe 'git-commit', baseUrl: 'https://github.com/apache/groovy/tree'
recipe 'teamcity', baseUrl: 'https://ci.groovy-lang.org', guest: 'true'
recipes 'git-status', 'gc-stats', 'teamcity', 'travis-ci'
}
base {
archivesName = 'groovy'
}
groovyLibrary {
registerOptionalFeature 'gpars'
registerOptionalFeature 'grapes'
registerOptionalFeature 'logging'
registerOptionalFeature 'xstreamAst'
repackagedDependencies = [
'antlr', 'antlr-runtime', 'antlr4', 'antlr4-runtime', 'antlr4-annotations',
'asm', 'asm-commons', 'asm-tree', 'asm-util', 'picocli'
]
withGrooid(
"org.apache.groovy:groovy-grooid:${sharedConfiguration.groovyVersion.get()}",
['openbeans'] as Set,
[
'com.googlecode.openbeans.**': 'groovyjarjaropenbeans.@1',
'org.apache.harmony.beans.**': 'groovyjarjarharmonybeans.@1',
'java.beans.**': 'groovyjarjaropenbeans.@1'
],
[
'*': ['META-INF/NOTICE']
],
['META-INF/NOTICE', 'META-INF/INDEX.LIST'],
[
(project.relativePath(rootProject.file('notices/NOTICE-GROOIDJARJAR'))): 'META-INF/NOTICE'
]
)
}
groovyCore {
def supportClasses = ['Boolean','Char','Byte','Short','Int','Long','Float','Double'].collect {
'org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport$'+it+'ArrayStaticTypesHelper'
}
bridgedClasses *supportClasses,
'org.codehaus.groovy.classgen.Verifier',
'org.codehaus.groovy.ast.tools.GeneralUtils',
'org.codehaus.groovy.ast.stmt.TryCatchStatement',
'org.codehaus.groovy.runtime.StringGroovyMethods',
'org.codehaus.groovy.runtime.DefaultGroovyMethods',
'org.codehaus.groovy.transform.stc.DefaultTypeCheckingExtension'
excludeFromJavadoc '**/GroovyRecognizer.java', '*.g4' // generated file
}
dependencies {
// for internal CLI usage
api "info.picocli:picocli:${versions.picocli}" // marked as api but manually excluded later in assemble.gradle - modules will use shaded version
// for internal usage of things like Opcode
api "org.ow2.asm:asm:${versions.asm}" // marked as api but manually excluded later in assemble.gradle - modules will use shaded version
// for internal usage by the parser but manually excluded later in assemble.gradle - modules will use shaded version
implementation "org.ow2.asm:asm-analysis:${versions.asm}"
implementation "org.ow2.asm:asm-commons:${versions.asm}"
implementation "org.ow2.asm:asm-tree:${versions.asm}"
implementation "org.ow2.asm:asm-util:${versions.asm}"
implementation "me.champeau.openbeans:openbeans:${versions.openbeans}"
implementation "me.sunlan:antlr4-runtime:${versions.antlr4}"
antlr "me.sunlan:antlr4:${versions.antlr4}"
gparsImplementation "org.codehaus.gpars:gpars:${versions.gpars}", {
exclude(group: 'org.codehaus.groovy', module: 'groovy-all')
}
grapesImplementation "org.apache.ivy:ivy:${versions.ivy}", {
transitive = false
}
loggingImplementation "org.fusesource.jansi:jansi:${versions.jansi}"
xstreamAstImplementation "com.thoughtworks.xstream:xstream:${versions.xstream}", {
exclude(group: 'xpp3' , module: 'xpp3_min')
exclude(group: 'junit' , module: 'junit' )
exclude(group: 'jmock' , module: 'jmock' )
exclude(group: 'xmlpull', module: 'xmlpull' )
}
testImplementation projects.groovyAnt
testImplementation projects.groovyXml
testImplementation projects.groovyJson
testImplementation projects.groovyTest
testImplementation projects.groovyMacro
testImplementation projects.groovyDateutil
testImplementation "net.jcip:jcip-annotations:${versions.jcipAnnotations}"
testImplementation "ch.qos.logback:logback-classic:${versions.logback}"
testImplementation "log4j:log4j:${versions.log4j}"
testImplementation "org.apache.logging.log4j:log4j-core:${versions.log4j2}"
testImplementation "org.slf4j:jcl-over-slf4j:${versions.slf4j}"
testImplementation "com.thoughtworks.qdox:qdox:${versions.qdox}"
testImplementation "com.fasterxml.jackson.core:jackson-databind:${versions.jacksonDatabind}"
testImplementation "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${versions.jackson}"
testImplementation "com.fasterxml.jackson.core:jackson-annotations:${versions.jackson}"
testFixturesImplementation projects.groovyXml
testFixturesImplementation projects.groovyTest
testFixturesImplementation "xmlunit:xmlunit:${versions.xmlunit}"
tools "com.eed3si9n.jarjar:jarjar:${versions.jarjar}"
tools "org.jboss.bridger:bridger:${versions.bridger}"
tools "org.ow2.asm:asm:${versions.asm}"
tools "com.thoughtworks.qdox:qdox:${versions.qdox}"
spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.13.0'
testRuntimeOnly "org.slf4j:slf4j-simple:${versions.slf4j}"
testRuntimeOnly(project(':')) {
because 'Tests are using Grapes'
capabilities {
requireCapability 'org.apache.groovy:groovy-grapes'
}
}
}
configurations {
javadocClasspath.extendsFrom(
loggingImplementation,
xstreamAstImplementation,
gparsImplementation,
grapesImplementation
)
groovyCompilerClasspath {
extendsFrom(implementation, compileOnly, grapesImplementation, loggingImplementation, xstreamAstImplementation, runtimeOnly)
}
}
allprojects {
tasks.withType(AbstractCopyTask).configureEach {
it.duplicatesStrategy = DuplicatesStrategy.WARN
}
}
tasks.named('jar') {
metaInf {
from("$projectDir/licenses/LICENSE-JARJAR")
from("$projectDir/licenses") {
into('licenses')
include('asm-license.txt')
include('antlr4-license.txt')
}
from("$projectDir/notices/NOTICE-JARJAR")
rename '^([A-Z]+)-([^.]*)', '$1'
}
exclude '**/package-info.class'
}
// some tests require Jars, but those are not allowed in the source directory
// by the Apache policy, so we need to build them and add them to the test
// resources classpath
def extModuleFixtureDir = project.layout.projectDirectory.dir("src/test-fixtures/extmodule")
def extModuleOutputDir = project.layout.buildDirectory.dir("testFixtures/extmodule")
def extModuleRepoDir = extModuleOutputDir.map { it.dir("repo") }
def compileTestExtensionModule = tasks.register("compileTestExtensionModule", JavaCompile) {
classpath = files(tasks.named('jar'))
source fileTree(extModuleFixtureDir.dir("src/main/java"))
destinationDirectory = extModuleOutputDir.map { it.dir("classes") }
sourceCompatibility = sharedConfiguration.targetJavaVersion.get()
targetCompatibility = sharedConfiguration.targetJavaVersion.get()
}
def testExtensionModuleJar = tasks.register("testExtensionModuleJar", Jar) {
description = 'Builds a sample extension module used in tests'
archiveBaseName = 'module-test'
archiveVersion = '1.4'
from compileTestExtensionModule
from extModuleFixtureDir.dir("src/main/resources")
// emulate Maven repo format for output
destinationDirectory = extModuleRepoDir.map { it.dir("jars/module-test/module-test/${archiveVersion.get()}") }
}
dependencies {
testRuntimeOnly files(extModuleRepoDir)
}
tasks.named('test') {
dependsOn testExtensionModuleJar
}
if (!JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_16)) {
logger.lifecycle '''
************************************* WARNING ***********************************************
**** You're running the build with an older JDK. NEVER try to release with an old JDK! ****
**** You must use a JDK 16+ in order to compile all features of the language. ****
*********************************************************************************************
'''
}
apply from: 'gradle/licenses.gradle'
// CC: This can probably be removed as the native IDEA import
// works pretty nice, but it's up to the Groovy devs to decide
apply from: 'gradle/idea.gradle'
apply from: 'gradle/eclipse.gradle'
// If a local configuration file for tweaking the build is present, apply it
if (file('user.gradle').exists()) {
apply from: 'user.gradle'
}
licenseReport {
excludeGroups = [
'org.multiverse' // we never include this optional dependency of an optional dependency
]
}
sonarqube {
properties {
property "sonar.projectName", "Apache Groovy"
property "sonar.projectKey", "apache_groovy"
property "sonar.organization", "apache"
property "sonar.host.url", "https://sonarcloud.io"
property "sonar.cpd.exclusions", "**/*"
// property "sonar.coverage.jacoco.xmlReportPaths", layout.buildDirectory.file("reports/jacoco/jacocoAllReport/jacocoAllReport.xml").get().asFile.absolutePath
}
}
def UNSTABLE = /^([\d.-]+(alpha|beta|rc|m)[\d.-]+(groovy[\d.-]+)?|20030203.000550|20031129.200437|200404\d\d|2004-03-19)$/
// ignore non-stable releases
tasks.named("dependencyUpdates")?.configure {
gradleReleaseChannel = 'current'
rejectVersionIf {
!(it.currentVersion.toLowerCase() ==~ UNSTABLE) && it.candidate.version.toLowerCase() ==~ UNSTABLE
}
}
artifacts {
grapesRuntimeElements file: jar.archiveFile.get().asFile, type: 'jar'
xstreamAstRuntimeElements file: jar.archiveFile.get().asFile, type: 'jar'
gparsRuntimeElements file: jar.archiveFile.get().asFile, type: 'jar'
loggingRuntimeElements file: jar.archiveFile.get().asFile, type: 'jar'
}