blob: 8c46d0e61478b245487543e530b5d7ef6a55b392 [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.
*/
import org.apache.groovy.gradle.DistributionExtension
import org.apache.groovy.gradle.DocGDK
plugins {
id 'jvm-ecosystem'
id 'org.apache.groovy-common'
id 'org.apache.groovy-aggregating-project'
id 'org.apache.groovy-doc-aggregator'
id 'org.asciidoctor.jvm.pdf'
}
def distributionExtension = project.extensions.create('distribution', DistributionExtension, project)
configurations {
baseProjects {
canBeConsumed = false
canBeResolved = false
}
distributions {
extendsFrom baseProjects
canBeConsumed = false
canBeResolved = false
}
distributionsRuntimeClasspath {
canBeConsumed = false
canBeResolved = true
extendsFrom distributions
attributes {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.LIBRARY))
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling, Bundling.EXTERNAL))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, LibraryElements.JAR))
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.JAVA_RUNTIME))
attribute(Attribute.of("org.apache.groovy.internal", Boolean), false)
}
}
doc
allAsciidoc {
extendsFrom baseProjects
canBeConsumed = false
canBeResolved = true
attributes {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.DOCUMENTATION))
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named(DocsType, DocsType.USER_MANUAL))
}
}
docgeneratorTool {
canBeConsumed = false
canBeResolved = true
attributes {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, Category.LIBRARY))
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling, Bundling.EXTERNAL))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements, LibraryElements.JAR))
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage, Usage.JAVA_RUNTIME))
}
}
allSources {
extendsFrom baseProjects
}
allSourcesRuntimeClasspath {
extendsFrom baseProjects
}
}
dependencies {
rootProject.allprojects {
if (pluginManager.hasPlugin('org.apache.groovy-base')) {
baseProjects(it)
}
}
// also include optional features from main module
distributions(project(":")) {
capabilities {
requireCapability 'org.apache.groovy:groovy-xstream-ast'
}
}
distributions(project(":")) {
capabilities {
requireCapability 'org.apache.groovy:groovy-gpars'
}
}
distributions(project(":")) {
capabilities {
requireCapability 'org.apache.groovy:groovy-grapes'
}
}
distributions(project(":")) {
capabilities {
requireCapability 'org.apache.groovy:groovy-logging'
}
}
doc project(":groovy-all")
docgeneratorTool project(":groovy-docgenerator")
}
def docGDK = tasks.register('docGDK', DocGDK) {
classpath.from configurations.docgeneratorTool
classes.set(distributionExtension.docgeneratorClasses)
resources.from project(':groovy-docgenerator').file('src/main/resources/org/apache/groovy/docgenerator/groovy.ico')
resources.from project(':groovy-docgenerator').file('src/main/resources/org/apache/groovy/docgenerator/stylesheet.css')
}
def distBin = tasks.register('distBin', Zip) {
duplicatesStrategy = DuplicatesStrategy.FAIL
archiveBaseName = 'apache-groovy'
archiveAppendix = 'binary'
into("groovy-${project.version}") {
with distributionExtension.distSpec
}
allprojects {
if (project.name in ['groovy', 'groovy-test']) {
distBin.dependsOn(grooidjar)
}
}
}
def distSdk = tasks.register("distSdk", Zip) {
def groovyBundleVersion = sharedConfiguration.groovyBundleVersion.get()
description = 'Generates the binary, sources, documentation and full distributions'
archiveBaseName = 'apache-groovy'
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
archiveAppendix = 'sdk'
into "groovy-${project.version}"
from rootProject.file("licenses/LICENSE-SDK")
from rootProject.file("notices/NOTICE-SDK")
rename '^([A-Z]+)-([^.]*)', '$1'
with distributionExtension.distSpec
into('doc') {
with distributionExtension.docSpec
}
into('src') {
with distributionExtension.srcSpec
}
doFirst {
def av = project.version
if ((av.endsWith('SNAPSHOT') && !groovyBundleVersion.endsWith('SNAPSHOT'))
|| (!av.endsWith('SNAPSHOT') && groovyBundleVersion.endsWith('SNAPSHOT'))) {
throw new GradleException("Incoherent versions. Found groovyVersion=$av and groovyBundleVersion=${versions.groovyBundle}")
}
}
}
def distDoc = tasks.register('distDoc', Zip) {
//dependsOn: doc
archiveBaseName = 'apache-groovy'
archiveAppendix = 'docs'
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
into("groovy-${project.version}") {
with distributionExtension.docSpec
}
}
def distSrc = tasks.register('distSrc', Zip) {
archiveBaseName = 'apache-groovy'
archiveAppendix = 'src'
into("groovy-${project.version}")
with distributionExtension.srcSpec
}
tasks.register('dist') {
dependsOn distSrc, distSdk, distDoc, distBin
}
tasks.register("installGroovy", Sync) {
duplicatesStrategy = DuplicatesStrategy.FAIL
def installDir = sharedConfiguration.installationDirectory.orElse(project.layout.buildDir.file("install"))
description 'Generates a groovy distribution into an install directory'
doLast {
logger.lifecycle "Groovy installed under ${installDir.get()}"
}
with distributionExtension.distSpec
into installDir
}
tasks.register("doc") {
dependsOn 'javadocAll', 'groovydocAll', 'docGDK', 'asciidocAll', 'asciidoctorPdf'
}
tasks.register("asciidocAll", Copy) {
from configurations.allAsciidoc
from tasks.named('asciidoctor')
into layout.buildDirectory.dir("asciidocAll/html5")
}
tasks.named('asciidoctorPdf') {
baseDirFollowsSourceFile()
logDocuments = true
sourceDir = file('src/spec/doc')
outputDir = "$buildDir/asciidocAll/pdf"
}
// The Groovy distribution module isn't a Java library
// so we create a custom publication
def factory = objects.newInstance(Services).softwareComponentFactory
def component = factory.adhoc('groovyDistribution')
components.add(component)
def bin = configurations.create("distributionBinary") {
canBeConsumed = true
canBeResolved = false
attributes {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category, "application"))
}
outgoing {
artifacts {
artifact tasks.named('distBin')
}
}
}
component.addVariantsFromConfiguration(bin) {
mapToOptional()
}
def sdkElements = configurations.create("sdkElements") {
canBeConsumed = false
canBeResolved = false
outgoing {
artifacts {
artifact tasks.named('distSrc')
artifact tasks.named('distDoc')
artifact tasks.named('distSdk')
}
}
}
signing {
sign sdkElements
}