Browse Source

perform CI on latest Java versions (#816)

pull/797/merge
Samael 2 years ago committed by GitHub
parent
commit
5138c392d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      .github/workflows/ci.yml
  2. 88
      build.gradle
  3. 8
      gradle/binaryCompatibility.gradle
  4. 94
      gradle/publishMaven.gradle
  5. 2
      gradle/wrapper/gradle-wrapper.properties
  6. 11
      json-path-assert/build.gradle
  7. 24
      json-path-web-test/build.gradle
  8. 50
      json-path/build.gradle

18
.github/workflows/ci.yml

@ -3,20 +3,17 @@ name: Java CI
on: on:
push: push:
branches:
- master
pull_request: pull_request:
jobs: jobs:
test: test:
runs-on: ${{ matrix.os }} runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
os: [ubuntu-18.04] java: [8, 11, 17, 18]
java: [8, 11]
fail-fast: false fail-fast: false
max-parallel: 4 max-parallel: 4
name: Test JDK ${{ matrix.java }}, ${{ matrix.os }} name: JDK ${{ matrix.java }}
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -26,7 +23,14 @@ jobs:
java-version: ${{ matrix.java }} java-version: ${{ matrix.java }}
- name: Grant execute permission for gradlew - name: Grant execute permission for gradlew
run: chmod +x gradlew run: chmod +x gradlew
- name: Build with Gradle - name: Build with Gradle
run: ./gradlew build run: ./gradlew build --warning-mode all
- name: Run Tests
run: ./gradlew check
- name: Maven Install
run: ./gradlew clean publishToMavenLocal
... ...

88
build.gradle

@ -20,23 +20,24 @@ ext {
jettison: 'org.codehaus.jettison:jettison:1.4.1', jettison: 'org.codehaus.jettison:jettison:1.4.1',
jsonOrg: 'org.json:json:20140107', jsonOrg: 'org.json:json:20140107',
jsonSmart: 'net.minidev:json-smart:2.4.8', jsonSmart: 'net.minidev:json-smart:2.4.8',
slf4jApi: 'org.slf4j:slf4j-api:1.7.33', slf4jApi: 'org.slf4j:slf4j-api:1.7.36',
tapestryJson: 'org.apache.tapestry:tapestry-json:5.8.0', tapestryJson: 'org.apache.tapestry:tapestry-json:5.8.0',
jakartaJsonP: 'jakarta.json:jakarta.json-api:2.0.1', jakartaJsonP: 'jakarta.json:jakarta.json-api:2.0.1',
jakartaJsonB: 'jakarta.json.bind:jakarta.json.bind-api:2.0.0', jakartaJsonB: 'jakarta.json.bind:jakarta.json.bind-api:2.0.0',
test: [ test: [
'commons-io:commons-io:2.11.0', 'commons-io:commons-io:2.11.0',
'junit:junit:4.13.2', 'junit:junit:4.13.+',
'org.junit.vintage:junit-vintage-engine:5.8.+',
'org.assertj:assertj-core:3.22.0', 'org.assertj:assertj-core:3.22.0',
'org.hamcrest:hamcrest:2.2', 'org.hamcrest:hamcrest:2.2',
'org.glassfish:jakarta.json:2.0.1', 'org.glassfish:jakarta.json:2.0.1',
'org.eclipse:yasson:2.0.4', 'org.eclipse:yasson:2.0.4',
//'org.apache.johnzon:johnzon-jsonb:1.2.12', //'org.apache.johnzon:johnzon-jsonb:1.2.12',
'org.slf4j:slf4j-simple:1.7.35' 'org.slf4j:slf4j-simple:1.7.36'
] ]
] ]
snapshotVersion = true snapshotVersion = project.version.contains('SNAPSHOT')
} }
allprojects { allprojects {
@ -46,15 +47,12 @@ allprojects {
group = 'com.jayway.jsonpath' group = 'com.jayway.jsonpath'
version = '2.8.0' + (snapshotVersion ? "-SNAPSHOT" : "") version = '2.8.0' + (snapshotVersion ? "-SNAPSHOT" : "")
if (JavaVersion.current().isJava8Compatible()) {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
}
}
} }
subprojects { subprojects {
apply plugin: 'java' apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'maven-publish'
apply plugin: 'signing' apply plugin: 'signing'
apply plugin: 'biz.aQute.bnd.builder' apply plugin: 'biz.aQute.bnd.builder'
@ -65,28 +63,78 @@ subprojects {
mavenCentral() mavenCentral()
} }
task javadocJar(type: Jar) { java {
classifier = 'javadoc' withJavadocJar()
from javadoc withSourcesJar()
} }
task sourcesJar(type: Jar) { test {
classifier = 'sources' useJUnitPlatform()
from sourceSets.main.allSource
systemProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager")
testLogging {
events "passed", "skipped", "failed"
//showStandardStreams = true
}
} }
signing { signing {
required { !snapshotVersion && gradle.taskGraph.hasTask("uploadArchives") } sign configurations.archives // sign publishing.publications.mavenJava
sign configurations.archives required { !snapshotVersion && gradle.taskGraph.hasTask("publish") } // uploadArchives is replaced by publish
}
javadoc {
if (JavaVersion.current().isJava8Compatible()) {
options.addStringOption('Xdoclint:none', '-quiet')
}
if(JavaVersion.current().isJava9Compatible()) {
options.addBooleanOption('html5', true)
}
} }
artifacts { publishing {
archives jar, javadocJar, sourcesJar publications {
mavenJava(MavenPublication) {
from components.java
artifactId = jar.baseName
pom {
name = jar.baseName
description = project.description
url = 'https://github.com/jayway/JsonPath'
licenses {
license {
name = "The Apache Software License, Version 2.0"
url = "https://www.apache.org/licenses/LICENSE-2.0.txt"
distribution = "repo"
}
}
scm {
url = 'scm:git:git://github.com/jayway/JsonPath.git'
connection = 'scm:git:git://github.com/jayway/JsonPath.git'
developerConnection = 'scm:git:git://github.com/jayway/JsonPath.git'
}
developers {
developer {
id = 'kalle.stenflo'
name = 'Kalle Stenflo'
email = 'kalle.stenflo (a) gmail.com'
}
}
}
}
}
} }
} }
wrapper { wrapper {
gradleVersion = '5.6.2' gradleVersion = '7.4.2'
} }
//Task used by Heroku for staging //Task used by Heroku for staging

