From 2bd2a3911c21eaeb4a6da2ea067da3c86a5f9359 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Wed, 12 Nov 2025 14:30:58 -0800 Subject: [PATCH 1/5] fix Jackson Serializer deprecation --- .../ab/event/internal/serializer/JacksonSerializer.java | 6 +++--- .../ab/event/internal/serializer/JacksonSerializerTest.java | 4 ++-- java-quickstart/build.gradle | 6 +++++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/core-api/src/main/java/com/optimizely/ab/event/internal/serializer/JacksonSerializer.java b/core-api/src/main/java/com/optimizely/ab/event/internal/serializer/JacksonSerializer.java index 6087b4cce..5c1d586fd 100644 --- a/core-api/src/main/java/com/optimizely/ab/event/internal/serializer/JacksonSerializer.java +++ b/core-api/src/main/java/com/optimizely/ab/event/internal/serializer/JacksonSerializer.java @@ -1,6 +1,6 @@ /** * - * Copyright 2016-2017, 2019, Optimizely and contributors + * Copyright 2016-2017, 2019, 2025 Optimizely and contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,13 +19,13 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; class JacksonSerializer implements Serializer { private ObjectMapper mapper = new ObjectMapper().setPropertyNamingStrategy( - PropertyNamingStrategy.SNAKE_CASE); + PropertyNamingStrategies.SNAKE_CASE); public String serialize(T payload) { mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); diff --git a/core-api/src/test/java/com/optimizely/ab/event/internal/serializer/JacksonSerializerTest.java b/core-api/src/test/java/com/optimizely/ab/event/internal/serializer/JacksonSerializerTest.java index fb068e3ab..79974a986 100644 --- a/core-api/src/test/java/com/optimizely/ab/event/internal/serializer/JacksonSerializerTest.java +++ b/core-api/src/test/java/com/optimizely/ab/event/internal/serializer/JacksonSerializerTest.java @@ -18,7 +18,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.optimizely.ab.event.internal.payload.EventBatch; import org.junit.Test; @@ -42,7 +42,7 @@ public class JacksonSerializerTest { private JacksonSerializer serializer = new JacksonSerializer(); private ObjectMapper mapper = new ObjectMapper().setPropertyNamingStrategy( - PropertyNamingStrategy.SNAKE_CASE); + PropertyNamingStrategies.SNAKE_CASE); @Test diff --git a/java-quickstart/build.gradle b/java-quickstart/build.gradle index a58fb090e..ef86b3045 100644 --- a/java-quickstart/build.gradle +++ b/java-quickstart/build.gradle @@ -4,7 +4,11 @@ dependencies { implementation project(':core-api') implementation project(':core-httpclient-impl') - implementation group: 'com.google.code.gson', name: 'gson', version: gsonVersion + // implementation group: 'com.google.code.gson', name: 'gson', version: gsonVersion + implementation 'com.fasterxml.jackson.core:jackson-core:2.17.0' + implementation 'com.fasterxml.jackson.core:jackson-annotations:2.17.0' + implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.0' + implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: httpClientVersion implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4jVersion implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: log4jVersion From 867a5f6ddb1084e40eb0958dc7341ce98a49b5c1 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Wed, 12 Nov 2025 14:35:13 -0800 Subject: [PATCH 2/5] test with jackson 2.20 --- java-quickstart/build.gradle | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/java-quickstart/build.gradle b/java-quickstart/build.gradle index ef86b3045..95eddf48f 100644 --- a/java-quickstart/build.gradle +++ b/java-quickstart/build.gradle @@ -5,9 +5,8 @@ dependencies { implementation project(':core-httpclient-impl') // implementation group: 'com.google.code.gson', name: 'gson', version: gsonVersion - implementation 'com.fasterxml.jackson.core:jackson-core:2.17.0' - implementation 'com.fasterxml.jackson.core:jackson-annotations:2.17.0' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.0' + implementation(platform("com.fasterxml.jackson:jackson-bom:2.20.0")) + implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") implementation group: 'org.apache.httpcomponents', name: 'httpclient', version: httpClientVersion implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: log4jVersion From 66fa557fee9756b433ea1b7f48564293263b1da2 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Wed, 12 Nov 2025 15:54:05 -0800 Subject: [PATCH 3/5] upgrade gradle to 8.10.2 --- build.gradle | 44 ++++-------------------- core-api/build.gradle | 8 ++--- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 11 insertions(+), 43 deletions(-) diff --git a/build.gradle b/build.gradle index 5b449a47e..24c546da8 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,6 @@ plugins { id 'com.github.kt3k.coveralls' version '2.12.2' id 'jacoco' id 'me.champeau.gradle.jmh' version '0.5.3' - id 'nebula.optional-base' version '3.1.0' id 'com.github.hierynomus.license' version '0.16.1' id 'com.github.spotbugs' version "6.0.14" id 'maven-publish' @@ -46,7 +45,6 @@ configure(publishedProjects) { apply plugin: 'maven-publish' apply plugin: 'signing' apply plugin: 'me.champeau.gradle.jmh' - apply plugin: 'nebula.optional-base' apply plugin: 'com.github.hierynomus.license' sourceCompatibility = 1.8 @@ -88,6 +86,10 @@ configure(publishedProjects) { jmh.java.srcDirs += sourceSets.test.java.srcDirs } + tasks.named('compileJmhJava') { + dependsOn processTestResources, compileTestJava + } + dependencies { jmh 'org.openjdk.jmh:jmh-core:1.12' jmh 'org.openjdk.jmh:jmh-generator-annprocess:1.12' @@ -183,42 +185,8 @@ nexusPublishing { } } -task jacocoMerge(type: JacocoMerge) { - publishedProjects.each { subproject -> - executionData subproject.tasks.withType(Test) - } - doFirst { - executionData = files(executionData.findAll { it.exists() }) - } -} - -task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') { - description = 'Generates an aggregate report from all subprojects' - dependsOn publishedProjects.test, jacocoMerge - - getAdditionalSourceDirs().setFrom(files(publishedProjects.sourceSets.main.allSource.srcDirs)) - getSourceDirectories().setFrom(files(publishedProjects.sourceSets.main.allSource.srcDirs)) - getAdditionalClassDirs().setFrom(files(publishedProjects.sourceSets.main.output)) - executionData jacocoMerge.destinationFile - - reports { - html.enabled = true // human readable - xml.enabled = true // required by coveralls - } -} - -coveralls { - sourceDirs = publishedProjects.sourceSets.main.allSource.srcDirs.flatten() - jacocoReportPath = "${buildDir}/reports/jacoco/jacocoRootReport/jacocoRootReport.xml" -} - -tasks.coveralls { - group = 'Coverage reports' - description = 'Uploads the aggregated coverage report to Coveralls' - - dependsOn jacocoRootReport - onlyIf { System.env.'CI' && !JavaVersion.current().isJava9Compatible() } -} +// Note: Aggregate JaCoCo reporting has been removed due to type resolution issues with Gradle 8.x +// Individual subprojects still generate their own coverage reports via the jacoco plugin // standard POM format required by MavenCentral def customizePom(pom, title) { diff --git a/core-api/build.gradle b/core-api/build.gradle index 602131cd3..23a7a316a 100644 --- a/core-api/build.gradle +++ b/core-api/build.gradle @@ -7,10 +7,10 @@ dependencies { testImplementation group: 'ch.qos.logback', name: 'logback-classic', version: logbackVersion // an assortment of json parsers - compileOnly group: 'com.google.code.gson', name: 'gson', version: gsonVersion, optional - compileOnly group: 'org.json', name: 'json', version: jsonVersion, optional - compileOnly group: 'com.googlecode.json-simple', name: 'json-simple', version: jsonSimpleVersion, optional - compileOnly group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jacksonVersion, optional + compileOnly group: 'com.google.code.gson', name: 'gson', version: gsonVersion + compileOnly group: 'org.json', name: 'json', version: jsonVersion + compileOnly group: 'com.googlecode.json-simple', name: 'json-simple', version: jsonSimpleVersion + compileOnly group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jacksonVersion } tasks.named('processJmhResources') { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a254..1e2fbf0d4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From d5345c14efc5f70dc0ba1396386e5283bf6001b6 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Wed, 12 Nov 2025 16:05:36 -0800 Subject: [PATCH 4/5] fix github flow jdk --- .github/workflows/java.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml index 95e8ccf8d..d54113ae6 100644 --- a/.github/workflows/java.yml +++ b/.github/workflows/java.yml @@ -49,17 +49,17 @@ jobs: strategy: fail-fast: false matrix: - jdk: [8, 9] + jdk: [8, 11, 17] optimizely_default_parser: [GSON_CONFIG_PARSER, JACKSON_CONFIG_PARSER, JSON_CONFIG_PARSER, JSON_SIMPLE_CONFIG_PARSER] steps: - name: checkout uses: actions/checkout@v4 - name: set up JDK ${{ matrix.jdk }} - uses: AdoptOpenJDK/install-jdk@v1 + uses: actions/setup-java@v4 with: - version: ${{ matrix.jdk }} - architecture: x64 + distribution: 'temurin' + java-version: ${{ matrix.jdk }} - name: Grant execute permission for gradlew run: chmod +x gradlew From 524a457cc106915d170eb8b42f408bf41d850039 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Wed, 12 Nov 2025 16:09:27 -0800 Subject: [PATCH 5/5] use zulu jdk --- .github/workflows/java.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml index d54113ae6..c88a51436 100644 --- a/.github/workflows/java.yml +++ b/.github/workflows/java.yml @@ -49,7 +49,7 @@ jobs: strategy: fail-fast: false matrix: - jdk: [8, 11, 17] + jdk: [8, 11] optimizely_default_parser: [GSON_CONFIG_PARSER, JACKSON_CONFIG_PARSER, JSON_CONFIG_PARSER, JSON_SIMPLE_CONFIG_PARSER] steps: - name: checkout @@ -58,7 +58,7 @@ jobs: - name: set up JDK ${{ matrix.jdk }} uses: actions/setup-java@v4 with: - distribution: 'temurin' + distribution: 'zulu' java-version: ${{ matrix.jdk }} - name: Grant execute permission for gradlew