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 @@
-
-
-
-
-
+