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:
push:
branches:
- master
pull_request:
jobs:
test:
runs-on: ${{ matrix.os }}
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-18.04]
java: [8, 11]
java: [8, 11, 17, 18]
fail-fast: false
max-parallel: 4
name: Test JDK ${{ matrix.java }}, ${{ matrix.os }}
name: JDK ${{ matrix.java }}
steps:
- uses: actions/checkout@v2
@ -26,7 +23,14 @@ jobs:
java-version: ${{ matrix.java }}
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- 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',
jsonOrg: 'org.json:json:20140107',
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',
jakartaJsonP: 'jakarta.json:jakarta.json-api:2.0.1',
jakartaJsonB: 'jakarta.json.bind:jakarta.json.bind-api:2.0.0',
test: [
'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.hamcrest:hamcrest:2.2',
'org.glassfish:jakarta.json:2.0.1',
'org.eclipse:yasson:2.0.4',
//'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 {
@ -46,15 +47,12 @@ allprojects {
group = 'com.jayway.jsonpath'
version = '2.8.0' + (snapshotVersion ? "-SNAPSHOT" : "")
if (JavaVersion.current().isJava8Compatible()) {
tasks.withType(Javadoc) {
options.addStringOption('Xdoclint:none', '-quiet')
}
}
}
subprojects {
apply plugin: 'java'
apply plugin: 'java-library'
apply plugin: 'maven-publish'
apply plugin: 'signing'
apply plugin: 'biz.aQute.bnd.builder'
@ -65,28 +63,78 @@ subprojects {
mavenCentral()
}
task javadocJar(type: Jar) {
classifier = 'javadoc'
from javadoc
java {
withJavadocJar()
withSourcesJar()
}
task sourcesJar(type: Jar) {
classifier = 'sources'
from sourceSets.main.allSource
test {
useJUnitPlatform()
systemProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager")
testLogging {
events "passed", "skipped", "failed"
//showStandardStreams = true
}
}
signing {
required { !snapshotVersion && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
sign configurations.archives // sign publishing.publications.mavenJava
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 {
archives jar, javadocJar, sourcesJar
publishing {
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 {
gradleVersion = '5.6.2'
gradleVersion = '7.4.2'
}
//Task used by Heroku for staging

8
gradle/binaryCompatibility.gradle

@ -28,7 +28,7 @@ buildscript {
}
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 {
task japicmp(type: me.champeau.gradle.ArtifactJapicmpTask) {
tasks.register("japicmp", me.champeau.gradle.japicmp.JapicmpTask) {
//task japicmp(type: me.champeau.gradle.ArtifactJapicmpTask) {
dependsOn jar
//baseline = "com.jayway.jsonpath:${project.name}:+@jar" //latest release
baseline = 'com.jayway.jsonpath:json-path:2.0.0@jar'
@ -129,7 +130,8 @@ if (JavaVersion.current().isJava7Compatible()) {
subprojects {
check.dependsOn(checkBinaryCompatibility)
tasks.withType(me.champeau.gradle.ArtifactJapicmpTask) { task ->
tasks.register("checkCompatibility", me.champeau.gradle.japicmp.JapicmpTask) { 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
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
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"
@ -10,9 +9,11 @@ jar {
}
dependencies {
compile project(':json-path')
compile libs.hamcrest
compile libs.slf4jApi
implementation project(':json-path')
implementation libs.hamcrest
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'
task createBuildInfoFile {
dependsOn compileJava
doLast {
def buildInfoFile = new File("$buildDir/classes/java/main/build-info.properties")
Properties props = new Properties()
@ -27,17 +28,18 @@ jar {
dependencies {
compile project(':json-path')
compile 'commons-io:commons-io:2.4'
compile libs.jacksonDatabind
compile libs.jsonSmart
compile 'io.fastjson:boon:0.33'
compile 'com.nebhale.jsonpath:jsonpath:1.2'
compile 'io.gatling:jsonpath_2.10:0.6.4'
compile 'org.eclipse.jetty:jetty-server:9.3.0.M1'
compile 'org.eclipse.jetty:jetty-webapp:9.3.0.M1'
compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.20'
compile('org.glassfish.jersey.media:jersey-media-json-jackson:2.20'){
implementation project(':json-path')
implementation 'commons-io:commons-io:2.4'
implementation libs.slf4jApi
implementation libs.jacksonDatabind
implementation libs.jsonSmart
implementation 'io.fastjson:boon:0.33'
implementation 'com.nebhale.jsonpath:jsonpath:1.2'
implementation 'io.gatling:jsonpath_2.10:0.6.4'
implementation 'org.eclipse.jetty:jetty-server:9.3.0.M1'
implementation 'org.eclipse.jetty:jetty-webapp:9.3.0.M1'
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-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."
@ -12,17 +11,18 @@ jar {
}
dependencies {
compile libs.jsonSmart
compile libs.slf4jApi
compile libs.jacksonDatabind, optional
compile libs.gson, optional
compile libs.jsonOrg, optional
compile libs.tapestryJson, optional
compile libs.jettison, optional
compile libs.jakartaJsonP, optional
compile libs.jakartaJsonB, optional
implementation libs.jsonSmart
implementation libs.slf4jApi
implementation libs.jacksonDatabind // , optional
implementation libs.gson// , optional
implementation libs.jsonOrg// , optional
implementation libs.tapestryJson// , optional
implementation libs.jettison// , optional
implementation libs.jakartaJsonP// , optional
implementation libs.jakartaJsonB// , optional
testCompile libs.test
testImplementation libs.test
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine'
}
task distZip(type: Zip, dependsOn: assemble) {
@ -37,31 +37,31 @@ task distZip(type: Zip, dependsOn: assemble) {
from(jar) {
into 'lib'
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
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') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/jackson'
include { it.file.name.contains('jackson') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/gson'
include { it.file.name.contains('gson') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/jettison'
include { it.file.name.contains('jettison') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/jsonOrg'
include { it.file.name.contains('json-2') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/tapestry'
include { it.file.name.contains('tapestry') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/jakartaJson'
include { it.file.name.contains('jakarta.json') }
}
@ -81,31 +81,31 @@ task distTar(type: Tar, dependsOn: assemble) {
from(jar) {
into 'lib'
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
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') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/jackson'
include { it.file.name.contains('jackson') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/gson'
include { it.file.name.contains('gson') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/jettison'
include { it.file.name.contains('jettison') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/jsonOrg'
include { it.file.name.contains('json-2') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/tapestry'
include { it.file.name.contains('tapestry') }
}
from(project.configurations.compile) {
from(project.configurations.implementation) {
into 'lib-optional/jakartaJson'
include { it.file.name.contains('jakarta.json') }
}

Loading…
Cancel
Save