From a1ec8a339ae0777585b959955d98f25e5d43064f Mon Sep 17 00:00:00 2001 From: kuntal1461 Date: Tue, 7 Oct 2025 23:44:02 +0530 Subject: [PATCH 1/3] By Kuntal : feat(bom) add Maven BOM module for swagger-core (#4966) --- README.md | 57 ++++++++++++++++++++++++++++ modules/swagger-bom/pom.xml | 75 +++++++++++++++++++++++++++++++++++++ pom.xml | 1 + 3 files changed, 133 insertions(+) create mode 100644 modules/swagger-bom/pom.xml diff --git a/README.md b/README.md index 931b0363eb..867ed6e3da 100644 --- a/README.md +++ b/README.md @@ -156,6 +156,63 @@ Of course if you don't want to build locally you can grab artifacts from maven c `https://repo1.maven.org/maven2/io/swagger/core/` +### Maven BOM + +To manage Swagger dependencies consistently across modules, import the Swagger Core BOM and omit versions on individual Swagger dependencies: + +```xml + + + + io.swagger.core.v3 + swagger-bom + ${swagger-openapiv3.version} + pom + import + + + + + + + + + io.swagger.core.v3 + swagger-annotations + + + io.swagger.core.v3 + swagger-models + + + io.swagger.core.v3 + swagger-core + + + io.swagger.core.v3 + swagger-integration + + + io.swagger.core.v3 + swagger-jaxrs2 + + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2 + + + + io.swagger.core.v3 + swagger-java17-support + + +``` + ## Sample Apps The samples have moved to [a new repository](https://github.com/swagger-api/swagger-samples/tree/2.0) and contain various integrations and configurations. diff --git a/modules/swagger-bom/pom.xml b/modules/swagger-bom/pom.xml new file mode 100644 index 0000000000..7b15d3d99b --- /dev/null +++ b/modules/swagger-bom/pom.xml @@ -0,0 +1,75 @@ + + 4.0.0 + + io.swagger.core.v3 + swagger-bom + 2.2.38-SNAPSHOT + pom + + swagger-bom + Bill of Materials (BOM) for Swagger Core (OpenAPI 3) + https://github.com/swagger-api/swagger-core + + + scm:git:git@github.com:swagger-api/swagger-core.git + scm:git:git@github.com:swagger-api/swagger-core.git + https://github.com/swagger-api/swagger-core + + + + + Apache License 2.0 + http://www.apache.org/licenses/LICENSE-2.0.html + repo + + + + + + + + io.swagger.core.v3 + swagger-annotations + ${project.version} + + + io.swagger.core.v3 + swagger-models + ${project.version} + + + io.swagger.core.v3 + swagger-core + ${project.version} + + + io.swagger.core.v3 + swagger-integration + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2 + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2 + ${project.version} + + + io.swagger.core.v3 + swagger-java17-support + ${project.version} + + + + + + diff --git a/pom.xml b/pom.xml index cc2a194647..dff31d7196 100644 --- a/pom.xml +++ b/pom.xml @@ -401,6 +401,7 @@ modules/swagger-jaxrs2 modules/swagger-jaxrs2-servlet-initializer modules/swagger-jaxrs2-servlet-initializer-v2 + modules/swagger-bom modules/swagger-maven-plugin modules/swagger-eclipse-transformer-maven-plugin modules/swagger-project-jakarta From cae1222f8a5d15b16303c06585d8613a7d54409f Mon Sep 17 00:00:00 2001 From: Ewa Ostrowska Date: Wed, 8 Apr 2026 11:29:22 +0200 Subject: [PATCH 2/3] add jakarta artifacts and CI drift-guard --- .github/workflows/maven-pulls.yml | 10 +++++ .github/workflows/maven.yml | 10 +++++ CHANGELOG.md | 18 ++++++++ CI/post-release.sh | 5 +++ CI/prepare-release.sh | 5 +++ README.md | 62 ++++++++++++++++++++++++--- modules/swagger-bom/pom.xml | 70 ++++++++++++++++++++++++++++++- 7 files changed, 174 insertions(+), 6 deletions(-) create mode 100644 CHANGELOG.md diff --git a/.github/workflows/maven-pulls.yml b/.github/workflows/maven-pulls.yml index 17523a0923..44b8d0f4f0 100644 --- a/.github/workflows/maven-pulls.yml +++ b/.github/workflows/maven-pulls.yml @@ -29,6 +29,16 @@ jobs: key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- + - name: Check swagger-bom version matches root version + run: | + ROOT_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec) + BOM_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec --file modules/swagger-bom/pom.xml) + echo "Root version: ${ROOT_VERSION}" + echo "BOM version: ${BOM_VERSION}" + if [ "${ROOT_VERSION}" != "${BOM_VERSION}" ]; then + echo "ERROR: swagger-bom version (${BOM_VERSION}) does not match root version (${ROOT_VERSION}). Update modules/swagger-bom/pom.xml." + exit 1 + fi - name: Build with Maven and Gradle run: | ./mvnw --no-transfer-progress -B install --file pom.xml diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 1ac4203cb9..583f1dd29c 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -29,6 +29,16 @@ jobs: key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- + - name: Check swagger-bom version matches root version + run: | + ROOT_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec) + BOM_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec --file modules/swagger-bom/pom.xml) + echo "Root version: ${ROOT_VERSION}" + echo "BOM version: ${BOM_VERSION}" + if [ "${ROOT_VERSION}" != "${BOM_VERSION}" ]; then + echo "ERROR: swagger-bom version (${BOM_VERSION}) does not match root version (${ROOT_VERSION}). Update modules/swagger-bom/pom.xml." + exit 1 + fi - name: Build with Maven and Gradle, Deploy snapshot to maven central run: | export MY_POM_VERSION=`./mvnw -q -Dexec.executable="echo" -Dexec.args='${projects.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec` diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..3d953f0b48 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,18 @@ +# Changelog + +## 2.2.47-SNAPSHOT + +### New Features + +- **`swagger-bom`**: Added Maven Bill of Materials (BOM) module (`io.swagger.core.v3:swagger-bom`). + The BOM manages **both** the `javax` artifact family and the Jakarta (`-jakarta` suffix) artifact family + in a single import. Consumers can import the BOM once and omit explicit versions on all + `io.swagger.core.v3` runtime dependencies. + Covered artifacts: `swagger-annotations`, `swagger-models`, `swagger-core`, `swagger-integration`, + `swagger-jaxrs2`, `swagger-jaxrs2-servlet-initializer`, `swagger-jaxrs2-servlet-initializer-v2`, + `swagger-java17-support`, and their `-jakarta` counterparts. + Build plugins are intentionally excluded from the BOM. + +--- + +For earlier releases see the [GitHub Releases page](https://github.com/swagger-api/swagger-core/releases). diff --git a/CI/post-release.sh b/CI/post-release.sh index 7e95b3c2b7..fae521299e 100755 --- a/CI/post-release.sh +++ b/CI/post-release.sh @@ -23,6 +23,11 @@ python $CUR/CI/publishRelease.py "$SC_RELEASE_TAG" ./mvnw versions:set -DnewVersion="${SC_NEXT_VERSION}-SNAPSHOT" ./mvnw versions:commit +cd modules/swagger-bom +../../mvnw versions:set -DnewVersion="${SC_NEXT_VERSION}-SNAPSHOT" +../../mvnw versions:commit +cd ../.. + cd modules/swagger-project-jakarta ../../mvnw versions:set -DnewVersion="${SC_NEXT_VERSION}-SNAPSHOT" ../../mvnw versions:commit diff --git a/CI/prepare-release.sh b/CI/prepare-release.sh index 771451ccf6..878cf34606 100755 --- a/CI/prepare-release.sh +++ b/CI/prepare-release.sh @@ -25,6 +25,11 @@ python $CUR/CI/releaseNotes.py "$SC_LAST_RELEASE" "$SC_RELEASE_TITLE" "$SC_RELEA ./mvnw versions:set -DnewVersion=$SC_VERSION ./mvnw versions:commit +cd modules/swagger-bom +../../mvnw versions:set -DnewVersion=$SC_VERSION +../../mvnw versions:commit +cd ../.. + cd modules/swagger-project-jakarta ../../mvnw versions:set -DnewVersion=$SC_VERSION ../../mvnw versions:commit diff --git a/README.md b/README.md index 867ed6e3da..1400dc77f7 100644 --- a/README.md +++ b/README.md @@ -158,7 +158,16 @@ Of course if you don't want to build locally you can grab artifacts from maven c ### Maven BOM -To manage Swagger dependencies consistently across modules, import the Swagger Core BOM and omit versions on individual Swagger dependencies: +The `swagger-bom` artifact is a Bill of Materials that manages **both** the `javax` and Jakarta (`-jakarta` suffix) artifact families. +Import it once and omit versions on all individual Swagger dependencies. + +> **Note:** Maven and Gradle build plugins (`swagger-maven-plugin`, `swagger-gradle-plugin`, +> `swagger-eclipse-transformer-maven-plugin`) are intentionally **excluded** from the BOM. +> Plugins are applied via `` or `plugins {}`, not via ``, +> so including them in the BOM would be misleading and could conflict with the plugin +> management section of a consumer's build. + +#### Maven ```xml @@ -171,11 +180,11 @@ To manage Swagger dependencies consistently across modules, import the Swagger C import - - + + io.swagger.core.v3 swagger-annotations @@ -196,7 +205,6 @@ To manage Swagger dependencies consistently across modules, import the Swagger C io.swagger.core.v3 swagger-jaxrs2 - io.swagger.core.v3 swagger-jaxrs2-servlet-initializer @@ -205,14 +213,58 @@ To manage Swagger dependencies consistently across modules, import the Swagger C io.swagger.core.v3 swagger-jaxrs2-servlet-initializer-v2 - io.swagger.core.v3 swagger-java17-support + + + io.swagger.core.v3 + swagger-annotations-jakarta + + + io.swagger.core.v3 + swagger-models-jakarta + + + io.swagger.core.v3 + swagger-core-jakarta + + + io.swagger.core.v3 + swagger-integration-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2-jakarta + ``` +#### Gradle + +```kotlin +dependencies { + implementation(platform("io.swagger.core.v3:swagger-bom:${swaggerOpenapiv3Version}")) + + // javax artifacts — no version needed + implementation("io.swagger.core.v3:swagger-annotations") + implementation("io.swagger.core.v3:swagger-core") + + // Jakarta namespace artifacts — no version needed + implementation("io.swagger.core.v3:swagger-annotations-jakarta") + implementation("io.swagger.core.v3:swagger-core-jakarta") +} +``` + ## Sample Apps The samples have moved to [a new repository](https://github.com/swagger-api/swagger-samples/tree/2.0) and contain various integrations and configurations. diff --git a/modules/swagger-bom/pom.xml b/modules/swagger-bom/pom.xml index 7b15d3d99b..1046fe615a 100644 --- a/modules/swagger-bom/pom.xml +++ b/modules/swagger-bom/pom.xml @@ -4,7 +4,7 @@ io.swagger.core.v3 swagger-bom - 2.2.38-SNAPSHOT + 2.2.47-SNAPSHOT pom swagger-bom @@ -25,6 +25,38 @@ + + + daniel-kmiecik + Daniel Kmiecik + + + djankowsk + Damian Jankowski + + + ewaostrowska + Ewa Ostrowska + + + + + + + org.sonatype.central + central-publishing-maven-plugin + 0.7.0 + true + + central + true + published + 3600 + + + + + @@ -68,6 +100,42 @@ swagger-java17-support ${project.version} + + + io.swagger.core.v3 + swagger-annotations-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-models-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-core-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-integration-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-jakarta + ${project.version} + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2-jakarta + ${project.version} + From 4c82d4b857d9fb84f42b1421ba2117c749848ff1 Mon Sep 17 00:00:00 2001 From: Ewa Ostrowska Date: Wed, 8 Apr 2026 12:32:58 +0200 Subject: [PATCH 3/3] add integration test module and enforcer plugin --- .github/workflows/prepare-release.yml | 10 ++ .github/workflows/release.yml | 10 ++ CHANGELOG.md | 18 --- README.md | 4 - modules/swagger-bom-integration-test/pom.xml | 141 +++++++++++++++++++ modules/swagger-bom/pom.xml | 40 +++++- pom.xml | 1 + 7 files changed, 197 insertions(+), 27 deletions(-) delete mode 100644 CHANGELOG.md create mode 100644 modules/swagger-bom-integration-test/pom.xml diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 197485c3f3..758de11eee 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -35,6 +35,16 @@ jobs: key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- + - name: Check swagger-bom version matches root version + run: | + ROOT_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec) + BOM_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec --file modules/swagger-bom/pom.xml) + echo "Root version: ${ROOT_VERSION}" + echo "BOM version: ${BOM_VERSION}" + if [ "${ROOT_VERSION}" != "${BOM_VERSION}" ]; then + echo "ERROR: swagger-bom version (${BOM_VERSION}) does not match root version (${ROOT_VERSION}). Update modules/swagger-bom/pom.xml." + exit 1 + fi - name: Run prepare release script id: prepare-release run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6599a14554..ad815fd49e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,6 +40,16 @@ jobs: run: | mkdir -p ~/.gradle echo "gradle.publish.key=${GRADLE_PUBLISH_KEY}\ngradle.publish.secret=${GRADLE_PUBLISH_SECRET}" > ~/.gradle/gradle.properties + - name: Check swagger-bom version matches root version + run: | + ROOT_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec) + BOM_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec --file modules/swagger-bom/pom.xml) + echo "Root version: ${ROOT_VERSION}" + echo "BOM version: ${BOM_VERSION}" + if [ "${ROOT_VERSION}" != "${BOM_VERSION}" ]; then + echo "ERROR: swagger-bom version (${BOM_VERSION}) does not match root version (${ROOT_VERSION}). Update modules/swagger-bom/pom.xml." + exit 1 + fi - name: Run pre release script id: preRelease run: | diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 3d953f0b48..0000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Changelog - -## 2.2.47-SNAPSHOT - -### New Features - -- **`swagger-bom`**: Added Maven Bill of Materials (BOM) module (`io.swagger.core.v3:swagger-bom`). - The BOM manages **both** the `javax` artifact family and the Jakarta (`-jakarta` suffix) artifact family - in a single import. Consumers can import the BOM once and omit explicit versions on all - `io.swagger.core.v3` runtime dependencies. - Covered artifacts: `swagger-annotations`, `swagger-models`, `swagger-core`, `swagger-integration`, - `swagger-jaxrs2`, `swagger-jaxrs2-servlet-initializer`, `swagger-jaxrs2-servlet-initializer-v2`, - `swagger-java17-support`, and their `-jakarta` counterparts. - Build plugins are intentionally excluded from the BOM. - ---- - -For earlier releases see the [GitHub Releases page](https://github.com/swagger-api/swagger-core/releases). diff --git a/README.md b/README.md index 1400dc77f7..207164474b 100644 --- a/README.md +++ b/README.md @@ -213,10 +213,6 @@ Import it once and omit versions on all individual Swagger dependencies. io.swagger.core.v3 swagger-jaxrs2-servlet-initializer-v2 - - io.swagger.core.v3 - swagger-java17-support - io.swagger.core.v3 diff --git a/modules/swagger-bom-integration-test/pom.xml b/modules/swagger-bom-integration-test/pom.xml new file mode 100644 index 0000000000..49730678af --- /dev/null +++ b/modules/swagger-bom-integration-test/pom.xml @@ -0,0 +1,141 @@ + + 4.0.0 + + + io.swagger.core.v3 + swagger-project + 2.2.47-SNAPSHOT + ../.. + + + swagger-bom-integration-test + pom + + swagger-bom-integration-test + Verifies that swagger-bom manages all expected artifacts at the correct version + + + + true + true + + + + + + io.swagger.core.v3 + swagger-bom + ${project.version} + pom + import + + + + + + + + + io.swagger.core.v3 + swagger-annotations + + + io.swagger.core.v3 + swagger-models + + + io.swagger.core.v3 + swagger-core + + + io.swagger.core.v3 + swagger-integration + + + io.swagger.core.v3 + swagger-jaxrs2 + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2 + + + + io.swagger.core.v3 + swagger-annotations-jakarta + + + io.swagger.core.v3 + swagger-models-jakarta + + + io.swagger.core.v3 + swagger-core-jakarta + + + io.swagger.core.v3 + swagger-integration-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-jakarta + + + io.swagger.core.v3 + swagger-jaxrs2-servlet-initializer-v2-jakarta + + + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + + + enforce-versions + + true + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + verify-bom-deps-resolve + validate + + resolve + + + io.swagger.core.v3 + + + + + + + + diff --git a/modules/swagger-bom/pom.xml b/modules/swagger-bom/pom.xml index 1046fe615a..242473a147 100644 --- a/modules/swagger-bom/pom.xml +++ b/modules/swagger-bom/pom.xml @@ -40,6 +40,11 @@ + + github + https://github.com/swagger-api/swagger-core/issues + + @@ -57,6 +62,36 @@ + + + release + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + --pinentry-mode + loopback + + + + + sign-artifacts + verify + + sign + + + + + + + + + @@ -95,11 +130,6 @@ swagger-jaxrs2-servlet-initializer-v2 ${project.version} - - io.swagger.core.v3 - swagger-java17-support - ${project.version} - io.swagger.core.v3 diff --git a/pom.xml b/pom.xml index dff31d7196..df82cd7eef 100644 --- a/pom.xml +++ b/pom.xml @@ -405,6 +405,7 @@ modules/swagger-maven-plugin modules/swagger-eclipse-transformer-maven-plugin modules/swagger-project-jakarta + modules/swagger-bom-integration-test