fix(gradle-plugin): Fix Jackson version conflicts in Gradle plugin via Worker API classpath isolation#23056
Open
sergeykad wants to merge 2 commits intoOpenAPITools:masterfrom
Open
Conversation
…ckson version conflicts (OpenAPITools#18753) Move code generation into a Gradle Worker API WorkAction with classLoaderIsolation, preventing buildscript classpath conflicts (e.g. Jackson version mismatches from Spring Boot or other plugins). - Extract generation logic into GenerateWorkAction/GenerateWorkParameters - Always use classLoaderIsolation in GenerateTask.doWork() - Add openApiGeneratorClasspath configuration for custom generator jars - Wire missing enumNameMappings and operationIdNameMappings from extension to task - Add TestKit tests for WorkAction property wiring
Contributor
There was a problem hiding this comment.
1 issue found across 6 files
Prompt for AI agents (all issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt">
<violation number="1" location="modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt:70">
P2: generatorClasspath affects code generation but is annotated @Internal, so Gradle up-to-date checks and build cache ignore changes to openApiGeneratorClasspath, risking stale outputs.</violation>
</file>
Since this is your first cubic review, here's how it works:
- cubic automatically reviews your code and comments on bugs and improvements
- Teach cubic by replying to its comments. cubic learns from your replies and gets better over time
- Add one-off context when rerunning by tagging
@cubic-dev-aiwith guidance or docs links (includingllms.txt) - Ask questions if you need clarification on any suggestion
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
...gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt
Outdated
Show resolved
Hide resolved
…p-to-date and cache tracking Switch generatorClasspath from @internal to @optional @classpath now that defaultDependencies is removed. The configuration is empty by default and resolves without repositories, so @classpath works for input snapshotting.
Contributor
|
Hi @sergeykad , I opened another PR regarding gradle plugin recently. Can you check whether it makes sense to consolidate both PRs into one? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fix Jackson version conflicts in Gradle plugin via Worker API classpath isolation
Fixes #18753
When other Gradle plugins (e.g. Spring Boot) place an incompatible Jackson version on the buildscript classpath, the openapi-generator plugin fails with
NoSuchMethodErroror similar classloading errors. This PR moves code generation into a Gradle Worker APIWorkActionwithclassLoaderIsolation, shielding the generator from buildscript classpath pollution.Changes
GenerateTask, runs inside an isolated classloaderWorkParametersinterface mirroring allGenerateTaskpropertiesdoWork()now submits aGenerateWorkActionviaworkerExecutor.classLoaderIsolation()instead of running generation inlineopenApiGeneratorClasspathconfiguration for users who need extra jars (custom generators); wires missingenumNameMappingsandoperationIdNameMappingsfrom extension to taskopenApiGeneratorVersionsystem property to testsHow it works
classLoaderIsolationcreates a worker classloader that inherits the plugin's own classpath (openapi-generator + correct Jackson) but hides the buildscript classpath. Other plugins' Jackson versions never reach the generator.How to validate
org.openapi.generatorand a plugin that brings a conflicting Jackson (e.g. Spring Boot 3.x)openApiGenerate— should succeed withoutNoSuchMethodErroropenApiGeneratorClasspathconfiguration — they should be picked up by the workerPR checklist
Commit all changed files.
This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
These must match the expectations made by your contribution.
You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example
./bin/generate-samples.sh bin/configs/java*.IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
master(upcoming7.x.0minor release - breaking changes with fallbacks),8.0.x(breaking changes without fallbacks)"fixes #123"present in the PR description)Summary by cubic
Isolated the OpenAPI Generator Gradle task using the Worker API with classLoaderIsolation to prevent Jackson version conflicts from other plugins (e.g., Spring Boot). Added a classpath hook for custom generators with @classpath tracking and wired missing enum/operationId mappings.
Bug Fixes
New Features
Written for commit 8368ad3. Summary will update on new commits.