Files
spring-credhub/build.gradle
2024-09-24 11:29:45 +02:00

278 lines
6.3 KiB
Groovy

/*
* Copyright 2016-2020 the original author or authors.
*
* Licensed 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
*
* https://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 'checkstyle'
id 'io.spring.nohttp' version '0.0.11'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
id 'io.spring.javaformat' version '0.0.43'
}
description = "Spring CredHub"
ext {
springVersion = "5.3.23"
springBootVersion = "2.7.5"
springSecurityVersion = "5.7.5"
reactorVersion = "2020.0.24"
okHttp3Version = "4.9.3"
httpClientVersion = "4.5.13"
nettyVersion = "4.1.84.Final"
junitVersion = "5.7.2"
mockitoVersion = "3.9.0"
assertJVersion = "3.19.0"
javadocLinks = [
"https://docs.oracle.com/javase/8/docs/api/",
'https://docs.spring.io/spring/docs/current/javadoc-api/',
] as String[]
}
configure(allprojects) {
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: "io.spring.dependency-management"
group = 'org.springframework.credhub'
repositories {
mavenCentral()
maven { url 'https://repo.spring.io/release' }
}
if (version =~ /((-M|-RC)[0-9]+|-SNAPSHOT)$/) {
repositories {
maven { url 'https://repo.spring.io/milestone' }
}
}
if (version.endsWith('-SNAPSHOT')) {
repositories {
maven { url 'https://repo.spring.io/snapshot' }
}
}
}
configure(allprojects) {
apply plugin: 'checkstyle'
apply plugin: 'io.spring.nohttp'
apply plugin: 'io.spring.javaformat'
checkstyle {
toolVersion = "8.45.1"
configDirectory.set(rootProject.file("src/checkstyle"))
}
nohttp {
allowlistFile = rootProject.file("src/nohttp/allowlist.lines")
}
dependencies {
checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:0.0.43")
}
}
configure(libraryProjects) {
apply plugin: 'java-library'
java {
withJavadocJar()
withSourcesJar()
}
javadoc {
options.encoding = 'UTF-8'
options.memberLevel = JavadocMemberLevel.PROTECTED
options.author = true
options.header = project.name
}
sourcesJar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
archiveClassifier.set "sources"
from sourceSets.main.allJava
}
javadocJar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
archiveClassifier.set "javadoc"
from javadoc
}
}
configure(publishedProjects) {
apply from: "${rootProject.projectDir}/publish-maven.gradle"
}
subprojects {
sourceCompatibility = 1.8
targetCompatibility = 1.8
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
java {
registerFeature('reactive') {
usingSourceSet(sourceSets.main)
}
registerFeature('security') {
usingSourceSet(sourceSets.main)
}
registerFeature('httpclient') {
usingSourceSet(sourceSets.main)
}
registerFeature('okhttp') {
usingSourceSet(sourceSets.main)
}
registerFeature('netty') {
usingSourceSet(sourceSets.main)
}
}
dependencies {
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
}
tasks.withType(Test).forEach { Test task ->
task.with {
// enable JUnit 5
useJUnitPlatform()
scanForTestClasses = true
group = "verification"
testLogging {
exceptionFormat = "full"
events = ["passed", "skipped", "failed"]
}
// print failed tests after the execution
def failedTests = []
afterTest { test, result ->
if (result.resultType == TestResult.ResultType.FAILURE) {
failedTests << test
}
}
// create a summary after the execution
afterSuite { desc, result ->
if (!desc.parent) {
println "\nTest result: ${result.resultType}"
println "Test summary: ${result.testCount} tests, " +
"${result.successfulTestCount} succeeded, " +
"${result.failedTestCount} failed, " +
"${result.skippedTestCount} skipped"
failedTests.each { test -> println "FAILED test: ${test.className} > ${test.name}" }
}
}
}
}
}
configure(rootProject) {
task sourcesJar(type: Jar) {
archiveClassifier.set('sources')
from sourceSets.main.allSource
}
task javadocJar(type: Jar) {
archiveClassifier.set('javadoc')
from javadoc.destinationDir
}
task api(type: Javadoc) {
group = "Documentation"
description = "Generates aggregated Javadoc API documentation."
title = "${rootProject.description} ${version} API"
options.encoding = 'UTF-8'
options.memberLevel = JavadocMemberLevel.PROTECTED
options.author = true
options.header = rootProject.description
options.links(project.ext.javadocLinks)
source subprojects.collect { project ->
project.sourceSets.main.allJava
}
classpath = files(subprojects.collect { project ->
project.sourceSets.main.compileClasspath
})
exclude '**/spring-credhub-integration-tests/**', '**/spring-credhub-reactive-integration-tests/**'
maxMemory = "1024m"
destinationDir = new File(buildDir, "api")
}
task docsZip(type: Zip, dependsOn: [':spring-credhub-docs:asciidoctor']) {
group = 'Distribution'
archiveClassifier.set('docs')
description = "Builds -${archiveClassifier} archive containing api and reference " +
"for deployment at docs.spring.io/spring-credhub/docs."
from(api) {
into 'api'
}
from(project.tasks.findByPath(':spring-credhub-docs:asciidoctor')) {
into 'reference'
}
}
artifacts {
archives docsZip
}
publishing {
publications {
mavenJava(MavenPublication) {
artifact sourcesJar
artifact javadocJar
artifact docsZip
}
}
}
task dist(dependsOn: assemble) {
group = "Distribution"
description = "Builds -dist and -docs distribution archives."
}
}
def getDocumentationProjects() {
[project(":spring-credhub-docs")] as Set
}
def getTestProjects() {
[project(":spring-credhub-integration-tests"),
project(":spring-credhub-reactive-integration-tests")] as Set
}
def getJavaProjects() {
subprojects
}
def getLibraryProjects() {
javaProjects - documentationProjects - testProjects
}
def getPublishedProjects() {
libraryProjects + rootProject
}