diff --git a/.travis.yml b/.travis.yml index f74c88740..1abdffa1d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: android android: components: - - android-16 + - android-19 jdk: - oraclejdk8 - openjdk8 @@ -11,7 +11,7 @@ cache: - $HOME/.m2 before_install: - - export GRADLE_VERSION=5.1.1 + - export GRADLE_VERSION=5.2.1 - wget https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip - unzip -q gradle-${GRADLE_VERSION}-all.zip - export PATH="$(pwd)/gradle-${GRADLE_VERSION}/bin:$PATH" diff --git a/build.gradle b/build.gradle index 5c997dcbb..8645b5368 100644 --- a/build.gradle +++ b/build.gradle @@ -14,8 +14,8 @@ buildscript { } plugins { - id 'ru.vyarus.animalsniffer' version '1.4.6' - id 'net.ltgt.errorprone' version '0.6' + id 'ru.vyarus.animalsniffer' version '1.5.0' + id 'net.ltgt.errorprone' version '0.8' } apply plugin: 'org.kordamp.gradle.markdown' @@ -24,6 +24,7 @@ apply from: 'version.gradle' allprojects { apply plugin: 'java' + apply plugin: 'java-library' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'jacoco' @@ -80,6 +81,8 @@ allprojects { ':smack-omemo', ':smack-omemo-signal', ':smack-openpgp', + ':smack-xmlparser', + ':smack-xmlparser-xpp3', ].collect{ project(it) } androidBootClasspathProjects = [ ':smack-android', @@ -97,13 +100,37 @@ allprojects { ':smack-omemo-signal', ':smack-omemo-signal-integration-test', ].collect{ project(it) } + // When this list is empty, then move the according javadoc + // tool Werror option into the global configure section. + nonStrictJavadocProjects = [ + ':smack-bosh', + ':smack-core', + ':smack-experimental', + ':smack-extensions', + ':smack-im', + ':smack-integration-test', + ':smack-jingle-old', + ':smack-legacy', + ':smack-omemo', + ':smack-tcp', + ].collect{ project(it) } // Lazily evaluate the Android bootClasspath and offline // Javadoc using a closure, so that targets which do not // require it are still able to succeed without an Android // SDK. androidBootClasspath = { getAndroidRuntimeJar() } androidJavadocOffline = { getAndroidJavadocOffline() } - junitVersion = '5.2.0' + junit4Projects = [ + ':smack-core', + ':smack-extensions', + ':smack-im', + ':smack-integration-test', + ':smack-omemo', + ':smack-omemo-signal', + ':smack-openpgp', + ].collect { project(it) } + junitVersion = '5.4.2' + powerMockVersion = '2.0.2' } group = 'org.igniterealtime.smack' sourceCompatibility = JavaVersion.VERSION_1_8 @@ -114,6 +141,10 @@ allprojects { } test { + useJUnitPlatform() + + maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1 + // Enable full stacktraces of failed tests. Especially handy // for environments like Travis. testLogging { @@ -170,21 +201,25 @@ allprojects { '-Xlint:-options', '-Werror', ] - options.errorprone.errorproneArgs = [ - // Disable errorprone checks - '-Xep:TypeParameterUnusedInFormals:OFF', - // Disable errorpone StringSplitter check, as it - // recommends using Splitter from Guava, which we don't - // have (nor want to use in Smack). - '-Xep:StringSplitter:OFF', - '-Xep:JdkObsolete:OFF', - // Disabled because sinttest re-uses BeforeClass from junit. - // TODO: change sinttest so that it has it's own - // BeforeClass and re-enable this check. - '-Xep:JUnit4ClassAnnotationNonStatic:OFF', - // Disabled but should be re-enabled at some point - //'-Xep:InconsistentCapitalization:OFF', - ] + options.errorprone { + error("UnusedVariable", "UnusedMethod") + errorproneArgs = [ + // Disable errorprone checks + '-Xep:TypeParameterUnusedInFormals:OFF', + // Disable errorpone StringSplitter check, as it + // recommends using Splitter from Guava, which we don't + // have (nor want to use in Smack). + '-Xep:StringSplitter:OFF', + '-Xep:JdkObsolete:OFF', + // Disabled because sinttest re-uses BeforeClass from junit. + // TODO: change sinttest so that it has it's own + // BeforeClass and re-enable this check. + '-Xep:JUnit4ClassAnnotationNonStatic:OFF', + // Disabled but should be re-enabled at some point + //'-Xep:InconsistentCapitalization:OFF', + '-Xep:MixedMutabilityReturnType:OFF', + ] + } } tasks.withType(ScalaCompile) { @@ -232,7 +267,11 @@ allprojects { } dependencies { - errorprone 'com.google.errorprone:error_prone_core:2.3.2' + testImplementation "org.junit.jupiter:junit-jupiter-api:$junitVersion" + testImplementation "org.junit.jupiter:junit-jupiter-params:$junitVersion" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" + + errorprone 'com.google.errorprone:error_prone_core:2.3.3' errorproneJavac('com.google.errorprone:javac:9+181-r4173-1') } @@ -241,6 +280,15 @@ allprojects { test { dependsOn javadoc } } +configure (junit4Projects) { + dependencies { + testImplementation "org.junit.vintage:junit-vintage-engine:$junitVersion" + testImplementation "org.powermock:powermock-module-junit4:$powerMockVersion" + testImplementation "org.powermock:powermock-module-junit4-rule:$powerMockVersion" + testImplementation "org.powermock:powermock-api-mockito2:$powerMockVersion" + } +} + gradle.taskGraph.whenReady { taskGraph -> if (signingRequired && taskGraph.allTasks.any { it instanceof Sign }) { @@ -519,19 +567,21 @@ configure(integrationTestProjects + project(':smack-repl')) { project(':smack-omemo').clirr.enabled = false project(':smack-omemo-signal').clirr.enabled = false -configure( - [ ':smack-omemo', - ':smack-omemo-signal', - ':smack-omemo-signal-integration-test', - ].collect{ project(it) }) { -} - subprojects*.jar { manifest { from sharedManifest } } +configure(subprojects - nonStrictJavadocProjects) { + tasks.withType(Javadoc) { + // Abort on javadoc warnings. + // See JDK-8200363 (https://bugs.openjdk.java.net/browse/JDK-8200363) + // for information about the -Xwerror option. + options.addStringOption('Xwerror', '-quiet') + } +} + configure(subprojects - gplLicensedProjects) { checkstyle { configProperties.checkstyleLicenseHeader = "header" @@ -646,15 +696,7 @@ def getGitCommit() { } def getAndroidRuntimeJar() { - // We set a different Android API level compared to - // smackMinAndroidSdk here. The runtime jar retrieved via this - // method is, compared to earlier Smack versions, not used to - // check for Android API compatibility. Instead it is used to for - // the eclipse classpath, for javadoc and when compiling the pure - // Android subprojects of Smack. Currently we require level 16 - // here, because of the @TargetApi annotation found in - // AndroidUsingLinkProperties of minidns-android21. - def androidApiLevel = 16 + def androidApiLevel = ext.smackMinAndroidSdk def androidHome = getAndroidHome() def androidJar = new File("$androidHome/platforms/android-${androidApiLevel}/android.jar") if (androidJar.isFile()) { diff --git a/config/checkstyle.xml b/config/checkstyle.xml index d925f4909..8d539f725 100644 --- a/config/checkstyle.xml +++ b/config/checkstyle.xml @@ -39,12 +39,7 @@ - - - - - +