adamsaghy opened a new pull request, #6468:
URL: https://github.com/apache/fineract/pull/6468

   ## Description
   
   Fixes the `run-sonarqube` job, failing on `develop` since the Spring Boot 
4.1 upgrade (476b600410), and removes the obsolete Java 8 baseline that caused 
it.
   
   ### The failure
   
   ```
   Could not resolve all files for configuration 
':fineract-avro-schemas:testCompileClasspath'.
   > Could not resolve org.junit.jupiter:junit-jupiter-api.
     > Dependency resolution is looking for a library compatible with JVM 
runtime version 8,
       but 'org.junit.jupiter:junit-jupiter-api:6.0.3' is only compatible with 
JVM runtime version 17 or newer.
   ```
   
   The Boot 4 BOM brings JUnit 6.0.3, which requires JVM 17+. `fineract-client` 
and `fineract-avro-schemas` pinned Java 8 via the `java {}` extension, which 
applies to *every* source set — so `testCompileClasspath` requested a JVM 8 
variant and JUnit 6 became unresolvable.
   
   Only Sonar caught it: `fineract-avro-schemas` has no `src/test`, so 
`compileTestJava` is `NO-SOURCE` and that configuration is never resolved in a 
normal build. `:sonar` resolves every module's test classpath, so it is the 
only job that trips.
   
   ### Why drop Java 8 rather than work around it
   
   The pin dates to 0897f172ee (Oct 2020), citing FINERACT-1214 — which is 
actually a bug about the Swagger client returning RxJava `Observable`s. Android 
appears there only in a wish-list of SDK variants that was never built. Three 
things make the baseline obsolete:
   
   - **For `fineract-avro-schemas` it was already broken.** Avro 1.12.1 is Java 
11 bytecode (major 55) and every generated class extends `SpecificRecordBase`, 
so a Java 8 JVM would fail with `UnsupportedClassVersionError`. Gradle never 
caught this because Avro publishes POM-only metadata, carrying no 
`org.gradle.jvm.version` attribute.
   - **Android no longer needs Java 8 bytecode.** Android 14 ships OpenJDK 17 
core libraries, and D8 desugars for lower `minSdk`.
   - **Nothing is being consumed.** No artifacts exist under 
`org.apache.fineract` on Maven Central; the only publish anywhere is one ASF 
snapshot, `fineract-client 1.6.1-…-SNAPSHOT`, dated May 2022.
   
   ### Changes
   
   | Module | Before | After |
   |---|---|---|
   | `fineract-client` | Java 8 (major 52) | **Java 17** (major 61) |
   | `fineract-avro-schemas` | Java 8 (major 52) | **toolchain, Java 25** 
(major 69) |
   
   `fineract-client` is set to 17 rather than the toolchain's 25 deliberately: 
Android 14 provides Java 17 core libraries and AGP still requires/targets JDK 
17, so Java 21+ bytecode is not consumable by D8/R8. Letting it inherit the 
toolchain would emit major 69 and silently break Android consumers. 
`fineract-avro-schemas` has no such story — it is consumed only by server-side 
modules, all on toolchain 25.
   
   Also removed, all tied to that baseline:
   
   - the `org.junit:junit-bom:5.14.4` workaround in `fineract-client` — raising 
to 17 fixes the incompatibility at its source, so the repo is now uniformly on 
JUnit 6.0.3
   - `-Xlint:-options` in `fineract-avro-schemas`, which only silenced javac's 
*"source 8 is obsolete"*
   - `com.squareup.retrofit2:adapter-java8` — unused (the client registers no 
call adapter factories) and present only because Retrofit's core kept a 
pre-Java-8 baseline; plus the `adapter-java8` / `converter-java8` entries in 
`buildSrc`
   - `"fineract-client/**"` from `renovate.json` `ignorePaths`, added in 
971179ce6d as *"specific versions for a reason"* with the reason never 
recorded. It blocked exactly two pins: `jackson-databind-nullable:0.2.6` 
(already the latest) and `jakarta.annotation-api:1.3.5`. The latter is a real 
constraint but a **namespace** one, not a Java baseline one — the generated 
code has 1,464 uses of `javax.annotation.Generated`, which only exists in the 
1.x line. Replaced with a scoped `packageRule` documenting that, so the 
module's other dependencies become updatable again.
   
   Left in place deliberately: `dateLibrary: 'java8'` (in OpenAPI Generator 
this selects `java.time`; the alternative is `legacy` = `java.util.Date`), 
`jackson-datatype-jdk8`, `cucumber-java8`, `jsr305` and 
`jakarta.annotation-api:1.3.5`. Despite the names, none are Java 8 
compatibility shims.
   
   ### Verification
   
   - `:sonar` completes across the whole project (real task, `dumpToFile` mode, 
no token needed) — this also confirms no second failure was hiding behind the 
first.
   - `:fineract-client:check` and `:fineract-avro-schemas:check` pass with 
`--rerun-tasks`, including modernizer, which now evaluates at 17/25 instead of 
8.
   - `:integration-tests:compileTestJava` and 
`:fineract-e2e-tests-core:compileTestJava` compile — integration-tests is the 
real consumer of `fineract-client`, across 473 files.
   - Bytecode confirmed with `javap`; `junit-jupiter-api-6.0.3.jar` is the only 
JUnit on any classpath repo-wide.
   
   ### Note for reviewers
   
   This raises the published baseline for `fineract-client` from Java 8 to Java 
17, so it is a deliberate compatibility change, not just a CI fix. No consumer 
is believed to be affected given nothing has been published since 2022 — but if 
you know of a Java 8 consumer of this SDK, please say so here.
   
   ## Checklist
   
   - [x] Write the commit message as per [our 
guidelines](https://github.com/apache/fineract/blob/develop/CONTRIBUTING.md#pull-requests)
   - [x] Acknowledge that we will not review PRs that are not passing the build 
_("green")_
   - [ ] Create/update [unit or integration 
tests](https://fineract.apache.org/docs/current/#_testing) — N/A: 
build-configuration change, no production code affected; covered by the 
existing `fineract-client` suite and by `:sonar` itself, the job that regressed.
   - [x] Follow our [coding 
conventions](https://cwiki.apache.org/confluence/display/FINERACT/Coding+Conventions).
   - [ ] Add required Swagger annotation and update API documentation — N/A: no 
API changes.
   - [x] [This PR must not be a "code 
dump"](https://cwiki.apache.org/confluence/display/FINERACT/Pull+Request+Size+Limit)
 — 5 files, +14/-23.
   - [ ] If merging this PR resolves a JIRA issue, I will mark that issue as 
resolved and set "Fix Version/s" appropriately.
   - [ ] I followed the [AI 
Policy](https://github.com/apache/fineract/blob/develop/CONTRIBUTING.md#ai-policy).
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to