8
gradle/binaryCompatibility.gradle

@ -28,7 +28,7 @@ buildscript {
} }
dependencies { dependencies {
classpath 'me.champeau.gradle:japicmp-gradle-plugin:0.1.0' classpath 'me.champeau.gradle:japicmp-gradle-plugin:0.4.0'
} }
} }
@ -99,7 +99,8 @@ if (JavaVersion.current().isJava7Compatible()) {
subprojects { subprojects {
task japicmp(type: me.champeau.gradle.ArtifactJapicmpTask) { tasks.register("japicmp", me.champeau.gradle.japicmp.JapicmpTask) {
//task japicmp(type: me.champeau.gradle.ArtifactJapicmpTask) {
dependsOn jar dependsOn jar
//baseline = "com.jayway.jsonpath:${project.name}:+@jar" //latest release //baseline = "com.jayway.jsonpath:${project.name}:+@jar" //latest release
baseline = 'com.jayway.jsonpath:json-path:2.0.0@jar' baseline = 'com.jayway.jsonpath:json-path:2.0.0@jar'
@ -129,7 +130,8 @@ if (JavaVersion.current().isJava7Compatible()) {
subprojects { subprojects {
check.dependsOn(checkBinaryCompatibility) check.dependsOn(checkBinaryCompatibility)
tasks.withType(me.champeau.gradle.ArtifactJapicmpTask) { task ->
tasks.register("checkCompatibility", me.champeau.gradle.japicmp.JapicmpTask) { task ->
checkBinaryCompatibility.dependsOn(task) checkBinaryCompatibility.dependsOn(task)
} }
} }

94
gradle/publishMaven.gradle

@ -1,94 +0,0 @@
apply plugin: "maven"
def basePom = {
project {
name project.displayName
packaging 'bundle'
description project.description
url 'https://github.com/jayway/JsonPath'
licenses {
license {
name "The Apache Software License, Version 2.0"
url "http://www.apache.org/licenses/LICENSE-2.0.txt"
distribution "repo"
}
}
scm {
url 'scm:git:git://github.com/jayway/JsonPath.git'
connection 'scm:git:git://github.com/jayway/JsonPath.git'
developerConnection 'scm:git:git://github.com/jayway/JsonPath.git'
}
developers {
developer {
id 'kalle.stenflo'
name 'Kalle Stenflo'
email 'kalle.stenflo (a) gmail.com'
}
}
}
}
def deployers = []
project.afterEvaluate {
configure(deployers) {
pom basePom
}
}
install {
deployers << repositories.mavenInstaller
}
uploadArchives {
deployers << repositories.mavenDeployer {
if (snapshotVersion) {
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
if (project.hasProperty("sonatypeOssUsername")) {
authentication(userName: sonatypeOssUsername, password: sonatypeOssPassword)
}
}
} else {
repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
if (project.hasProperty("sonatypeOssUsername")) {
authentication(userName: sonatypeOssUsername, password: sonatypeOssPassword)
}
}
}
}
}
def poms = deployers*.pom
def optionalDeps = []
def providedDeps = []
def internalDeps = []
ext {
modifyPom = { Closure modification ->
poms.each {
it.whenConfigured(modification)
}
}
optional = { optionalDeps << it; it }
provided = { providedDeps << it; it }
internal = { internalDeps << it; it }
}
modifyPom { pom ->
optionalDeps.each { dep ->
pom.dependencies.find { it.artifactId == dep.name }.optional = true
}
providedDeps.each { dep ->
pom.dependencies.find { it.artifactId == dep.name }.scope = "provided"
}
internalDeps.each { dep ->
pom.dependencies.removeAll { it.artifactId == dep.name }
}
// no need to publish test dependencies
pom.dependencies.removeAll { it.scope == "test" }
}
deployers*.beforeDeployment { signing.signPom(it) }

2
gradle/wrapper/gradle-wrapper.properties vendored

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

11
json-path-assert/build.gradle

@ -1,4 +1,3 @@
apply from: "$rootDir/gradle/publishMaven.gradle"
description = "Assertions on Json using JsonPath" description = "Assertions on Json using JsonPath"
@ -10,9 +9,11 @@ jar {
} }
dependencies { dependencies {
compile project(':json-path') implementation project(':json-path')
compile libs.hamcrest implementation libs.hamcrest
compile libs.slf4jApi implementation libs.slf4jApi
testCompile libs.test testImplementation libs.jsonSmart
testImplementation libs.test
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine'
} }

24
json-path-web-test/build.gradle

@ -6,6 +6,7 @@ description = "Web app that compares different JsonPath implementations."
mainClassName = 'com.jayway.jsonpath.web.boot.Main' mainClassName = 'com.jayway.jsonpath.web.boot.Main'
task createBuildInfoFile { task createBuildInfoFile {
dependsOn compileJava
doLast { doLast {
def buildInfoFile = new File("$buildDir/classes/java/main/build-info.properties") def buildInfoFile = new File("$buildDir/classes/java/main/build-info.properties")
Properties props = new Properties() Properties props = new Properties()
@ -27,17 +28,18 @@ jar {
dependencies { dependencies {
compile project(':json-path') implementation project(':json-path')
compile 'commons-io:commons-io:2.4' implementation 'commons-io:commons-io:2.4'
compile libs.jacksonDatabind implementation libs.slf4jApi
compile libs.jsonSmart implementation libs.jacksonDatabind
compile 'io.fastjson:boon:0.33' implementation libs.jsonSmart
compile 'com.nebhale.jsonpath:jsonpath:1.2' implementation 'io.fastjson:boon:0.33'
compile 'io.gatling:jsonpath_2.10:0.6.4' implementation 'com.nebhale.jsonpath:jsonpath:1.2'
compile 'org.eclipse.jetty:jetty-server:9.3.0.M1' implementation 'io.gatling:jsonpath_2.10:0.6.4'
compile 'org.eclipse.jetty:jetty-webapp:9.3.0.M1' implementation 'org.eclipse.jetty:jetty-server:9.3.0.M1'
compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.20' implementation 'org.eclipse.jetty:jetty-webapp:9.3.0.M1'
compile('org.glassfish.jersey.media:jersey-media-json-jackson:2.20'){ implementation 'org.glassfish.jersey.containers:jersey-container-servlet:2.20'
implementation('org.glassfish.jersey.media:jersey-media-json-jackson:2.20'){
exclude module: 'jackson-annotations:com.fasterxml.jackson.core' exclude module: 'jackson-annotations:com.fasterxml.jackson.core'
exclude module: 'jackson-core:com.fasterxml.jackson.core' exclude module: 'jackson-core:com.fasterxml.jackson.core'
} }

50
json-path/build.gradle

@ -1,4 +1,3 @@
apply from: "$rootDir/gradle/publishMaven.gradle"
description = "Java port of Stefan Goessner JsonPath." description = "Java port of Stefan Goessner JsonPath."
@ -12,17 +11,18 @@ jar {
} }
dependencies { dependencies {
compile libs.jsonSmart implementation libs.jsonSmart
compile libs.slf4jApi implementation libs.slf4jApi
compile libs.jacksonDatabind, optional implementation libs.jacksonDatabind // , optional
compile libs.gson, optional implementation libs.gson// , optional
compile libs.jsonOrg, optional implementation libs.jsonOrg// , optional
compile libs.tapestryJson, optional implementation libs.tapestryJson// , optional
compile libs.jettison, optional implementation libs.jettison// , optional
compile libs.jakartaJsonP, optional implementation libs.jakartaJsonP// , optional
compile libs.jakartaJsonB, optional implementation libs.jakartaJsonB// , optional
testCompile libs.test testImplementation libs.test
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine'
} }
task distZip(type: Zip, dependsOn: assemble) { task distZip(type: Zip, dependsOn: assemble) {
@ -37,31 +37,31 @@ task distZip(type: Zip, dependsOn: assemble) {
from(jar) { from(jar) {
into 'lib' into 'lib'
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib' into 'lib'
exclude { it.file.name.contains('gson') || it.file.name.contains('jackson') || it.file.name.contains('json-2') || it.file.name.contains('jettison') || it.file.name.contains('tapestry') || it.file.name.contains('jakarta.json') } exclude { it.file.name.contains('gson') || it.file.name.contains('jackson') || it.file.name.contains('json-2') || it.file.name.contains('jettison') || it.file.name.contains('tapestry') || it.file.name.contains('jakarta.json') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/jackson' into 'lib-optional/jackson'
include { it.file.name.contains('jackson') } include { it.file.name.contains('jackson') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/gson' into 'lib-optional/gson'
include { it.file.name.contains('gson') } include { it.file.name.contains('gson') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/jettison' into 'lib-optional/jettison'
include { it.file.name.contains('jettison') } include { it.file.name.contains('jettison') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/jsonOrg' into 'lib-optional/jsonOrg'
include { it.file.name.contains('json-2') } include { it.file.name.contains('json-2') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/tapestry' into 'lib-optional/tapestry'
include { it.file.name.contains('tapestry') } include { it.file.name.contains('tapestry') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/jakartaJson' into 'lib-optional/jakartaJson'
include { it.file.name.contains('jakarta.json') } include { it.file.name.contains('jakarta.json') }
} }
@ -81,31 +81,31 @@ task distTar(type: Tar, dependsOn: assemble) {
from(jar) { from(jar) {
into 'lib' into 'lib'
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib' into 'lib'
exclude { it.file.name.contains('gson') || it.file.name.contains('jackson') || it.file.name.contains('json-2') || it.file.name.contains('jettison') || it.file.name.contains('tapestry') || it.file.name.contains('jakarta.json') } exclude { it.file.name.contains('gson') || it.file.name.contains('jackson') || it.file.name.contains('json-2') || it.file.name.contains('jettison') || it.file.name.contains('tapestry') || it.file.name.contains('jakarta.json') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/jackson' into 'lib-optional/jackson'
include { it.file.name.contains('jackson') } include { it.file.name.contains('jackson') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/gson' into 'lib-optional/gson'
include { it.file.name.contains('gson') } include { it.file.name.contains('gson') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/jettison' into 'lib-optional/jettison'
include { it.file.name.contains('jettison') } include { it.file.name.contains('jettison') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/jsonOrg' into 'lib-optional/jsonOrg'
include { it.file.name.contains('json-2') } include { it.file.name.contains('json-2') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/tapestry' into 'lib-optional/tapestry'
include { it.file.name.contains('tapestry') } include { it.file.name.contains('tapestry') }
} }
from(project.configurations.compile) { from(project.configurations.implementation) {
into 'lib-optional/jakartaJson' into 'lib-optional/jakartaJson'
include { it.file.name.contains('jakarta.json') } include { it.file.name.contains('jakarta.json') }
} }

Loading…
Cancel
Save