Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
47 contributors

Users who have contributed to this file

@graemerocher @jeffbrown @lhotari @ldaley @jameskleeh @bobbywarner @ilopmar @erichelgeson @sdelamo @burtbeckwith @pledbrook @zyro23 @hansd @sarmbruster @smartiniOnGitHub @candrews @nobeans @tombujok @smaldini @pjungermann @hauner @SpencerMalone @johnrengelman @joemccall86 @ganta @davydotcom
612 lines (541 sloc) 21.8 KB
buildscript {
repositories {
maven { url "https://repo.grails.org/grails/core" }
jcenter()
maven { url 'https://dl.bintray.com/vermeulen-mp/gradle-plugins' }
}
dependencies {
classpath "commons-io:commons-io:2.2"
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4"
classpath "com.netflix.nebula:gradle-extra-configurations-plugin:2.2.0"
classpath "com.github.adrianbk:gradle-travisci-trigger-plugin:1.0.0"
classpath "com.bmuschko:gradle-nexus-plugin:$gradleNexusPluginVersion"
classpath "gradle.plugin.io.sdkman:gradle-sdkvendor-plugin:$gradleSdkVendorVersion"
classpath "io.github.groovylang.groovydoc:groovydoc-gradle-plugin:1.0.1"
classpath "javax.xml.bind:jaxb-api:$jaxbVersion"
classpath "com.sun.xml.bind:jaxb-impl:$jaxbVersion"
classpath "org.codehaus.groovy.modules.http-builder:http-builder:0.7.1"
}
}
import groovyx.net.http.RESTClient
import static groovyx.net.http.ContentType.*
apply plugin: 'idea'
ext {
isJava8Compatible = org.gradle.api.JavaVersion.current().isJava8Compatible()
bintrayPublish = false
// Sets release version
grailsVersion = '4.0.0.BUILD-SNAPSHOT'
// grailsVersion = '4.0.0.RC2'
groovyVersion = System.getenv('CI_GROOVY_VERSION') ?: "2.5.6"
// grailsVersion = '4.0.0'
isBuildSnapshot = grailsVersion.endsWith(".BUILD-SNAPSHOT")
isTravisBuild = System.getenv().get("TRAVIS") == 'true'
dependencyVersions = [
'javax.annotation-api': [
version: javaxAnnotationApiVersion,
group:'javax.annotation',
name:'javax.annotation',
modules:['api']
],
'micronaut': [
version: micronautVersion,
group:'io.micronaut',
names:['micronaut'],
modules:['spring','inject','runtime', 'inject-groovy', 'inject-java', 'core', 'http-client', 'http', 'buffer-netty', 'http-netty']
],
'micronaut.spring': [
version: micronautSpringVersion,
group:'io.micronaut.spring',
names:['micronaut-spring'],
modules:['context','boot', 'web', 'boot-annotation', 'annotation', 'web-annotation']
],
gorm: [
version: datastoreVersion,
group : 'org.grails',
names : ['grails-datastore'],
modules: ['async','core', 'web', 'gorm','gorm-async','gorm-support', 'gorm-rx', 'gorm-test', 'gorm-validation']
],
'gorm.hibernate': [
version: hibernateDatastoreVersion,
group : 'org.grails',
names : ['grails-datastore-gorm-hibernate5']
],
'scaffolding-core': [
version: scaffoldingCoreVersion,
group : 'org.grails',
names : ['scaffolding'],
modules: ['core']
],
groovy: [
version: groovyVersion,
group : 'org.codehaus.groovy',
names : ['groovy'],
modules: ['', 'xml', 'swing', 'console', 'json', 'ant', 'sql', 'templates', 'nio', 'dateutil', 'macro']
],
spring: [
version: springVersion,
group : 'org.springframework',
names : ['spring'],
modules: ['aop', 'aspects', 'beans', 'context-support', 'context', 'core', 'expression', 'instrument', 'jdbc', 'jms', 'messaging', 'orm', 'oxm', 'test', 'tx', 'web', 'webmvc', 'websocket']
],
directoryWatcher: [
version: directoryWatcherVersion,
group : 'io.methvin',
names : ['directory-watcher'],
modules: ['']
],
async: [
version: asyncVersion,
group : 'org.grails.plugins',
names : ['async', 'events'],
modules: ['']
],
asyncImpls: [
version: asyncVersion,
group : 'org.grails',
names : ['grails-async', 'grails-events'],
modules: ['gpars', 'rxjava', 'rxjava2']
],
spock: [
version: spockVersion,
group : 'org.spockframework',
names : ['spock-core', 'spock-spring'],
modules: ['']
],
gsp: [
version: gspVersion,
group : 'org.grails.plugins',
names : ['gsp'],
modules: ['']
],
testingSupport: [
version: testingSupportVersion,
group : 'org.grails',
names : ['grails-testing-support', 'grails-gorm-testing-support', 'grails-web-testing-support'],
modules: ['']
],
]
nexusUsername = System.getenv("SONATYPE_USERNAME") ?: project.hasProperty("sonatypeOssUsername") ? project.sonatypeOssUsername : ''
nexusPassword = System.getenv("SONATYPE_PASSWORD") ?: project.hasProperty("sonatypeOssPassword") ? project.sonatypeOssPassword : ''
}
version = grailsVersion
group = "org.grails"
// directories created during the build which are related
// to turning the workspace root into a GRAILS_HOME
ext {
distInstallDir = file("$buildDir/dist-tmp")
homeDistDir = file("dist")
homeBinDir = file("bin")
homeConfDir = file("conf")
homeLibDir = file("lib")
homeSrcDir = file("src")
}
// Groovy is added as a dependency to both the 'groovy' and 'compile'
// configurations, so place the dependency in a shared variable. The
// 'compile' is required so that Groovy appears as a dependency in the
// artifacts' POMs.
ext.jointBuildGroovyJarProperty = System.getProperty('groovy.jar')
ext.groovyDependency = null
if (jointBuildGroovyJarProperty) {
def jointBuildGroovyJar = file(jointBuildGroovyJarProperty)
if (jointBuildGroovyJar.exists()) {
groovyDependency = dependencies.create(files(jointBuildGroovyJar))
} else {
throw new GradleException("The groovy.jar system property points to ${jointBuildGroovyJar.absolutePath} which does not exist.")
}
} else {
groovyDependency = dependencies.create("org.codehaus.groovy:groovy:${groovyVersion}") {
exclude module:"commons-cli"
exclude module:"ant"
}
}
allprojects {
repositories {
mavenLocal()
maven { url "https://repo.grails.org/grails/core" }
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
if(groovyVersion.endsWith('-SNAPSHOT')) {
maven {
name 'JFrog OSS snapshot repo'
url 'https://oss.jfrog.org/oss-snapshot-local/'
}
}
}
configurations {
all {
resolutionStrategy {
def cacheHours = isCiBuild ? 0 : 24
cacheDynamicVersionsFor cacheHours, 'hours'
cacheChangingModulesFor cacheHours, 'hours'
eachDependency { DependencyResolveDetails details ->
//specifying a fixed version for all libraries with 'org.gradle' group
if (details.requested.group == 'org.codehaus.groovy') {
details.useVersion groovyVersion
}
}
}
}
}
[Javadoc, Groovydoc].each {
tasks.withType(it).all {
// exclude problematic jar file from javadoc classpath
// http://www.adam-bien.com/roller/abien/entry/trouble_with_crippled_java_ee
if (classpath) {
classpath -= classpath.filter { it.name == 'javaee-web-api-6.0.jar' }
}
// this will apply the javadoc fix tool to all generated javadocs
// we use it to make sure that the javadocs are not vulnerable independently of the JDK used to build
doLast {
def javadocFix = new JavadocFixTool()
javadocFix.recursive = true
javadocFix.doPatch = true
javadocFix.searchAndPatch(destinationDir)
}
}
}
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
}
}
apply from: "gradle/idea.gradle"
subprojects { project ->
version = grailsVersion
group = "org.grails"
configurations {
documentation
}
ext.isTestSuite = project.name.startsWith("grails-test-suite")
ext.isCiBuild = project.hasProperty("isCiBuild")
ext.pomInfo = {
delegate.name 'Grails'
delegate.description 'Grails Web Application Framework'
delegate.url 'http://grails.org/'
delegate.licenses {
delegate.license {
delegate.name 'The Apache Software License, Version 2.0'
delegate.url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
delegate.distribution 'repo'
}
}
delegate.scm {
delegate.url 'scm:git@github.com:grails/grails-core.git'
delegate.connection 'scm:git@github.com:grails/grails-core.git'
delegate.developerConnection 'scm:git@github.com:grails/grails-core.git'
}
delegate.developers {
delegate.developer {
delegate.id 'graemerocher'
delegate.name 'Graeme Rocher'
}
delegate.developer {
delegate.id 'jeffscottbrown'
delegate.name 'Jeff Brown'
}
delegate.developer {
delegate.id 'lhotari'
delegate.name 'Lari Hotari'
}
}
}
if(!project.hasProperty("artifactoryPublishPassword") && System.getenv("ARTIFACTORY_PASSWORD")) {
project.ext.artifactoryPublishPassword = System.getenv("ARTIFACTORY_PASSWORD")
}
apply plugin: 'groovy'
apply plugin: "io.github.groovylang.groovydoc"
if(!isTestSuite) {
apply plugin: 'com.bmuschko.nexus'
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.bintray'
}
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'project-report'
apply plugin: 'provided-base'
apply plugin: 'optional-base'
if (!isTestSuite) {
modifyPom {
delegate.project {
def updatePom = pomInfo.clone()
updatePom.delegate = delegate
updatePom()
}
}
publishing {
repositories {
maven {
credentials {
def u = System.getenv("ARTIFACTORY_USERNAME") ?: project.hasProperty("artifactoryPublishUsername") ? project.artifactoryPublishUsername : ''
def p = System.getenv("ARTIFACTORY_PASSWORD") ?: project.hasProperty("artifactoryPublishPassword") ? project.artifactoryPublishPassword : ''
username = u
password = p
}
if (isBuildSnapshot) {
url "https://repo.grails.org/grails/libs-snapshots-local"
} else {
url "https://repo.grails.org/grails/libs-releases-local"
}
}
}
if(project.name == 'grails-dependencies') return
if(project.name == 'grails-bom') return
publications {
maven(MavenPublication) {
from components.java
afterEvaluate {
artifact source: sourcesJar, classifier: "sources"
artifact source: javadocJar, classifier: "javadoc"
}
pom.withXml {
def xml = asNode()
xml.children().last() + pomInfo
}
}
}
}
bintray {
user = System.getenv("BINTRAY_USER") ?: project.hasProperty("bintrayUser") ? project.bintrayUser : ''
key = System.getenv("BINTRAY_KEY") ?: project.hasProperty("bintrayKey") ? project.bintrayKey : ''
publications = ['maven']
publish = true
dryRun = false
pkg {
repo = 'grails-core'
userOrg = 'grails'
name = 'grails-core'
desc = 'Grails Framework'
websiteUrl = 'http://grails.org'
issueTrackerUrl = 'https://github.com/grails/grails-core/issues'
vcsUrl = 'https://github.com/grails/grails-core'
licenses = ['Apache-2.0']
publicDownloadNumbers = true
version {
name = project.version
gpg {
sign = true
passphrase = System.getenv("SIGNING_PASSPHRASE") ?: project.hasProperty("signingPassphrase") ? project.signingPassphrase : ''
}
mavenCentralSync {
sync = false
def ossUser = System.getenv("SONATYPE_USERNAME") ?: project.hasProperty("sonatypeOssUsername") ? project.sonatypeOssUsername : ''
def ossPass = System.getenv("SONATYPE_PASSWORD") ?: project.hasProperty("sonatypeOssPassword") ? project.sonatypeOssPassword : ''
user = ossUser
password = ossPass
}
}
}
}
}
if(project.name == 'grails-dependencies') return
if(project.name == 'grails-bom') return
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
if(project.name =~ /^(grails-web|grails-plugin-|grails-project-api|grails-test-suite|grails-test|grails-compat)/) {
dependencies {
provided "javax.servlet:javax.servlet-api:$servletApiVersion"
// MockHttpServletRequest/Response/Context used in many classes
provided("org.springframework:spring-test:${springVersion}") {
exclude group: 'commons-logging', module:'commons-logging'
}
}
}
if(project.name =~ /^(grails-plugin-datasource|grails-test-suite)/) {
dependencies {
provided 'hsqldb:hsqldb:1.8.0.10'
provided "com.h2database:h2:$h2Version"
}
}
jar{
manifest.mainAttributes(
"Built-By": System.properties['user.name'],
"Created-By": System.properties['java.vm.version'] + " (" + System.properties['java.vm.vendor'] + ")",
"Implementation-Title": "Grails",
"Implementation-Version": grailsVersion,
"Implementation-Vendor": 'grails.org')
}
configure([compileGroovy, compileTestGroovy]) {
groovyOptions.fork(jvmArgs: ['-XX:MaxPermSize=512m'], memoryInitialSize: '128M', memoryMaximumSize: '1G')
groovyOptions.encoding = "UTF-8"
options.encoding = "UTF-8"
}
configure([compileJava, compileTestJava]) {
options.deprecation = true
options.debug = true
}
configure([groovydoc]) {
onlyIf {
!isTestSuite
}
classpath += configurations.documentation
jvmArgs "-Xmx512M"
}
configure([javadoc]) {
onlyIf {
!isTestSuite
}
options.encoding "UTF-8"
options.docEncoding "UTF-8"
options.charSet "UTF-8"
options.jFlags "-Xms64M", "-Xmx512M"
}
dependencies {
documentation("org.fusesource.jansi:jansi:$jansiVersion")
documentation("jline:jline:$jlineVersion")
documentation "org.codehaus.groovy:groovy-ant:$groovyVersion"
documentation "org.codehaus.groovy:groovy-cli-picocli:$groovyVersion"
compile groovyDependency
testCompile "org.codehaus.groovy:groovy-test:${groovyVersion}", {
exclude group:'junit', module: 'junit'
exclude group:'org.codehaus.groovy', module: 'groovy'
exclude group:'org.hamcrest', module: 'hamcrest-core'
}
if (project.name != "grails-docs") {
// Logging
compile "org.slf4j:slf4j-api:$slf4jVersion"
compile "org.slf4j:jcl-over-slf4j:$slf4jVersion"
// Testing
testCompile "junit:junit:${junitVersion}"
testCompile "org.slf4j:slf4j-simple:$slf4jVersion"
testCompile("org.spockframework:spock-core:${spockVersion}") {
transitive = false
exclude group:'junit', module: 'junit-dep'
exclude group:'org.codehaus.groovy', module: 'groovy-all'
}
// Required by Spock's Mocking
testCompile "cglib:cglib-nodep:${cglibVersion}"
testCompile "org.objenesis:objenesis:${objenesisVersion}"
}
}
def debugArguments = ['-Xmx2g', '-Xdebug', '-Xnoagent', '-Djava.compiler=NONE',
'-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005']
test {
excludes = ["**/*TestCase.class", "**/*\$*.class"]
if (isTravisBuild) {
maxParallelForks = 2
maxHeapSize = '768m'
afterSuite {
System.out.print('.')
System.out.flush()
}
} else {
maxHeapSize = '1024m'
}
if(System.getProperty("debug.tests")) {
jvmArgs debugArguments
}
}
task singleTest(type: Test) {
// task for running a single test with -DsingleTest.single=TestName singleTest
if(System.getProperty("debug.tests")) {
jvmArgs debugArguments
}
}
configurations {
meta
published.extendsFrom archives, meta
all*.exclude group:'commons-logging', module: 'commons-logging'
}
if(!isTestSuite) {
task installToHomeDist(type: Upload) {
configuration = configurations.archives
repositories {
flatDir name: 'libs', dirs: distInstallDir
}
}
project.tasks.withType(org.gradle.api.publish.maven.tasks.PublishToMavenLocal) { org.gradle.api.publish.maven.tasks.PublishToMavenLocal t ->
t.dependsOn installToHomeDist
t.doLast {
ant.copy(todir: homeDistDir, flatten: true, includeEmptyDirs: false) {
fileset dir: distInstallDir
}
}
}
}
}
task clean(type: Delete) {
delete buildDir,
homeBinDir,
homeConfDir,
homeDistDir,
homeLibDir,
homeSrcDir
}
def bintrayUser = System.getenv("BINTRAY_USER") ?: project.hasProperty("bintrayUser") ? project.bintrayUser : ''
def bintrayKey = System.getenv("BINTRAY_KEY") ?: project.hasProperty("bintrayKey") ? project.bintrayKey : ''
def ossUser = System.getenv("SONATYPE_USERNAME") ?: project.hasProperty("sonatypeOssUsername") ? project.sonatypeOssUsername : ''
def ossPass = System.getenv("SONATYPE_PASSWORD") ?: project.hasProperty("sonatypeOssPassword") ? project.sonatypeOssPassword : ''
task synchronizeWithMavenCentral() {
description = "Syncs with Maven Central/Sonatype"
doLast {
println """
Synchronizing with Maven central. This may take a few minutes ...
If this fails, log on to http://oss.sonatype.org/ using the centralUser credentials
and progress through process manually -> Close -> Publish ... under staging repositories
"""
try {
// doesn't exist.. try sync
def client = new RESTClient('https://api.bintray.com/maven_central_sync/grails/grails-core/')
client.headers['Authorization'] = 'Basic ' + "$bintrayUser:$bintrayKey".getBytes('iso-8859-1').encodeBase64()
def body = /{}/
def resp = client.post(
path: "grails-core/versions/$grailsVersion",
body: body,
requestContentType: JSON
)
assert resp.status == 200
println resp.data.status
println resp.data.messages.join('\n')
} catch (groovyx.net.http.HttpResponseException e) {
println "Error: $e"
println "Message: $e.message"
println "Body: $e.response.data"
throw e
}
}
}
// From this point on we need the subprojects to be fully configured, so force their full evaluation
subprojects.each {
if (it.tasks.findByName('install') && it.tasks.findByName('publishToMavenLocal')) {
it.tasks.findByName('install').finalizedBy(it.tasks.findByName('publishToMavenLocal'))
}
evaluationDependsOn it.path
}
apply {
from 'gradle/docs.gradle' // tasks for building the documentation (e.g. user guide, javadocs)
from 'gradle/assemble.gradle' // tasks for creating an installation or distribution
from 'gradle/findbugs.gradle'
}
apply plugin: "com.github.adrianbk.tcitrigger"
tciTrigger {
gitHubRepo 'grails/grails3-functional-tests'
}
task buildscriptDependencies(type: org.gradle.api.tasks.diagnostics.DependencyReportTask) {
configurations = project.buildscript.configurations
}
[Javadoc, Groovydoc, org.groovy.lang.groovydoc.tasks.GroovydocTask].each {
tasks.withType(it).all {
// exclude problematic jar file from javadoc classpath
// http://www.adam-bien.com/roller/abien/entry/trouble_with_crippled_java_ee
if (classpath) {
classpath -= classpath.filter { it.name == 'javaee-web-api-6.0.jar' }
}
}
}
project.afterEvaluate {
allprojects.repositories.each { handler ->
handler.each {
if (it.url.toString().startsWith("http://")) {
throw new RuntimeException("Build should not define insecure HTTP-based Maven repostories")
}
}
}
}
apply plugin: "io.sdkman.vendors"
sdkman {
api = "https://vendors.sdkman.io"
consumerKey = System.getenv("GVM_SDKVENDOR_KEY") ?: project.hasProperty("gvmSdkvendorKey") ? project.gvmSdkvendorKey : ''
consumerToken = System.getenv("GVM_SDKVENDOR_TOKEN") ?: project.hasProperty("gvmSdkvendorToken") ? project.gvmSdkvendorToken : ''
candidate = "grails"
version = project.version
url = "https://github.com/grails/grails-core/releases/download/v${project.version}/grails-${project.version}.zip"
hashtag = "#grailsfw"
}
You can’t perform that action at this time.