import net.ltgt.gradle.errorprone.CheckSeverity buildscript { ext.versions = [ 'android': '4.1.1.4', 'animalSniffer': '1.17', 'assertj': '3.11.0', 'bouncycastle': '1.62', 'brotli': '0.1.2', 'checkstyle': '8.15', 'conscrypt': '2.1.0', 'findbugs': '3.0.2', 'guava': '27.0.1-jre', 'java': '1.8', 'jnrUnixsocket': '0.22', 'jsoup': '1.11.3', 'junit': '4.12', 'kotlin': '1.3.41', 'moshi': '1.8.0', 'okio': '2.2.2', 'ktlint': '0.31.0', 'picocli': '4.0.1' ] ext.deps = [ 'picocli': "info.picocli:picocli:${versions.picocli}", 'android': "com.google.android:android:${versions.android}", 'animalSniffer': "org.codehaus.mojo:animal-sniffer-annotations:${versions.animalSniffer}", 'assertj': "org.assertj:assertj-core:${versions.assertj}", 'bouncycastle': "org.bouncycastle:bcprov-jdk15on:${versions.bouncycastle}", 'brotli': "org.brotli:dec:${versions.brotli}", 'conscrypt': "org.conscrypt:conscrypt-openjdk-uber:${versions.conscrypt}", 'guava': "com.google.guava:guava:${versions.guava}", 'jnrUnixsocket': "com.github.jnr:jnr-unixsocket:${versions.jnrUnixsocket}", 'jsoup': "org.jsoup:jsoup:${versions.jsoup}", 'jsr305': "com.google.code.findbugs:jsr305:${versions.findbugs}", 'junit': "junit:junit:${versions.junit}", 'kotlinStdlib': "org.jetbrains.kotlin:kotlin-stdlib:${versions.kotlin}", 'moshi': "com.squareup.moshi:moshi:${versions.moshi}", 'okio': "com.squareup.okio:okio:${versions.okio}" ] dependencies { // TODO(jwilson): configure maven-publish-plugin to limit which artifacts are published. classpath 'com.vanniktech:gradle-maven-publish-plugin:0.8.0' classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.7.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlin}" classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.18" classpath 'com.diffplug.spotless:spotless-plugin-gradle:3.21.1' classpath 'com.android.tools.build:gradle:3.4.1' } repositories { mavenCentral() gradlePluginPortal() google() } } plugins { id 'ru.vyarus.animalsniffer' version '1.5.0' id 'com.github.johnrengelman.shadow' version '4.0.1' id 'me.champeau.gradle.japicmp' version '0.2.6' } allprojects { group = GROUP version = VERSION_NAME repositories { mavenCentral() maven { url 'https://dl.bintray.com/kotlin/dokka' } google() } task downloadDependencies() { description 'Download all dependencies to the Gradle cache' doLast { configurations.findAll { it.canBeResolved }.files } } } subprojects { project -> if (project.name == 'android-test') return apply plugin: 'java' apply plugin: 'java-library' apply plugin: 'org.jetbrains.kotlin.platform.jvm' apply plugin: 'checkstyle' apply plugin: 'ru.vyarus.animalsniffer' apply plugin: 'net.ltgt.errorprone' apply plugin: 'org.jetbrains.dokka' apply plugin: 'com.diffplug.gradle.spotless' sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 checkstyleMain.exclude '**/CipherSuite.java' afterEvaluate { checkstyle { configFile = rootProject.file('checkstyle.xml') toolVersion "${versions.checkstyle}" sourceSets = [project.sourceSets.main] } } // Animal Sniffer confirms we don't use APIs not on both Java 8 and Android 5. animalsniffer { sourceSets = [sourceSets.main] } dependencies { signature 'net.sf.androidscents.signature:android-api-level-21:5.0.1_r2@signature' signature 'org.codehaus.mojo.signature:java18:1.0@signature' } spotless { kotlin { target "**/*.kt" ktlint(versions.ktlint).userData(['indent_size': '2', 'continuation_indent_size': '2']) } } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { jvmTarget = "1.8" } } def platform = System.getProperty("okhttp.platform", "jdk8") test { jvmArgs += "-Dlistener=okhttp3.testing.InstallUncaughtExceptionHandlerListener" jvmArgs += "-Dokhttp.platform=$platform" maxParallelForks Runtime.runtime.availableProcessors() * 2 testLogging { exceptionFormat = 'full' } } if (platform == "jdk8alpn") { // Add alpn-boot on Java 8 so we can use HTTP/2 without a stable API. def alpnBootVersion = alpnBootVersion() if (alpnBootVersion != null) { dependencies { testCompile "org.mortbay.jetty.alpn:alpn-boot:$alpnBootVersion" } def alpnBootJar = configurations.testCompile.find { it.name.startsWith("alpn-boot-") } test { jvmArgs += "-Xbootclasspath/p:${alpnBootJar}" } } } else if (platform == "conscrypt") { dependencies { testRuntime "org.conscrypt:conscrypt-openjdk-uber:${versions.conscrypt}" } } dependencies { errorproneJavac 'com.google.errorprone:javac:9+181-r4173-1' errorprone 'com.google.errorprone:error_prone_core:2.3.3' } tasks.withType(JavaCompile).configureEach { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 options.errorprone { check("MissingFail", CheckSeverity.ERROR) check("MissingOverride", CheckSeverity.ERROR) enabled = JavaVersion.current() < JavaVersion.VERSION_12 } } // We have to set the dokka configuration after evaluation since the com.vanniktech.maven.publish // plugin overwrites our dokka configuration on projects where it's applied. afterEvaluate { p -> p.tasks.dokka { reportUndocumented = false skipDeprecated = true jdkVersion = 8 packageOptions { prefix = "okhttp3.internal" suppress = true } if (project.file('Module.md').exists()) { includes = ['Module.md'] } externalDocumentationLink { url = new URL("https://square.github.io/okio/2.x/okio/jvm/index.html") packageListUrl = new URL("https://square.github.io/okio/2.x/okio/jvm/package-list") } } } } tasks.wrapper { distributionType = Wrapper.DistributionType.ALL } /** * Returns the alpn-boot version specific to this OpenJDK 8 JVM, or null if this is not a Java 8 VM. * https://github.com/xjdr/xio/blob/master/alpn-boot.gradle */ def alpnBootVersion() { def javaVersion = System.getProperty("java.version") def patchVersionMatcher = (javaVersion =~ /1\.8\.0_(\d+)(-.*)?/) if (!patchVersionMatcher.find()) return null def patchVersion = Integer.parseInt(patchVersionMatcher.group(1)) return alpnBootVersionForPatchVersion(javaVersion, patchVersion) } def alpnBootVersionForPatchVersion(String javaVersion, int patchVersion) { switch (patchVersion) { case 0..24: return '8.1.0.v20141016' case 25..30: return '8.1.2.v20141202' case 31..50: return '8.1.3.v20150130' case 51..59: return '8.1.4.v20150727' case 60..64: return '8.1.5.v20150921' case 65..70: return '8.1.6.v20151105' case 71..77: return '8.1.7.v20160121' case 78..101: return '8.1.8.v20160420' case 102..111: return '8.1.9.v20160720' case 112..120: return '8.1.10.v20161026' case 121..160: return '8.1.11.v20170118' case 161..181: return '8.1.12.v20180117' case 191..212: return '8.1.13.v20181017' default: throw new IllegalStateException("Unexpected Java version: ${javaVersion}") } } /** * Returns a .jar file for the golden version of this project. * https://github.com/Visistema/Groovy1/blob/ba5eb9b2f19ca0cc8927359ce414c4e1974b7016/gradle/binarycompatibility.gradle#L48 */ ext.baselineJar = { project, version -> def group = project.property("GROUP") def artifactId = project.property("POM_ARTIFACT_ID") try { String jarFile = "$artifactId-${version}.jar" project.group = 'virtual_group_for_japicmp' // Prevent it from resolving the current version. def dependency = project.dependencies.create("$group:$artifactId:$version@jar") return project.configurations.detachedConfiguration(dependency).files .find { (it.name == jarFile) } } finally { project.group = group } } ext.baselineVersion = "3.14.1"