From 778a4713a5a5c40437563f9bd217e7cb74d6afbb Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 16:43:11 +0000 Subject: [PATCH 001/115] Added: publish.gradle.kts --- build.gradle.kts | 4 ++++ publish.gradle.kts | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 publish.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts index 0d1ce83..81cc3c1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -229,3 +229,7 @@ tasks.named("asciidoctor", org.asciidoctor.gradle.AsciidoctorTask::class) { "source-highlighter" to "prettify" )) } + +apply { + from("${rootDir}/publish.gradle.kts") +} diff --git a/publish.gradle.kts b/publish.gradle.kts new file mode 100644 index 0000000..5e780a6 --- /dev/null +++ b/publish.gradle.kts @@ -0,0 +1,27 @@ +import org.gradle.api.publish.PublishingExtension + +allprojects { + apply(plugin = "maven-publish") + + tasks.withType().configureEach { + options { + this as StandardJavadocDocletOptions + + if(JavaVersion.current().isJava8Compatible()) { + addStringOption("Xdoclint:none", "-quiet") + } + if(JavaVersion.current().isJava9Compatible()) { + addBooleanOption("html5", true) + } + } + } + + configure { + repositories { + maven { + // Default is Maven buildDirectory publish only + url = uri(layout.buildDirectory.dir("repo")) + } + } + } +} From a8452c8c12addc1fbfeedb3802a1a1ce387c3c65 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 17:15:10 +0000 Subject: [PATCH 002/115] Added: .github/workflows/build.yml --- .github/workflows/build.yml | 84 +++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..2f71f48 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,84 @@ +name: CI-Gradle-build + +on: + push: + workflow_dispatch: + schedule: + # * is a special character in YAML + # setup monthly background build + - cron: '45 4 18 * *' + +jobs: + gradle: + strategy: + matrix: + os: [ubuntu-latest] + jvm: ['8', '11'] + runs-on: ${{ matrix.os }} + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Version + run: | + target_plugin="org.unbroken-dome.xjc" + target_group=$(grep "^group=" gradle.properties | cut -d'=' -f2-) + target_artifact="gradle-xjc-plugin" + target_version=$(grep "^version=" gradle.properties | cut -d'=' -f2-) + + echo "target_plugin=$target_plugin" >> $GITHUB_ENV + echo "target_group=$target_group" >> $GITHUB_ENV + echo "target_artifact=$target_artifact" >> $GITHUB_ENV + echo "target_version=$target_version" >> $GITHUB_ENV + + - name: Java + uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: ${{ matrix.jvm }} + + - name: Cache + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle', '**/gradle-wrapper.properties', '**/gradle.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Gradle - setup + uses: gradle/gradle-build-action@v2 + + - name: Gradle - build + run: ./gradlew build + + - name: Gradle - check + run: ./gradlew check + + - name: Gradle - integrationTest + if: ${{ vars.GRADLE_TARGET_ENABLE_integrationTest == 'true' }} + run: ./gradlew integrationTest + + - name: Gradle - publish + run: ./gradlew publish + + - name: Upload - prepare + if: ${{ matrix.os == 'ubuntu-latest' }} + shell: bash + run: | + mkdir dist; + for dir in $(find . -type d -path "*/build/repo"); + do + cp -a "$dir" "dist/"; + done + find "dist" -type f -exec ls -ld {} \; + du -s "dist" + + - name: Upload - perform + uses: actions/upload-artifact@v3 + if: ${{ matrix.os == 'ubuntu-latest' }} + with: + name: java${{ matrix.jvm }}-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts + path: dist/repo/* + if-no-files-found: error From 435721e103b0c7033ee5b3513fdffbb24f5424c2 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 7 Mar 2023 19:49:20 +0000 Subject: [PATCH 003/115] Remove unused import jdk.nashorn.* also not default in JDK11 --- .../unbrokendome/gradle/plugins/xjc/XjcPluginIntegrationTest.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginIntegrationTest.kt index afbec45..4dc0708 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginIntegrationTest.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginIntegrationTest.kt @@ -6,7 +6,6 @@ import assertk.assertions.contains import assertk.assertions.containsAll import assertk.assertions.extracting import assertk.assertions.isFile -import jdk.nashorn.internal.runtime.regexp.joni.constants.AsmConstants import org.gradle.testkit.runner.GradleRunner import org.junit.platform.commons.annotation.Testable import org.objectweb.asm.ClassReader From ceced459f343142e0a463a7470aba375c3c80b87 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 7 Mar 2023 19:50:57 +0000 Subject: [PATCH 004/115] gradle.properties: version=2.1.0-SNAPSHOT --- README.adoc | 2 +- gradle.properties | 2 +- samples/groovy-dsl/basic/build.gradle | 2 +- samples/groovy-dsl/catalogs/consumer/build.gradle | 2 +- samples/groovy-dsl/complete/consumer/build.gradle | 2 +- samples/groovy-dsl/complete/library/build.gradle | 2 +- samples/groovy-dsl/episodes/episode-consumer/build.gradle | 2 +- samples/groovy-dsl/episodes/episode-producer/build.gradle | 2 +- samples/groovy-dsl/remote-schema/build.gradle | 2 +- samples/groovy-dsl/xjc-plugin/build.gradle | 2 +- samples/groovy-dsl/xjc-version-2_2/build.gradle | 2 +- samples/groovy-dsl/xjc-version-3_0/build.gradle | 2 +- samples/kotlin-dsl/basic/build.gradle.kts | 2 +- samples/kotlin-dsl/catalogs/consumer/build.gradle.kts | 2 +- samples/kotlin-dsl/complete/consumer/build.gradle.kts | 2 +- samples/kotlin-dsl/complete/library/build.gradle.kts | 2 +- samples/kotlin-dsl/episodes/episode-consumer/build.gradle.kts | 2 +- samples/kotlin-dsl/episodes/episode-producer/build.gradle.kts | 2 +- samples/kotlin-dsl/remote-schema/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-plugin/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/README.adoc b/README.adoc index d5806e7..d875bff 100644 --- a/README.adoc +++ b/README.adoc @@ -34,7 +34,7 @@ dependency on the JAXB API: .build.gradle(.kts) ---- plugins { - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } dependencies { diff --git a/gradle.properties b/gradle.properties index cf047a4..93a72cc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ kotlinVersion=1.3.72 group=org.unbroken-dome.gradle-plugins -version=2.0.0 +version=2.1.0-SNAPSHOT diff --git a/samples/groovy-dsl/basic/build.gradle b/samples/groovy-dsl/basic/build.gradle index 8335dff..e4ea7f1 100644 --- a/samples/groovy-dsl/basic/build.gradle +++ b/samples/groovy-dsl/basic/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.0.0' + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/catalogs/consumer/build.gradle b/samples/groovy-dsl/catalogs/consumer/build.gradle index 989154b..7dffdb2 100644 --- a/samples/groovy-dsl/catalogs/consumer/build.gradle +++ b/samples/groovy-dsl/catalogs/consumer/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.0.0' + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/complete/consumer/build.gradle b/samples/groovy-dsl/complete/consumer/build.gradle index 7bf14d5..c408abe 100644 --- a/samples/groovy-dsl/complete/consumer/build.gradle +++ b/samples/groovy-dsl/complete/consumer/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.0.0' + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/complete/library/build.gradle b/samples/groovy-dsl/complete/library/build.gradle index 9ffb38a..4de8d3d 100644 --- a/samples/groovy-dsl/complete/library/build.gradle +++ b/samples/groovy-dsl/complete/library/build.gradle @@ -1,6 +1,6 @@ plugins { id('java-library') - id('org.unbroken-dome.xjc') version '2.0.0' + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/episodes/episode-consumer/build.gradle b/samples/groovy-dsl/episodes/episode-consumer/build.gradle index 9286a63..5c54fba 100644 --- a/samples/groovy-dsl/episodes/episode-consumer/build.gradle +++ b/samples/groovy-dsl/episodes/episode-consumer/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.0.0' + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/episodes/episode-producer/build.gradle b/samples/groovy-dsl/episodes/episode-producer/build.gradle index c98a385..92af77e 100644 --- a/samples/groovy-dsl/episodes/episode-producer/build.gradle +++ b/samples/groovy-dsl/episodes/episode-producer/build.gradle @@ -1,6 +1,6 @@ plugins { id('java-library') - id('org.unbroken-dome.xjc') version '2.0.0' + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/remote-schema/build.gradle b/samples/groovy-dsl/remote-schema/build.gradle index 8335dff..e4ea7f1 100644 --- a/samples/groovy-dsl/remote-schema/build.gradle +++ b/samples/groovy-dsl/remote-schema/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.0.0' + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-plugin/build.gradle b/samples/groovy-dsl/xjc-plugin/build.gradle index 884965b..cd77101 100644 --- a/samples/groovy-dsl/xjc-plugin/build.gradle +++ b/samples/groovy-dsl/xjc-plugin/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.0.0' + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-2_2/build.gradle b/samples/groovy-dsl/xjc-version-2_2/build.gradle index 3fa1df6..81ca564 100644 --- a/samples/groovy-dsl/xjc-version-2_2/build.gradle +++ b/samples/groovy-dsl/xjc-version-2_2/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.0.0' + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-3_0/build.gradle b/samples/groovy-dsl/xjc-version-3_0/build.gradle index 9f7b011..66b3215 100644 --- a/samples/groovy-dsl/xjc-version-3_0/build.gradle +++ b/samples/groovy-dsl/xjc-version-3_0/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.0.0' + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' } diff --git a/samples/kotlin-dsl/basic/build.gradle.kts b/samples/kotlin-dsl/basic/build.gradle.kts index 4eb4f86..435eb69 100644 --- a/samples/kotlin-dsl/basic/build.gradle.kts +++ b/samples/kotlin-dsl/basic/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/catalogs/consumer/build.gradle.kts b/samples/kotlin-dsl/catalogs/consumer/build.gradle.kts index 00662c5..5eda45b 100644 --- a/samples/kotlin-dsl/catalogs/consumer/build.gradle.kts +++ b/samples/kotlin-dsl/catalogs/consumer/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/complete/consumer/build.gradle.kts b/samples/kotlin-dsl/complete/consumer/build.gradle.kts index 133ae5f..1651ac4 100644 --- a/samples/kotlin-dsl/complete/consumer/build.gradle.kts +++ b/samples/kotlin-dsl/complete/consumer/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/complete/library/build.gradle.kts b/samples/kotlin-dsl/complete/library/build.gradle.kts index d45b7e5..b9f42c6 100644 --- a/samples/kotlin-dsl/complete/library/build.gradle.kts +++ b/samples/kotlin-dsl/complete/library/build.gradle.kts @@ -1,6 +1,6 @@ plugins { `java-library` - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/episodes/episode-consumer/build.gradle.kts b/samples/kotlin-dsl/episodes/episode-consumer/build.gradle.kts index b4efc68..a2046e0 100644 --- a/samples/kotlin-dsl/episodes/episode-consumer/build.gradle.kts +++ b/samples/kotlin-dsl/episodes/episode-consumer/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/episodes/episode-producer/build.gradle.kts b/samples/kotlin-dsl/episodes/episode-producer/build.gradle.kts index 9c3ec8f..40b3f76 100644 --- a/samples/kotlin-dsl/episodes/episode-producer/build.gradle.kts +++ b/samples/kotlin-dsl/episodes/episode-producer/build.gradle.kts @@ -1,6 +1,6 @@ plugins { `java-library` - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/remote-schema/build.gradle.kts b/samples/kotlin-dsl/remote-schema/build.gradle.kts index 4eb4f86..435eb69 100644 --- a/samples/kotlin-dsl/remote-schema/build.gradle.kts +++ b/samples/kotlin-dsl/remote-schema/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-plugin/build.gradle.kts b/samples/kotlin-dsl/xjc-plugin/build.gradle.kts index 3846f0a..cea4ce4 100644 --- a/samples/kotlin-dsl/xjc-plugin/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-plugin/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts b/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts index 55c2a94..dc22285 100644 --- a/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts b/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts index f65e972..849a737 100644 --- a/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.0.0" + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" } From 123c2f2c502225970b879b2ce14aa3733d187e29 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 7 Mar 2023 19:51:44 +0000 Subject: [PATCH 005/115] repositories: jcenter() => mavenCentral() See link from Feb 2021: https://blog.gradle.org/jcenter-shutdown --- build.gradle.kts | 2 +- samples/groovy-dsl/basic/build.gradle | 2 +- samples/groovy-dsl/catalogs/build.gradle | 2 +- samples/groovy-dsl/complete/build.gradle | 2 +- samples/groovy-dsl/episodes/build.gradle | 2 +- samples/groovy-dsl/remote-schema/build.gradle | 2 +- samples/groovy-dsl/xjc-plugin/build.gradle | 2 +- samples/groovy-dsl/xjc-version-2_2/build.gradle | 2 +- samples/groovy-dsl/xjc-version-3_0/build.gradle | 2 +- samples/kotlin-dsl/basic/build.gradle.kts | 2 +- samples/kotlin-dsl/catalogs/build.gradle.kts | 2 +- samples/kotlin-dsl/complete/build.gradle.kts | 2 +- samples/kotlin-dsl/episodes/build.gradle.kts | 2 +- samples/kotlin-dsl/remote-schema/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-plugin/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 81cc3c1..6432c29 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ val kotlinVersion: String by extra repositories { - jcenter() + mavenCentral() } diff --git a/samples/groovy-dsl/basic/build.gradle b/samples/groovy-dsl/basic/build.gradle index e4ea7f1..f3afd62 100644 --- a/samples/groovy-dsl/basic/build.gradle +++ b/samples/groovy-dsl/basic/build.gradle @@ -5,7 +5,7 @@ plugins { repositories { - jcenter() + mavenCentral() } diff --git a/samples/groovy-dsl/catalogs/build.gradle b/samples/groovy-dsl/catalogs/build.gradle index 912f4a8..5c41c84 100644 --- a/samples/groovy-dsl/catalogs/build.gradle +++ b/samples/groovy-dsl/catalogs/build.gradle @@ -1,5 +1,5 @@ allprojects { repositories { - jcenter() + mavenCentral() } } diff --git a/samples/groovy-dsl/complete/build.gradle b/samples/groovy-dsl/complete/build.gradle index 912f4a8..5c41c84 100644 --- a/samples/groovy-dsl/complete/build.gradle +++ b/samples/groovy-dsl/complete/build.gradle @@ -1,5 +1,5 @@ allprojects { repositories { - jcenter() + mavenCentral() } } diff --git a/samples/groovy-dsl/episodes/build.gradle b/samples/groovy-dsl/episodes/build.gradle index 912f4a8..5c41c84 100644 --- a/samples/groovy-dsl/episodes/build.gradle +++ b/samples/groovy-dsl/episodes/build.gradle @@ -1,5 +1,5 @@ allprojects { repositories { - jcenter() + mavenCentral() } } diff --git a/samples/groovy-dsl/remote-schema/build.gradle b/samples/groovy-dsl/remote-schema/build.gradle index e4ea7f1..f3afd62 100644 --- a/samples/groovy-dsl/remote-schema/build.gradle +++ b/samples/groovy-dsl/remote-schema/build.gradle @@ -5,7 +5,7 @@ plugins { repositories { - jcenter() + mavenCentral() } diff --git a/samples/groovy-dsl/xjc-plugin/build.gradle b/samples/groovy-dsl/xjc-plugin/build.gradle index cd77101..eb65192 100644 --- a/samples/groovy-dsl/xjc-plugin/build.gradle +++ b/samples/groovy-dsl/xjc-plugin/build.gradle @@ -5,7 +5,7 @@ plugins { repositories { - jcenter() + mavenCentral() } diff --git a/samples/groovy-dsl/xjc-version-2_2/build.gradle b/samples/groovy-dsl/xjc-version-2_2/build.gradle index 81ca564..8e73d61 100644 --- a/samples/groovy-dsl/xjc-version-2_2/build.gradle +++ b/samples/groovy-dsl/xjc-version-2_2/build.gradle @@ -5,7 +5,7 @@ plugins { repositories { - jcenter() + mavenCentral() } diff --git a/samples/groovy-dsl/xjc-version-3_0/build.gradle b/samples/groovy-dsl/xjc-version-3_0/build.gradle index 66b3215..e033d40 100644 --- a/samples/groovy-dsl/xjc-version-3_0/build.gradle +++ b/samples/groovy-dsl/xjc-version-3_0/build.gradle @@ -5,7 +5,7 @@ plugins { repositories { - jcenter() + mavenCentral() } diff --git a/samples/kotlin-dsl/basic/build.gradle.kts b/samples/kotlin-dsl/basic/build.gradle.kts index 435eb69..d28be5f 100644 --- a/samples/kotlin-dsl/basic/build.gradle.kts +++ b/samples/kotlin-dsl/basic/build.gradle.kts @@ -5,7 +5,7 @@ plugins { repositories { - jcenter() + mavenCentral() } diff --git a/samples/kotlin-dsl/catalogs/build.gradle.kts b/samples/kotlin-dsl/catalogs/build.gradle.kts index 912f4a8..5c41c84 100644 --- a/samples/kotlin-dsl/catalogs/build.gradle.kts +++ b/samples/kotlin-dsl/catalogs/build.gradle.kts @@ -1,5 +1,5 @@ allprojects { repositories { - jcenter() + mavenCentral() } } diff --git a/samples/kotlin-dsl/complete/build.gradle.kts b/samples/kotlin-dsl/complete/build.gradle.kts index 912f4a8..5c41c84 100644 --- a/samples/kotlin-dsl/complete/build.gradle.kts +++ b/samples/kotlin-dsl/complete/build.gradle.kts @@ -1,5 +1,5 @@ allprojects { repositories { - jcenter() + mavenCentral() } } diff --git a/samples/kotlin-dsl/episodes/build.gradle.kts b/samples/kotlin-dsl/episodes/build.gradle.kts index 912f4a8..5c41c84 100644 --- a/samples/kotlin-dsl/episodes/build.gradle.kts +++ b/samples/kotlin-dsl/episodes/build.gradle.kts @@ -1,5 +1,5 @@ allprojects { repositories { - jcenter() + mavenCentral() } } diff --git a/samples/kotlin-dsl/remote-schema/build.gradle.kts b/samples/kotlin-dsl/remote-schema/build.gradle.kts index 435eb69..d28be5f 100644 --- a/samples/kotlin-dsl/remote-schema/build.gradle.kts +++ b/samples/kotlin-dsl/remote-schema/build.gradle.kts @@ -5,7 +5,7 @@ plugins { repositories { - jcenter() + mavenCentral() } diff --git a/samples/kotlin-dsl/xjc-plugin/build.gradle.kts b/samples/kotlin-dsl/xjc-plugin/build.gradle.kts index cea4ce4..575cba8 100644 --- a/samples/kotlin-dsl/xjc-plugin/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-plugin/build.gradle.kts @@ -5,7 +5,7 @@ plugins { repositories { - jcenter() + mavenCentral() } diff --git a/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts b/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts index dc22285..a57460b 100644 --- a/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts @@ -5,7 +5,7 @@ plugins { repositories { - jcenter() + mavenCentral() } diff --git a/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts b/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts index 849a737..7bf57fd 100644 --- a/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts @@ -5,7 +5,7 @@ plugins { repositories { - jcenter() + mavenCentral() } From bb7217bd6e15f203d84006ce299fea995af76f29 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 7 Mar 2023 19:54:29 +0000 Subject: [PATCH 006/115] GradleVersionCompatibility 8.0.2 thru 5.6 --- .../plugins/xjc/GradleVersionCompatibilityIntegrationTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/GradleVersionCompatibilityIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/GradleVersionCompatibilityIntegrationTest.kt index 8c41f7f..8ac8ba2 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/GradleVersionCompatibilityIntegrationTest.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/GradleVersionCompatibilityIntegrationTest.kt @@ -17,7 +17,7 @@ import org.unbrokendome.gradle.plugins.xjc.testutil.runGradle import java.io.File -const val AllGradleVersions = "6.6.1, 6.5.1, 6.4.1, 6.3, 6.2.2, 6.1.1, 6.0.1, 5.6.4, 5.6" +const val AllGradleVersions = "8.0.2, 7.6.1, 7.5.1, 7.4.2, 7.3.3, 7.2, 7.1.1, 7.0.2, 6.9.4, 6.8.2, 6.7.1, 6.6.1, 6.5.1, 6.4.1, 6.3, 6.2.2, 6.1.1, 6.0.1, 5.6.4, 5.6" @GradleIntegrationTest From d62c774cfc46e167e1a8e8b62600a4bf919c8667 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 7 Mar 2023 19:56:38 +0000 Subject: [PATCH 007/115] Update XJC 3.0 to use latest 3.0.x GA JARs PR#28 Issue#27 overlaps this commit. Remove: com.sun.xml.bind:jaxb-xjc:3.0.0-M4 com.sun.xml.bind:jaxb-impl:3.0.0-M4 Replace with: com.sun.xml.bind:jaxb-xjc:3.0.2 com.sun.xml.bind:jaxb-core:3.0.2 com.sun.xml.bind:jaxb-impl:3.0.2 jakarta.xml.bind:jakarta.xml.bind-api:3.0.1 --- build.gradle.kts | 7 ++++--- docs/xjc-versions.adoc | 21 ++++++++++++++++--- .../gradle/plugins/xjc/XjcPlugin.kt | 6 ++++-- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6432c29..a8ebc86 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -62,9 +62,10 @@ dependencies { "xjc23CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.3.3") "xjc30CompileOnly"(xjcCommon.output) - "xjc30CompileOnly"("com.sun.xml.bind:jaxb-xjc:3.0.0-M4") - "xjc30CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.3.3") - "xjc30CompileOnly"("jakarta.xml.bind:jakarta.xml.bind-api:3.0.0-RC3") + "xjc30CompileOnly"("com.sun.xml.bind:jaxb-xjc:3.0.2") + "xjc30CompileOnly"("com.sun.xml.bind:jaxb-core:3.0.2") + "xjc30CompileOnly"("com.sun.xml.bind:jaxb-impl:3.0.2") + "xjc30CompileOnly"("jakarta.xml.bind:jakarta.xml.bind-api:3.0.1") "testLibApi"(kotlin("stdlib-jdk8")) "testLibApi"("com.willowtreeapps.assertk:assertk-jvm:0.22") diff --git a/docs/xjc-versions.adoc b/docs/xjc-versions.adoc index f61a7e4..1195454 100644 --- a/docs/xjc-versions.adoc +++ b/docs/xjc-versions.adoc @@ -56,7 +56,11 @@ invoking XJC, with the following dependencies: | `com.sun.xml.bind:jaxb-xjc:2.3.3` | 3.0 -| `com.sun.xml.bind:jaxb-xjc:3.0.0-M4` +| `com.sun.xml.bind:jaxb-xjc:3.0.2` + `com.sun.xml.bind:jaxb-core:3.0.2` + `com.sun.xml.bind:jaxb-impl:3.0.2` + `jakarta.xml.bind:jakarta.xml.bind-api:3.0.1` + |=== @@ -66,13 +70,20 @@ You can also manually configure the classpath for invoking XJC by adding depende to the `xjcTool` configuration. As soon as this configuration contains any dependencies, the defaults will back away, and the `xjc.xjcVersion` property will have no effect. +You should specify at least `jaxb-xjc` it is possible its dependencies are included +transitively or you can include them with additional `xjcTool` directives. + For example: [source,groovy,role="primary"] .Groovy ---- dependencies { - xjcTool 'com.sun.xml.bind:jaxb-xjc:3.0.0-M4' + xjcTool 'com.sun.xml.bind:jaxb-xjc:3.0.2' + // Optional explicit version set: + xjcTool 'com.sun.xml.bind:jaxb-core:3.0.2' + xjcTool 'com.sun.xml.bind:jaxb-impl:3.0.2' + xjcTool 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1' } ---- @@ -80,6 +91,10 @@ dependencies { .Kotlin ---- dependencies { - "xjcTool"("com.sun.xml.bind:jaxb-xjc:3.0.0-M4") + "xjcTool"("com.sun.xml.bind:jaxb-xjc:3.0.2") + // Optional explicit version set: + "xjcTool"("com.sun.xml.bind:jaxb-core:3.0.2") + "xjcTool"("com.sun.xml.bind:jaxb-impl:3.0.2") + "xjcTool"("jakarta.xml.bind:jakarta.xml.bind-api:3.0.1") } ---- diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt index eadb3ab..7c8a359 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt @@ -39,8 +39,10 @@ class XjcPlugin : Plugin { "com.sun.xml.bind:jaxb-xjc:2.3.3" ), "3.0" to listOf( - "com.sun.xml.bind:jaxb-xjc:3.0.0-M4", - "com.sun.xml.bind:jaxb-impl:3.0.0-M4" + "com.sun.xml.bind:jaxb-xjc:3.0.2", + "com.sun.xml.bind:jaxb-core:3.0.2", + "com.sun.xml.bind:jaxb-impl:3.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api:3.0.1" ) ) } From 4dfdeb7f84d78cf6d86f01d2f5b013652dcb9215 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 7 Mar 2023 19:57:28 +0000 Subject: [PATCH 008/115] adoc: Fix spelling of term xjcEpisode => xjcEpisodes Issue#31 overlaps this commit. --- docs/using-episodes.adoc | 14 +++++++------- docs/working-with-catalogs.adoc | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/using-episodes.adoc b/docs/using-episodes.adoc index d3a9be1..a53cedd 100644 --- a/docs/using-episodes.adoc +++ b/docs/using-episodes.adoc @@ -36,13 +36,13 @@ generated from the `main` source set. Episode files are not consumed directly, but through JARs that contain them under `META-INF/sun-jaxb.episode`. To specify dependencies that contain episodes to be imported into the XJC build, add the libraries containing them -to the `xjcEpisode` configuration: +to the `xjcEpisodes` configuration: [source,groovy,role="primary"] .Groovy ---- dependencies { - xjcEpisode 'org.example:my-model:1.2.3' + xjcEpisodes 'org.example:my-model:1.2.3' } ---- @@ -50,13 +50,13 @@ dependencies { .Kotlin ---- dependencies { - "xjcEpisode"("org.example:my-model:1.2.3") + "xjcEpisodes"("org.example:my-model:1.2.3") } ---- TIP: Each source set will get its own episode dependency configuration. For the `main` source set, this configuration -is called `xjcEpisode`; for other source sets it will be called `XjcEpisode`. For example, to specify episode -dependencies for the `test` source set, use the `testXjcEpisode` configuration. +is called `xjcEpisodes`; for other source sets it will be called `XjcEpisodes`. For example, to specify episode +dependencies for the `test` source set, use the `testXjcEpisodes` configuration. These dependencies should resolve to JAR files; if they contain a `META-INF/sun-jaxb.episode` entry it will be imported by the current `xjc` invocation. If they don't contain such a file they are simply ignored, so it is safe @@ -68,7 +68,7 @@ For example, you might simply want to scan the entire `compileClasspath` for any .Groovy ---- dependencies { - xjcEpisode configurations['compileClasspath'] + xjcEpisodes configurations['compileClasspath'] } ---- @@ -76,6 +76,6 @@ dependencies { .Kotlin ---- dependencies { - "xjcEpisode"(configurations["compileClasspath"]) + "xjcEpisodes"(configurations["compileClasspath"]) } ---- diff --git a/docs/working-with-catalogs.adoc b/docs/working-with-catalogs.adoc index 86ccbcd..e2f206b 100644 --- a/docs/working-with-catalogs.adoc +++ b/docs/working-with-catalogs.adoc @@ -72,7 +72,7 @@ useful for multi-step code generation where a library JAR contains the schema, a ---- dependencies { implementation 'com.example:my-model:1.2.3' - xjcEpisode configurations['compileClasspath'] + xjcEpisodes configurations['compileClasspath'] } ---- @@ -81,7 +81,7 @@ dependencies { ---- dependencies { implementation("com.example:my-model:1.2.3") - "xjcEpisode"(configurations["compileClasspath"]) + "xjcEpisodes"(configurations["compileClasspath"]) } ---- From 7d76d5eff2a203b038d04d030cc0d208381668a5 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Wed, 8 Mar 2023 18:49:48 +0000 Subject: [PATCH 009/115] Added: JavaVersionUtil.kt --- .../plugins/xjc/testutil/JavaVersionUtil.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/JavaVersionUtil.kt diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/JavaVersionUtil.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/JavaVersionUtil.kt new file mode 100644 index 0000000..4637e61 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/JavaVersionUtil.kt @@ -0,0 +1,16 @@ +package org.unbrokendome.gradle.plugins.xjc.testutil + +import org.junit.jupiter.api.Assertions.assertNotNull +import java.math.BigDecimal + +class JavaVersionUtil { + + companion object { + fun javaVersionAtLeast(minimumVersion: Int): Boolean { + val javaVersion = System.getProperty("java.version")?.split(".")?.subList(0, 2)?.joinToString(".") // "1.8" => "1.8" + assertNotNull(javaVersion) + return BigDecimal(javaVersion) >= BigDecimal(minimumVersion) + } + } + +} From 5324ae298c9d379f98452e4f502b4d438378422c Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Wed, 8 Mar 2023 18:53:31 +0000 Subject: [PATCH 010/115] Support future versions of XJC on a best-effort basis This removes the hardwired block that prevents the plugin from being used against any future version of XJC where the MANIFEST.MF Specification-Version does not match a known version. This will warn in this situation at this time. This commit is higher up the patch-set so it can be better tested before support for 4.0 is added. I would be my intention to progress this commit into requiring at least a configuration boolean to be set to authorise this best-effort so that consumers automated build system start to fail and an administrative decision is made to proceed. The decision would be based on an informed error message about what to do and where to look in documentation for support. --- .../groovy-dsl/xjc-tool-future/build.gradle | 27 +++++++++++++++++++ .../xjc-tool-future/settings.gradle | 8 ++++++ .../xjc-tool-future/src/main/schema/books.xsd | 21 +++++++++++++++ .../xjc-tool-future/build.gradle.kts | 27 +++++++++++++++++++ .../xjc-tool-future/settings.gradle.kts | 8 ++++++ .../xjc-tool-future/src/main/schema/books.xsd | 21 +++++++++++++++ .../xjc/XjcToolFutureIntegrationTest.kt | 23 ++++++++++++++++ .../gradle/plugins/xjc/XjcGenerate.kt | 13 +++++++-- 8 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 samples/groovy-dsl/xjc-tool-future/build.gradle create mode 100644 samples/groovy-dsl/xjc-tool-future/settings.gradle create mode 100644 samples/groovy-dsl/xjc-tool-future/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-tool-future/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-future/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-future/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-tool-future/build.gradle b/samples/groovy-dsl/xjc-tool-future/build.gradle new file mode 100644 index 0000000..0bd96c1 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-future/build.gradle @@ -0,0 +1,27 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '99.0' + //// This is testing build failure and error output due to not configuring: + //xjcVersionUnsupportedStrategy = 'auto-resolve' +} + + +dependencies { + implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0' + + // For this integration test to be JDK8 compatible this needs to be 3.x or older + // But doing that means that tests would never demonstrate itself working at the + // time the feature was added, as 3.x was supported already, so we only perform + // this test in JDK11+ while we don't yet support 4.x. + xjcTool 'com.sun.xml.bind:jaxb-xjc:4.0.2' +} diff --git a/samples/groovy-dsl/xjc-tool-future/settings.gradle b/samples/groovy-dsl/xjc-tool-future/settings.gradle new file mode 100644 index 0000000..60a9c61 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-future/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-tool-future' diff --git a/samples/groovy-dsl/xjc-tool-future/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-tool-future/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-future/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-tool-future/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-future/build.gradle.kts new file mode 100644 index 0000000..9fff7b0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-future/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("99.0") + //// This is testing build failure and error output due to not configuring: + //xjcVersionUnsupportedStrategy.set("auto-resolve") +} + + +dependencies { + implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.0") + + // For this integration test to be JDK8 compatible this needs to be 3.x or older + // But doing that means that tests would never demonstrate itself working at the + // time the feature was added, as 3.x was supported already, so we only perform + // this test in JDK11+ while we don't yet support 4.x. + xjcTool("com.sun.xml.bind:jaxb-xjc:4.0.2") +} diff --git a/samples/kotlin-dsl/xjc-tool-future/settings.gradle.kts b/samples/kotlin-dsl/xjc-tool-future/settings.gradle.kts new file mode 100644 index 0000000..d6f2be3 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-future/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-tool-future" diff --git a/samples/kotlin-dsl/xjc-tool-future/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-tool-future/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-future/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt new file mode 100644 index 0000000..683ee6a --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt @@ -0,0 +1,23 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.jupiter.api.Assumptions +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.JavaVersionUtil.Companion.javaVersionAtLeast +import java.io.File + + +@UseSampleProject("xjc-tool-future") +class XjcToolFutureIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + Assumptions.assumeTrue(javaVersionAtLeast(11), "Requires JDK11 runtime or above due to the XJC Tool bytecode version requirement") + + super.test(runner, projectDir, "xjc-tool-future") + } +} diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt index 9e84f4c..cb5c2ce 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt @@ -45,6 +45,7 @@ abstract class XjcGenerate "2.3" to "org.unbrokendome.gradle.plugins.xjc.work.xjc23.XjcGeneratorWorkAction", "3.0" to "org.unbrokendome.gradle.plugins.xjc.work.xjc30.XjcGeneratorWorkAction" ) + private val HIGHEST_SUPPORTED_VERSION = WorkActionClassNamesByVersion.keys.max() } @@ -195,8 +196,16 @@ abstract class XjcGenerate ?: throw IllegalStateException("Could not find a suitable XJC implementation on the tool classpath") val xjcVersion = toolManifest.mainAttributes[ManifestAttributes.SpecificationVersion] - val workActionClassName = WorkActionClassNamesByVersion[xjcVersion] - ?: throw IllegalStateException("Cannot handle XJC version: $xjcVersion") + var resolvedWorkActionClassName = WorkActionClassNamesByVersion[xjcVersion] + if(resolvedWorkActionClassName == null) { + resolvedWorkActionClassName = WorkActionClassNamesByVersion[HIGHEST_SUPPORTED_VERSION] + ?: throw IllegalStateException("Cannot handle XJC version: $xjcVersion") + // This creates a strategy to always warn the user and proceed with best effort + // We should force the user to set an option to active this best effort, forcing a configuration decision + // xjc.xjcVersionUnsupportedStrategy ? + logger.warn("Version {} XJC is unsupported, using strategy for highest supported version {}", xjcVersion, HIGHEST_SUPPORTED_VERSION) + } + val workActionClassName = resolvedWorkActionClassName @Suppress("UNCHECKED_CAST") val workActionClass = Class.forName(workActionClassName) From 99f31517a9c49ca66eebd0dc14c30c75aa419104 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Wed, 8 Mar 2023 18:54:24 +0000 Subject: [PATCH 011/115] Added: xjc.xjcVersionUnsupportedStrategy support The plugin will fail gradle builds (by default) when it encounters an XJC tool version that does not have a supported version in its MANIFEST.MF Specification-Version attribute. This setting allows the project administrator to override the failure to request the plugin try on a best-effort basis to reuse a strategy of a supported version and continue. Configuring would use the strategy of the latest known supported XJC tool version: xjc.xjcVersionUnsupportedStrategy='auto-resolve' This reduces the onus on the plugin author and maintenance around the releases of a new XJC tool. --- .../xjc/XjcToolFutureIntegrationTest.kt | 16 ++- .../gradle/plugins/xjc/XjcExtension.kt | 32 ++++++ .../gradle/plugins/xjc/XjcGenerate.kt | 98 +++++++++++++++---- .../gradle/plugins/xjc/XjcPlugin.kt | 1 + .../gradle/plugins/xjc/XjcPluginTest.kt | 3 + 5 files changed, 131 insertions(+), 19 deletions(-) diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt index 683ee6a..58f6ed2 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt @@ -1,12 +1,17 @@ package org.unbrokendome.gradle.plugins.xjc import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assumptions import org.junit.platform.commons.annotation.Testable import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir import org.unbrokendome.gradle.plugins.xjc.testutil.JavaVersionUtil.Companion.javaVersionAtLeast +import org.unbrokendome.gradle.plugins.xjc.testutil.runGradle import java.io.File @@ -18,6 +23,15 @@ class XjcToolFutureIntegrationTest : AbstractBasicIntegrationTest() { fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { Assumptions.assumeTrue(javaVersionAtLeast(11), "Requires JDK11 runtime or above due to the XJC Tool bytecode version requirement") - super.test(runner, projectDir, "xjc-tool-future") + //val projectName = "xjc-tool-future" + + val buildResult = runner.runGradle("build", expectFailure=true) + + assertEquals(TaskOutcome.FAILED, buildResult.task(":xjcGenerate")?.outcome) + assertNull(buildResult.task(":build")?.outcome) + + val msg = "xjcVersionUnsupportedStrategy" + val bf = buildResult.output.contains(msg) + Assertions.assertTrue(bf, "Expected message in build output log: $msg") } } diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt index 9458082..ea315d4 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt @@ -14,6 +14,7 @@ interface XjcExtension : XjcGeneratorOptions { companion object { const val DEFAULT_XJC_VERSION = "2.3" const val DEFAULT_SRC_DIR_NAME = "schema" + const val DEFAULT_XJC_VERSION_UNSUPPORTED_STRATEGY = "default" } /** @@ -31,6 +32,34 @@ interface XjcExtension : XjcGeneratorOptions { */ val xjcVersion: Property + /** + * This setting exists to support newer versions of the XJC tool than the gradle plugin has been + * tested with and officially supports as listed in the `xjcVersion` setting. + * + * This setting exists because doing this silently is probably not what all users would want by default. + * Without this setting configured the plugin will error informing you the XJC tool is newer than that + * officially supported by the plugin and the existence of this setting provides a strategy that may + * be able to resolve the build failure situation. + * + * This forces the documentation to be read and an administrative decision to be made for your + * project concerning any risks for using unsupported XJC tooling versions in this way. + * If this setting is configured to something other than `default` you are advised to manually check + * the generated output conforms to your expectations. + * + * If you wish the plugin to continue configure this setting to `auto-resolve`. + * + * Possible values might be: + * `default` This will auto-detect XJC tool version and only allow supported versions to proceed. + * `auto-resolve` This will behave as `default` first, if `default` fails then proceed using `latest`. + * This strategy is anticipated to be the action most users want in the situation. + * `latest` to use the strategy for the latest supported version. As listed in `xjcVersion`. + * `2.3` would force a specific strategy of a specific XJC tool version. + * Any string value also valid for `xjcVersion` is allowed, `2.3` is an example of one of those values. + * + * Default is `default`. + */ + val xjcVersionUnsupportedStrategy: Property + /** * The conventional name of the XJC source directories. * @@ -57,6 +86,9 @@ private fun XjcExtension.setFromProjectProperties(project: Project) = apply { xjcVersion.set( project.providerFromProjectProperty("xjc.xjcVersion", XjcExtension.DEFAULT_XJC_VERSION) ) + xjcVersionUnsupportedStrategy.set( + project.providerFromProjectProperty("xjc.xjcVersionUnsupportedStrategy", XjcExtension.DEFAULT_XJC_VERSION_UNSUPPORTED_STRATEGY) + ) srcDirName.set( project.providerFromProjectProperty("xjc.srcDirName", XjcExtension.DEFAULT_SRC_DIR_NAME) ) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt index cb5c2ce..1d74ad4 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt @@ -165,6 +165,36 @@ abstract class XjcGenerate abstract val episodeOutputDirectory: DirectoryProperty + /** + * This setting exists to support newer versions of the XJC tool than the gradle plugin has been + * tested with and officially supports as listed in the `xjcVersion` setting. + * + * This setting exists because doing this silently is probably not what all users would want by default. + * Without this setting configured the plugin will error informing you the XJC tool is newer than that + * officially supported by the plugin and the existence of this setting provides a strategy that may + * be able to resolve the build failure situation. + * + * This forces the documentation to be read and an administrative decision to be made for your + * project concerning any risks for using unsupported XJC tooling versions in this way. + * If this setting is configured to something other than `default` you are advised to manually check + * the generated output conforms to your expectations. + * + * If you wish the plugin to continue configure this setting to `auto-resolve`. + * + * Possible values might be: + * `default` This will auto-detect XJC tool version and only allow supported versions to proceed. + * `auto-resolve` This will behave as `default` first, if `default` fails then proceed using `latest`. + * This strategy is anticipated to be the action most users want in the situation. + * `latest` to use the strategy for the latest supported version. As listed in `xjcVersion`. + * `2.3` would force a specific strategy of a specific XJC tool version. + * Any string value also valid for `xjcVersion` is allowed, `2.3` is an example of one of those values. + * + * Default is `default`. + */ + @get:[Input Optional] + abstract val xjcVersionUnsupportedStrategy: Property + + init { setFromProjectProperties(project) generateEpisode.convention(false) @@ -188,24 +218,7 @@ abstract class XjcGenerate return } - val toolManifest = toolClasspath.findManifests() - .singleOrNull { manifest -> - val bundleSymbolicName = manifest.mainAttributes[ManifestAttributes.BundleSymbolicName] - bundleSymbolicName == "com.sun.xml.bind.jaxb-xjc" - } - ?: throw IllegalStateException("Could not find a suitable XJC implementation on the tool classpath") - - val xjcVersion = toolManifest.mainAttributes[ManifestAttributes.SpecificationVersion] - var resolvedWorkActionClassName = WorkActionClassNamesByVersion[xjcVersion] - if(resolvedWorkActionClassName == null) { - resolvedWorkActionClassName = WorkActionClassNamesByVersion[HIGHEST_SUPPORTED_VERSION] - ?: throw IllegalStateException("Cannot handle XJC version: $xjcVersion") - // This creates a strategy to always warn the user and proceed with best effort - // We should force the user to set an option to active this best effort, forcing a configuration decision - // xjc.xjcVersionUnsupportedStrategy ? - logger.warn("Version {} XJC is unsupported, using strategy for highest supported version {}", xjcVersion, HIGHEST_SUPPORTED_VERSION) - } - val workActionClassName = resolvedWorkActionClassName + val workActionClassName = resolveXjcVersion() @Suppress("UNCHECKED_CAST") val workActionClass = Class.forName(workActionClassName) @@ -220,6 +233,55 @@ abstract class XjcGenerate } } + private fun resolveXjcVersion(): String { + val toolManifest = toolClasspath.findManifests() + .singleOrNull { manifest -> + val bundleSymbolicName = manifest.mainAttributes[ManifestAttributes.BundleSymbolicName] + bundleSymbolicName == "com.sun.xml.bind.jaxb-xjc" + } + ?: throw IllegalStateException("Could not find a suitable XJC implementation on the tool classpath, expecting: com.sun.xml.bind.jaxb-xjc") + + val xjcVersionSpecificationVersion = toolManifest.mainAttributes[ManifestAttributes.SpecificationVersion]?.toString() + // Although this setting is called xjcVersionUnsupportedStrategy externally it is actually internally xjcVersionStrategy, + // it is named as it is to better reflect to the target audience the correct level of concern when configuring it. + val xjcVersionStrategy = xjcVersionUnsupportedStrategy.get() + + val isDefault = "default".equals(xjcVersionStrategy, true) + val isAutoResolve = "auto-resolve".equals(xjcVersionStrategy, true) + + var xjcVersion: String? + if("latest".equals(xjcVersionStrategy, true)) + xjcVersion = HIGHEST_SUPPORTED_VERSION + else if(!isDefault && !isAutoResolve && xjcVersionStrategy.isNotEmpty()) + xjcVersion = xjcVersionStrategy + else // "default" || "auto-resolve" || empty || null + xjcVersion = xjcVersionSpecificationVersion + + val isSupported = WorkActionClassNamesByVersion[xjcVersionSpecificationVersion] != null + var resolvedWorkActionClassName = WorkActionClassNamesByVersion[xjcVersion] + + if(resolvedWorkActionClassName == null && isAutoResolve) + resolvedWorkActionClassName = WorkActionClassNamesByVersion[HIGHEST_SUPPORTED_VERSION] + + if(resolvedWorkActionClassName == null) { + val word = if(isDefault) "found" else "requested" + val msg = "Unsupported XJC version $word $xjcVersion consult documentation for setting " + + "xjcVersionUnsupportedStrategy='auto-resolve' to provide the plugin a strategy to continue" + throw IllegalStateException(msg) + } + + if(!isDefault) { + logger.warn( + "xjcVersionUnsupportedStrategy is set {}, XJC tool version found {} this is {}supported, " + + "using strategy for XJC tool version {}", + xjcVersionStrategy, xjcVersionSpecificationVersion, + (if (isSupported) "" else "un"), + xjcVersion + ) + } + + return resolvedWorkActionClassName + } private fun cleanOutputDirs(): Boolean { val outputCleaned = outputDirectory.get().asFile.deleteAllContents() diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt index 7c8a359..8fffb09 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt @@ -73,6 +73,7 @@ class XjcPlugin : Plugin { (task as XjcGeneratorOptions).setFrom(xjcExtension) task.toolClasspath.setFrom(toolClasspathConfiguration) task.extraArgs.addAll(xjcExtension.extraArgs) + task.xjcVersionUnsupportedStrategy.set(xjcExtension.xjcVersionUnsupportedStrategy) } project.plugins.withType(JavaBasePlugin::class.java) { diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt index e7c16af..fd6f774 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt @@ -49,6 +49,7 @@ object XjcPluginTest : Spek({ assertThat(project) .hasExtension().all { prop(XjcExtension::xjcVersion).hasValueEqualTo(XjcExtension.DEFAULT_XJC_VERSION) + prop(XjcExtension::xjcVersionUnsupportedStrategy).hasValueEqualTo(XjcExtension.DEFAULT_XJC_VERSION_UNSUPPORTED_STRATEGY) prop(XjcExtension::srcDirName).hasValueEqualTo(XjcExtension.DEFAULT_SRC_DIR_NAME) prop(XjcExtension::encoding).hasValueEqualTo("UTF-8") prop(XjcExtension::strictCheck).isTrue() @@ -65,6 +66,7 @@ object XjcPluginTest : Spek({ it("should populate xjc DSL extension from project properties") { val extra = project.requiredExtension() extra.set("xjc.xjcVersion", "3.0") + extra.set("xjc.xjcVersionUnsupportedStrategy", "default") extra.set("xjc.srcDirName", "xjc") extra.set("xjc.targetVersion", "2.2") extra.set("xjc.encoding", "ISO-8859-1") @@ -80,6 +82,7 @@ object XjcPluginTest : Spek({ assertThat(project) .hasExtension().all { prop(XjcExtension::xjcVersion).hasValueEqualTo("3.0") + prop(XjcExtension::xjcVersionUnsupportedStrategy).hasValueEqualTo("default") prop(XjcExtension::srcDirName).hasValueEqualTo("xjc") prop(XjcExtension::targetVersion).hasValueEqualTo("2.2") prop(XjcExtension::encoding).hasValueEqualTo("ISO-8859-1") From f8734791402469066f5d11c226dd3e9c1f512d08 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Wed, 8 Mar 2023 18:56:41 +0000 Subject: [PATCH 012/115] AbstractBasicIntegrationTest return BuildResult --- .../gradle/plugins/xjc/AbstractBasicIntegrationTest.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/AbstractBasicIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/AbstractBasicIntegrationTest.kt index 07dfd7a..afdaac0 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/AbstractBasicIntegrationTest.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/AbstractBasicIntegrationTest.kt @@ -2,6 +2,7 @@ package org.unbrokendome.gradle.plugins.xjc import assertk.all import assertk.assertThat +import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner import org.junit.jupiter.api.extension.RegisterExtension import org.junit.platform.commons.annotation.Testable @@ -19,7 +20,7 @@ import java.io.File abstract class AbstractBasicIntegrationTest { - fun test(runner: GradleRunner, projectDir: File, projectName: String) { + fun test(runner: GradleRunner, projectDir: File, projectName: String): BuildResult { val buildResult = runner.runGradle("build") assertThat(buildResult).all { @@ -36,5 +37,7 @@ abstract class AbstractBasicIntegrationTest { "org/unbroken_dome/gradle_xjc_plugin/samples/books/ObjectFactory.class" ) } + + return buildResult } } From b44ac4783dcde7ec4efdfe111cb8dcb6b4129cb3 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Wed, 8 Mar 2023 18:57:17 +0000 Subject: [PATCH 013/115] Added: samples/xjc-tool-future-latest/** + IT --- .../xjc-tool-future-latest/build.gradle | 22 ++++++++++++++ .../xjc-tool-future-latest/settings.gradle | 8 +++++ .../src/main/schema/books.xsd | 21 +++++++++++++ .../xjc-tool-future-latest/build.gradle.kts | 22 ++++++++++++++ .../settings.gradle.kts | 8 +++++ .../src/main/schema/books.xsd | 21 +++++++++++++ .../xjc/XjcToolFutureLatestIntegrationTest.kt | 30 +++++++++++++++++++ 7 files changed, 132 insertions(+) create mode 100644 samples/groovy-dsl/xjc-tool-future-latest/build.gradle create mode 100644 samples/groovy-dsl/xjc-tool-future-latest/settings.gradle create mode 100644 samples/groovy-dsl/xjc-tool-future-latest/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-tool-future-latest/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-future-latest/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-future-latest/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureLatestIntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-tool-future-latest/build.gradle b/samples/groovy-dsl/xjc-tool-future-latest/build.gradle new file mode 100644 index 0000000..ef5338e --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-future-latest/build.gradle @@ -0,0 +1,22 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '99.0' + xjcVersionUnsupportedStrategy = 'latest' +} + + +dependencies { + implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0' + + xjcTool 'com.sun.xml.bind:jaxb-xjc:4.0.2' +} diff --git a/samples/groovy-dsl/xjc-tool-future-latest/settings.gradle b/samples/groovy-dsl/xjc-tool-future-latest/settings.gradle new file mode 100644 index 0000000..33a5ab0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-future-latest/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-tool-future-latest' diff --git a/samples/groovy-dsl/xjc-tool-future-latest/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-tool-future-latest/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-future-latest/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-tool-future-latest/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-future-latest/build.gradle.kts new file mode 100644 index 0000000..ea3efc6 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-future-latest/build.gradle.kts @@ -0,0 +1,22 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("99.0") + xjcVersionUnsupportedStrategy.set("latest") +} + + +dependencies { + implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.0") + + xjcTool("com.sun.xml.bind:jaxb-xjc:4.0.2") +} diff --git a/samples/kotlin-dsl/xjc-tool-future-latest/settings.gradle.kts b/samples/kotlin-dsl/xjc-tool-future-latest/settings.gradle.kts new file mode 100644 index 0000000..91223d5 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-future-latest/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-tool-future-latest" diff --git a/samples/kotlin-dsl/xjc-tool-future-latest/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-tool-future-latest/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-future-latest/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureLatestIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureLatestIntegrationTest.kt new file mode 100644 index 0000000..2133a90 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureLatestIntegrationTest.kt @@ -0,0 +1,30 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.Assumptions +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.JavaVersionUtil.Companion.javaVersionAtLeast +import java.io.File + + +@UseSampleProject("xjc-tool-future-latest") +class XjcToolFutureLatestIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + Assumptions.assumeTrue(javaVersionAtLeast(11), "Requires JDK11 runtime or above due to the XJC Tool bytecode version requirement") + + val projectName = "xjc-tool-future-latest" + + val buildResult = super.test(runner, projectDir, projectName) + + val msg = "xjcVersionUnsupportedStrategy is set latest" + val bf = buildResult.output.contains(msg) + assertTrue(bf, "Expected message in build output log: $msg") + } +} From 15e754e4f005b1859502599400eca5bc71be6b15 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 15:55:13 +0000 Subject: [PATCH 014/115] Cleanup: samples/xjc-version-2_2 --- samples/groovy-dsl/xjc-version-2_2/build.gradle | 1 + samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts | 1 + 2 files changed, 2 insertions(+) diff --git a/samples/groovy-dsl/xjc-version-2_2/build.gradle b/samples/groovy-dsl/xjc-version-2_2/build.gradle index 8e73d61..5ede3d0 100644 --- a/samples/groovy-dsl/xjc-version-2_2/build.gradle +++ b/samples/groovy-dsl/xjc-version-2_2/build.gradle @@ -15,5 +15,6 @@ xjc { dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively implementation 'javax.xml.bind:jaxb-api:2.2.12' } diff --git a/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts b/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts index a57460b..80abc3c 100644 --- a/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts @@ -15,5 +15,6 @@ xjc { dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively implementation("javax.xml.bind:jaxb-api:2.2.12") } From 0963817e37cac0663112dffc7f38084cf3ce6f05 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 15:55:43 +0000 Subject: [PATCH 015/115] Cleanup: samples/xjc-version-3_0 --- samples/groovy-dsl/xjc-version-3_0/build.gradle | 4 ++-- samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/groovy-dsl/xjc-version-3_0/build.gradle b/samples/groovy-dsl/xjc-version-3_0/build.gradle index e033d40..f94b59d 100644 --- a/samples/groovy-dsl/xjc-version-3_0/build.gradle +++ b/samples/groovy-dsl/xjc-version-3_0/build.gradle @@ -15,6 +15,6 @@ xjc { dependencies { - // XJC 3.0 requires a different JAXB API artifact - implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.0-RC3' + // This is still needed for Gradle to compile the generated Java and add transitively + implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1' } diff --git a/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts b/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts index 7bf57fd..c8ff9f8 100644 --- a/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts @@ -15,6 +15,6 @@ xjc { dependencies { - // XJC 3.0 requires a different JAXB API artifact - implementation("jakarta.xml.bind:jakarta.xml.bind-api:3.0.0-RC3") + // This is still needed for Gradle to compile the generated Java and add transitively + implementation("jakarta.xml.bind:jakarta.xml.bind-api:3.0.1") } From 5d0990e19cc6f89b04da0d494cabd13db2ecaf74 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 15:58:58 +0000 Subject: [PATCH 016/115] Added: samples/xjc-tool-2_2 + IT --- samples/groovy-dsl/xjc-tool-2_2/build.gradle | 25 +++++++++++++++++++ .../groovy-dsl/xjc-tool-2_2/settings.gradle | 8 ++++++ .../xjc-tool-2_2/src/main/schema/books.xsd | 21 ++++++++++++++++ .../kotlin-dsl/xjc-tool-2_2/build.gradle.kts | 25 +++++++++++++++++++ .../xjc-tool-2_2/settings.gradle.kts | 8 ++++++ .../xjc-tool-2_2/src/main/schema/books.xsd | 21 ++++++++++++++++ .../plugins/xjc/XjcTool22IntegrationTest.kt | 19 ++++++++++++++ 7 files changed, 127 insertions(+) create mode 100644 samples/groovy-dsl/xjc-tool-2_2/build.gradle create mode 100644 samples/groovy-dsl/xjc-tool-2_2/settings.gradle create mode 100644 samples/groovy-dsl/xjc-tool-2_2/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-tool-2_2/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-2_2/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-2_2/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool22IntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-tool-2_2/build.gradle b/samples/groovy-dsl/xjc-tool-2_2/build.gradle new file mode 100644 index 0000000..c97ecd9 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_2/build.gradle @@ -0,0 +1,25 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '2.2' +} + + +dependencies { + implementation 'javax.xml.bind:jaxb-api:2.2.12' + + xjcTool 'javax.xml.bind:jaxb-api:2.2.12' + + xjcTool 'com.sun.xml.bind:jaxb-xjc:2.2.11' + xjcTool 'com.sun.xml.bind:jaxb-impl:2.2.11' + xjcTool 'com.sun.xml.bind:jaxb-core:2.2.11' +} diff --git a/samples/groovy-dsl/xjc-tool-2_2/settings.gradle b/samples/groovy-dsl/xjc-tool-2_2/settings.gradle new file mode 100644 index 0000000..0a86878 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_2/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-tool-2_2' diff --git a/samples/groovy-dsl/xjc-tool-2_2/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-tool-2_2/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_2/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-tool-2_2/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_2/build.gradle.kts new file mode 100644 index 0000000..4634f06 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_2/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("2.2") +} + + +dependencies { + implementation("javax.xml.bind:jaxb-api:2.2.12") + + xjcTool("javax.xml.bind:jaxb-api:2.2.12") + + xjcTool("com.sun.xml.bind:jaxb-xjc:2.2.11") + xjcTool("com.sun.xml.bind:jaxb-impl:2.2.11") + xjcTool("com.sun.xml.bind:jaxb-core:2.2.11") +} diff --git a/samples/kotlin-dsl/xjc-tool-2_2/settings.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_2/settings.gradle.kts new file mode 100644 index 0000000..cff14d0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_2/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-tool-2_2" diff --git a/samples/kotlin-dsl/xjc-tool-2_2/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-tool-2_2/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_2/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool22IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool22IntegrationTest.kt new file mode 100644 index 0000000..ff49c53 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool22IntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-tool-2_2") +class XjcTool22IntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-tool-2_2") + } +} From e22856e0dae9f0bc806c99750194e8b73755002f Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:00:30 +0000 Subject: [PATCH 017/115] Added: samples/xjc-tool-3_0 + IT --- samples/groovy-dsl/xjc-tool-3_0/build.gradle | 22 +++++++++++++++++++ .../groovy-dsl/xjc-tool-3_0/settings.gradle | 8 +++++++ .../xjc-tool-3_0/src/main/schema/books.xsd | 21 ++++++++++++++++++ .../kotlin-dsl/xjc-tool-3_0/build.gradle.kts | 22 +++++++++++++++++++ .../xjc-tool-3_0/settings.gradle.kts | 8 +++++++ .../xjc-tool-3_0/src/main/schema/books.xsd | 21 ++++++++++++++++++ .../plugins/xjc/XjcTool30IntegrationTest.kt | 19 ++++++++++++++++ 7 files changed, 121 insertions(+) create mode 100644 samples/groovy-dsl/xjc-tool-3_0/build.gradle create mode 100644 samples/groovy-dsl/xjc-tool-3_0/settings.gradle create mode 100644 samples/groovy-dsl/xjc-tool-3_0/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-tool-3_0/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-3_0/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-3_0/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30IntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-tool-3_0/build.gradle b/samples/groovy-dsl/xjc-tool-3_0/build.gradle new file mode 100644 index 0000000..532f682 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-3_0/build.gradle @@ -0,0 +1,22 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '3.0' +} + + +dependencies { + // XJC 3.0 requires a different JAXB API artifact + implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1' + + xjcTool 'com.sun.xml.bind:jaxb-xjc:3.0.2' +} diff --git a/samples/groovy-dsl/xjc-tool-3_0/settings.gradle b/samples/groovy-dsl/xjc-tool-3_0/settings.gradle new file mode 100644 index 0000000..dd0e84f --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-3_0/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-tool-3_0' diff --git a/samples/groovy-dsl/xjc-tool-3_0/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-tool-3_0/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-3_0/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-tool-3_0/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-3_0/build.gradle.kts new file mode 100644 index 0000000..dfbd596 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-3_0/build.gradle.kts @@ -0,0 +1,22 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("3.0") +} + + +dependencies { + // XJC 3.0 requires a different JAXB API artifact + implementation("jakarta.xml.bind:jakarta.xml.bind-api:3.0.1") + + xjcTool("com.sun.xml.bind:jaxb-xjc:3.0.2") +} diff --git a/samples/kotlin-dsl/xjc-tool-3_0/settings.gradle.kts b/samples/kotlin-dsl/xjc-tool-3_0/settings.gradle.kts new file mode 100644 index 0000000..e6ea199 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-3_0/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-tool-3_0" diff --git a/samples/kotlin-dsl/xjc-tool-3_0/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-tool-3_0/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-3_0/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30IntegrationTest.kt new file mode 100644 index 0000000..121732d --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30IntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-tool-3_0") +class XjcTool30IntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-tool-3_0") + } +} From 13c111ee784a5109b8795c2886f777da1a769439 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:02:18 +0000 Subject: [PATCH 018/115] Added: samples/xjc-tool-2_3 + IT --- samples/groovy-dsl/xjc-tool-2_3/build.gradle | 21 +++++++++++++++++++ .../groovy-dsl/xjc-tool-2_3/settings.gradle | 8 +++++++ .../xjc-tool-2_3/src/main/schema/books.xsd | 21 +++++++++++++++++++ .../kotlin-dsl/xjc-tool-2_3/build.gradle.kts | 21 +++++++++++++++++++ .../xjc-tool-2_3/settings.gradle.kts | 8 +++++++ .../xjc-tool-2_3/src/main/schema/books.xsd | 21 +++++++++++++++++++ .../plugins/xjc/XjcTool23IntegrationTest.kt | 19 +++++++++++++++++ 7 files changed, 119 insertions(+) create mode 100644 samples/groovy-dsl/xjc-tool-2_3/build.gradle create mode 100644 samples/groovy-dsl/xjc-tool-2_3/settings.gradle create mode 100644 samples/groovy-dsl/xjc-tool-2_3/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-tool-2_3/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-2_3/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-2_3/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool23IntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-tool-2_3/build.gradle b/samples/groovy-dsl/xjc-tool-2_3/build.gradle new file mode 100644 index 0000000..ec57147 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_3/build.gradle @@ -0,0 +1,21 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '2.3' +} + + +dependencies { + implementation 'javax.xml.bind:jaxb-api:2.3.1' + + xjcTool 'com.sun.xml.bind:jaxb-xjc:2.3.8' +} diff --git a/samples/groovy-dsl/xjc-tool-2_3/settings.gradle b/samples/groovy-dsl/xjc-tool-2_3/settings.gradle new file mode 100644 index 0000000..3316263 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_3/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-tool-2_3' diff --git a/samples/groovy-dsl/xjc-tool-2_3/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-tool-2_3/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_3/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-tool-2_3/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_3/build.gradle.kts new file mode 100644 index 0000000..095d608 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_3/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("2.3") +} + + +dependencies { + implementation("javax.xml.bind:jaxb-api:2.3.1") + + xjcTool("com.sun.xml.bind:jaxb-xjc:2.3.8") +} diff --git a/samples/kotlin-dsl/xjc-tool-2_3/settings.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_3/settings.gradle.kts new file mode 100644 index 0000000..a7a584e --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_3/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-tool-2_3" diff --git a/samples/kotlin-dsl/xjc-tool-2_3/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-tool-2_3/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_3/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool23IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool23IntegrationTest.kt new file mode 100644 index 0000000..2969f60 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool23IntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-tool-2_3") +class XjcTool23IntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-tool-2_3") + } +} From 76c2e2f8396ae1c77f4b11ce13a94d2f2ef83b34 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:04:27 +0000 Subject: [PATCH 019/115] Added: samples/xjc-version-2_3 + IT --- .../groovy-dsl/xjc-version-2_3/build.gradle | 20 ++++++++++++++++++ .../xjc-version-2_3/settings.gradle | 8 +++++++ .../xjc-version-2_3/src/main/schema/books.xsd | 21 +++++++++++++++++++ .../xjc-version-2_3/build.gradle.kts | 20 ++++++++++++++++++ .../xjc-version-2_3/settings.gradle.kts | 8 +++++++ .../xjc-version-2_3/src/main/schema/books.xsd | 21 +++++++++++++++++++ .../xjc/XjcVersion23IntegrationTest.kt | 19 +++++++++++++++++ 7 files changed, 117 insertions(+) create mode 100644 samples/groovy-dsl/xjc-version-2_3/build.gradle create mode 100644 samples/groovy-dsl/xjc-version-2_3/settings.gradle create mode 100644 samples/groovy-dsl/xjc-version-2_3/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-version-2_3/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-2_3/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-2_3/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion23IntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-version-2_3/build.gradle b/samples/groovy-dsl/xjc-version-2_3/build.gradle new file mode 100644 index 0000000..a5dc9ac --- /dev/null +++ b/samples/groovy-dsl/xjc-version-2_3/build.gradle @@ -0,0 +1,20 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '2.3' +} + + +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively + implementation 'javax.xml.bind:jaxb-api:2.3.1' +} diff --git a/samples/groovy-dsl/xjc-version-2_3/settings.gradle b/samples/groovy-dsl/xjc-version-2_3/settings.gradle new file mode 100644 index 0000000..f66dafc --- /dev/null +++ b/samples/groovy-dsl/xjc-version-2_3/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-version-2_3' diff --git a/samples/groovy-dsl/xjc-version-2_3/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-version-2_3/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-2_3/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-version-2_3/build.gradle.kts b/samples/kotlin-dsl/xjc-version-2_3/build.gradle.kts new file mode 100644 index 0000000..bc8e3e7 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-2_3/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("2.3") +} + + +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively + implementation("javax.xml.bind:jaxb-api:2.3.1") +} diff --git a/samples/kotlin-dsl/xjc-version-2_3/settings.gradle.kts b/samples/kotlin-dsl/xjc-version-2_3/settings.gradle.kts new file mode 100644 index 0000000..5d78973 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-2_3/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-version-2_3" diff --git a/samples/kotlin-dsl/xjc-version-2_3/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-version-2_3/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-2_3/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion23IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion23IntegrationTest.kt new file mode 100644 index 0000000..ba70752 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion23IntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-version-2_3") +class XjcVersion23IntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-version-2_3") + } +} From 9a102072a4d0a02acf76c1c062985d9e2ccb925b Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:06:43 +0000 Subject: [PATCH 020/115] Add support for XJC 2.4 com.sun.xml.bind:jaxb-xjc:2.4.0-b180830.0438 com.sun.xml.bind:jaxb-core:2.3.0.1 // there is no 2.4 version com.sun.xml.bind:jaxb-impl:2.4.0-b180830.0438 javax.xml.bind:jaxb-api:2.4.0-b180830.0359 --- build.gradle.kts | 8 +++++++- docs/xjc-versions.adoc | 8 +++++++- .../org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt | 2 +- .../org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt | 1 + .../org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt | 6 ++++++ .../plugins/xjc/work/xjc24/XjcGeneratorWorkAction.kt | 8 ++++++++ 6 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 src/xjc24/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc24/XjcGeneratorWorkAction.kt diff --git a/build.gradle.kts b/build.gradle.kts index a8ebc86..b5dcffd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -33,8 +33,9 @@ testSets { val xjcCommon: SourceSet by sourceSets.creating val xjc22: SourceSet by sourceSets.creating val xjc23: SourceSet by sourceSets.creating +val xjc24: SourceSet by sourceSets.creating val xjc30: SourceSet by sourceSets.creating -val xjcSourceSets = listOf(xjcCommon, xjc22, xjc23, xjc30) +val xjcSourceSets = listOf(xjcCommon, xjc22, xjc23, xjc24, xjc30) dependencies { @@ -61,6 +62,11 @@ dependencies { "xjc23CompileOnly"(xjcCommon.output) "xjc23CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.3.3") + "xjc24CompileOnly"(xjcCommon.output) + "xjc24CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.4.0-b180830.0438") + "xjc24CompileOnly"("com.sun.xml.bind:jaxb-impl:2.4.0-b180830.0438") + "xjc22CompileOnly"("javax.xml.bind:jaxb-api:2.4.0-b180830.0359") + "xjc30CompileOnly"(xjcCommon.output) "xjc30CompileOnly"("com.sun.xml.bind:jaxb-xjc:3.0.2") "xjc30CompileOnly"("com.sun.xml.bind:jaxb-core:3.0.2") diff --git a/docs/xjc-versions.adoc b/docs/xjc-versions.adoc index 1195454..53366b4 100644 --- a/docs/xjc-versions.adoc +++ b/docs/xjc-versions.adoc @@ -4,7 +4,7 @@ XJC has been around for a long time and comes in a variety of versions, includin Oracle and non-standard forks from third parties. They should usually correspond with the version of the JAXB API / runtime used, but it is also possible to use a newer XJC to generate code for use with an earlier JAXB target. -The `org.unbroken-dome.xjc` plugin supports the standard XJC versions 2.2, 2.3 and 3.0. Other versions may work +The `org.unbroken-dome.xjc` plugin supports the standard XJC versions 2.2, 2.3, 2.4 and 3.0. Other versions may work as well but are not tested. The plugin will use XJC 2.3 by default if the version is not specified. NOTE: XJC 3.0 is currently in milestone status but since the interface to XJC has not @@ -55,6 +55,12 @@ invoking XJC, with the following dependencies: | 2.3 | `com.sun.xml.bind:jaxb-xjc:2.3.3` +| 2.4 +| `com.sun.xml.bind:jaxb-xjc:2.4.0-b180830.0438` + `com.sun.xml.bind:jaxb-core:2.3.0.1` + `com.sun.xml.bind:jaxb-impl:2.4.0-b180830.0438` + `javax.xml.bind:jaxb-api:2.4.0-b180830.0359` + | 3.0 | `com.sun.xml.bind:jaxb-xjc:3.0.2` `com.sun.xml.bind:jaxb-core:3.0.2` diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt index ea315d4..bb4c41e 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt @@ -21,7 +21,7 @@ interface XjcExtension : XjcGeneratorOptions { * The version of the XJC _tool_ to use. * * This will influence the version of the XJC compiler that is used, but not (directly) the parameters - * that are passed to it. Valid values are `2.2`, `2.3` and `3.0`. + * that are passed to it. Valid values are `2.2`, `2.3`, `2.4` and `3.0`. * * The value of this property only influences the set of * [defaultDependencies][org.gradle.api.artifacts.Configuration.defaultDependencies] on the global `xjcTool` diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt index 1d74ad4..7790dd1 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt @@ -43,6 +43,7 @@ abstract class XjcGenerate private val WorkActionClassNamesByVersion = mapOf( "2.2" to "org.unbrokendome.gradle.plugins.xjc.work.xjc22.XjcGeneratorWorkAction", "2.3" to "org.unbrokendome.gradle.plugins.xjc.work.xjc23.XjcGeneratorWorkAction", + "2.4" to "org.unbrokendome.gradle.plugins.xjc.work.xjc24.XjcGeneratorWorkAction", "3.0" to "org.unbrokendome.gradle.plugins.xjc.work.xjc30.XjcGeneratorWorkAction" ) private val HIGHEST_SUPPORTED_VERSION = WorkActionClassNamesByVersion.keys.max() diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt index 8fffb09..36aacc5 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt @@ -38,6 +38,12 @@ class XjcPlugin : Plugin { "2.3" to listOf( "com.sun.xml.bind:jaxb-xjc:2.3.3" ), + "2.4" to listOf( // Supports JAXB -target 2.2 (and 2.1 and 2.0) + "com.sun.xml.bind:jaxb-xjc:2.4.0-b180830.0438", + "com.sun.xml.bind:jaxb-core:2.3.0.1", // there is no 2.4 version + "com.sun.xml.bind:jaxb-impl:2.4.0-b180830.0438", + "javax.xml.bind:jaxb-api:2.4.0-b180830.0359" + ), "3.0" to listOf( "com.sun.xml.bind:jaxb-xjc:3.0.2", "com.sun.xml.bind:jaxb-core:3.0.2", diff --git a/src/xjc24/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc24/XjcGeneratorWorkAction.kt b/src/xjc24/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc24/XjcGeneratorWorkAction.kt new file mode 100644 index 0000000..8bc6f05 --- /dev/null +++ b/src/xjc24/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc24/XjcGeneratorWorkAction.kt @@ -0,0 +1,8 @@ +package org.unbrokendome.gradle.plugins.xjc.work.xjc24 + +import org.unbrokendome.gradle.plugins.xjc.work.common.AbstractXjcGeneratorWorkAction +import javax.inject.Inject + +@Suppress("unused") // instantiated dynamically +abstract class XjcGeneratorWorkAction +@Inject constructor(): AbstractXjcGeneratorWorkAction() \ No newline at end of file From 0dbc536fce6a32202771161f7646854205b83af6 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:08:06 +0000 Subject: [PATCH 021/115] Added: samples/xjc-tool-2_4 + IT --- samples/groovy-dsl/xjc-tool-2_4/build.gradle | 25 +++++++++++++++++ .../groovy-dsl/xjc-tool-2_4/settings.gradle | 8 ++++++ .../xjc-tool-2_4/src/main/schema/books.xsd | 21 +++++++++++++++ .../kotlin-dsl/xjc-tool-2_4/build.gradle.kts | 27 +++++++++++++++++++ .../xjc-tool-2_4/settings.gradle.kts | 8 ++++++ .../xjc-tool-2_4/src/main/schema/books.xsd | 21 +++++++++++++++ .../plugins/xjc/XjcTool24IntegrationTest.kt | 19 +++++++++++++ 7 files changed, 129 insertions(+) create mode 100644 samples/groovy-dsl/xjc-tool-2_4/build.gradle create mode 100644 samples/groovy-dsl/xjc-tool-2_4/settings.gradle create mode 100644 samples/groovy-dsl/xjc-tool-2_4/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-tool-2_4/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-2_4/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-2_4/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool24IntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-tool-2_4/build.gradle b/samples/groovy-dsl/xjc-tool-2_4/build.gradle new file mode 100644 index 0000000..d9334a3 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_4/build.gradle @@ -0,0 +1,25 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '2.4' +} + + +dependencies { + implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359' + + xjcTool 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359' + + xjcTool 'com.sun.xml.bind:jaxb-xjc:2.4.0-b180830.0438' + xjcTool 'com.sun.xml.bind:jaxb-impl:2.4.0-b180830.0438' + xjcTool 'com.sun.xml.bind:jaxb-core:2.3.0.1' // there is no 2.4 version +} diff --git a/samples/groovy-dsl/xjc-tool-2_4/settings.gradle b/samples/groovy-dsl/xjc-tool-2_4/settings.gradle new file mode 100644 index 0000000..f914436 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_4/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-tool-2_4' diff --git a/samples/groovy-dsl/xjc-tool-2_4/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-tool-2_4/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_4/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-tool-2_4/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_4/build.gradle.kts new file mode 100644 index 0000000..763312a --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_4/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("2.4") +} + + +dependencies { + implementation("javax.xml.bind:jaxb-api:2.4.0-b180830.0359") + //implementation("javax.xml.bind:jaxb-api:2.3.1") + //implementation("javax.xml.bind:jaxb-api:2.2.12") + + xjcTool("javax.xml.bind:jaxb-api:2.4.0-b180830.0359") + + xjcTool("com.sun.xml.bind:jaxb-xjc:2.4.0-b180830.0438") + xjcTool("com.sun.xml.bind:jaxb-impl:2.4.0-b180830.0438") + xjcTool("com.sun.xml.bind:jaxb-core:2.3.0.1") // there is no 2.4 version +} diff --git a/samples/kotlin-dsl/xjc-tool-2_4/settings.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_4/settings.gradle.kts new file mode 100644 index 0000000..bf21f25 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_4/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-tool-2_4" diff --git a/samples/kotlin-dsl/xjc-tool-2_4/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-tool-2_4/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_4/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool24IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool24IntegrationTest.kt new file mode 100644 index 0000000..2310e60 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool24IntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-tool-2_4") +class XjcTool24IntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-tool-2_4") + } +} From 678d0359b6a61baf1fb0814fc5f1ff1b7320571a Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:15:35 +0000 Subject: [PATCH 022/115] Update XJC 2.3 to use latest 2.3.x GA JARs Remove: com.sun.xml.bind:jaxb-xjc:2.3.3 Replace with: com.sun.xml.bind:jaxb-xjc:2.3.8 com.sun.xml.bind:jaxb-core:2.3.0.1 com.sun.xml.bind:jaxb-impl:2.3.8 javax.xml.bind:jaxb-api:2.3.1 --- build.gradle.kts | 5 ++++- docs/xjc-versions.adoc | 5 ++++- .../kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b5dcffd..87a6e07 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -60,7 +60,10 @@ dependencies { "xjc22CompileOnly"("javax.xml.bind:jaxb-api:2.2.11") "xjc23CompileOnly"(xjcCommon.output) - "xjc23CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.3.3") + "xjc23CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.3.8") + "xjc23CompileOnly"("com.sun.xml.bind:jaxb-core:2.3.0.1") + "xjc23CompileOnly"("com.sun.xml.bind:jaxb-impl:2.3.8") + "xjc23CompileOnly"("javax.xml.bind:jaxb-api:2.3.1") "xjc24CompileOnly"(xjcCommon.output) "xjc24CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.4.0-b180830.0438") diff --git a/docs/xjc-versions.adoc b/docs/xjc-versions.adoc index 53366b4..30b64ec 100644 --- a/docs/xjc-versions.adoc +++ b/docs/xjc-versions.adoc @@ -53,7 +53,10 @@ invoking XJC, with the following dependencies: `javax.xml.bind:jaxb-api:2.2.11` | 2.3 -| `com.sun.xml.bind:jaxb-xjc:2.3.3` +| `com.sun.xml.bind:jaxb-xjc:2.3.8` + `com.sun.xml.bind:jaxb-core:2.3.0.1` + `com.sun.xml.bind:jaxb-impl:2.3.8` + `javax.xml.bind:jaxb-api:2.3.1` | 2.4 | `com.sun.xml.bind:jaxb-xjc:2.4.0-b180830.0438` diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt index 36aacc5..1115c6a 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt @@ -36,7 +36,10 @@ class XjcPlugin : Plugin { "javax.xml.bind:jaxb-api:2.2.11" ), "2.3" to listOf( - "com.sun.xml.bind:jaxb-xjc:2.3.3" + "com.sun.xml.bind:jaxb-xjc:2.3.8", + "com.sun.xml.bind:jaxb-core:2.3.0.1", // there is no later 2.3 version + "com.sun.xml.bind:jaxb-impl:2.3.8", // or 2.3.3 + "javax.xml.bind:jaxb-api:2.3.1" ), "2.4" to listOf( // Supports JAXB -target 2.2 (and 2.1 and 2.0) "com.sun.xml.bind:jaxb-xjc:2.4.0-b180830.0438", From 5fbe014935bfeff20353dba2b0203556eead6557 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:30:12 +0000 Subject: [PATCH 023/115] Added: samples/xjc-version-2_4 + IT --- .../groovy-dsl/xjc-version-2_4/build.gradle | 20 ++++++++++++++++++ .../xjc-version-2_4/settings.gradle | 8 +++++++ .../xjc-version-2_4/src/main/schema/books.xsd | 21 +++++++++++++++++++ .../xjc-version-2_4/build.gradle.kts | 20 ++++++++++++++++++ .../xjc-version-2_4/settings.gradle.kts | 8 +++++++ .../xjc-version-2_4/src/main/schema/books.xsd | 21 +++++++++++++++++++ .../xjc/XjcVersion24IntegrationTest.kt | 19 +++++++++++++++++ 7 files changed, 117 insertions(+) create mode 100644 samples/groovy-dsl/xjc-version-2_4/build.gradle create mode 100644 samples/groovy-dsl/xjc-version-2_4/settings.gradle create mode 100644 samples/groovy-dsl/xjc-version-2_4/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-version-2_4/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-2_4/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-2_4/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion24IntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-version-2_4/build.gradle b/samples/groovy-dsl/xjc-version-2_4/build.gradle new file mode 100644 index 0000000..4094d20 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-2_4/build.gradle @@ -0,0 +1,20 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '2.4' +} + + +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively + implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359' +} diff --git a/samples/groovy-dsl/xjc-version-2_4/settings.gradle b/samples/groovy-dsl/xjc-version-2_4/settings.gradle new file mode 100644 index 0000000..201693b --- /dev/null +++ b/samples/groovy-dsl/xjc-version-2_4/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-version-2_4' diff --git a/samples/groovy-dsl/xjc-version-2_4/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-version-2_4/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-2_4/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-version-2_4/build.gradle.kts b/samples/kotlin-dsl/xjc-version-2_4/build.gradle.kts new file mode 100644 index 0000000..0498a6c --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-2_4/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("2.4") +} + + +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively + implementation("javax.xml.bind:jaxb-api:2.4.0-b180830.0359") +} diff --git a/samples/kotlin-dsl/xjc-version-2_4/settings.gradle.kts b/samples/kotlin-dsl/xjc-version-2_4/settings.gradle.kts new file mode 100644 index 0000000..d978ea2 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-2_4/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-version-2_4" diff --git a/samples/kotlin-dsl/xjc-version-2_4/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-version-2_4/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-2_4/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion24IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion24IntegrationTest.kt new file mode 100644 index 0000000..74e2e18 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion24IntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-version-2_4") +class XjcVersion24IntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-version-2_4") + } +} From c000930d84c5862b4bb2d312e5be943f54f0d292 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:32:17 +0000 Subject: [PATCH 024/115] Added: samples/xjc-version-default + IT --- .../xjc-version-default/build.gradle | 15 +++++++++++++ .../xjc-version-default/settings.gradle | 8 +++++++ .../src/main/schema/books.xsd | 21 +++++++++++++++++++ .../xjc-version-default/build.gradle.kts | 15 +++++++++++++ .../xjc-version-default/settings.gradle.kts | 8 +++++++ .../src/main/schema/books.xsd | 21 +++++++++++++++++++ .../xjc/XjcVersionDefaultIntegrationTest.kt | 19 +++++++++++++++++ 7 files changed, 107 insertions(+) create mode 100644 samples/groovy-dsl/xjc-version-default/build.gradle create mode 100644 samples/groovy-dsl/xjc-version-default/settings.gradle create mode 100644 samples/groovy-dsl/xjc-version-default/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-version-default/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-default/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-default/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionDefaultIntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-version-default/build.gradle b/samples/groovy-dsl/xjc-version-default/build.gradle new file mode 100644 index 0000000..2d77d3f --- /dev/null +++ b/samples/groovy-dsl/xjc-version-default/build.gradle @@ -0,0 +1,15 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +dependencies { + // 2.3 is the default xjcVersion + implementation 'javax.xml.bind:jaxb-api:2.3.1' +} diff --git a/samples/groovy-dsl/xjc-version-default/settings.gradle b/samples/groovy-dsl/xjc-version-default/settings.gradle new file mode 100644 index 0000000..f6e9764 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-default/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-version-default' diff --git a/samples/groovy-dsl/xjc-version-default/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-version-default/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-default/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-version-default/build.gradle.kts b/samples/kotlin-dsl/xjc-version-default/build.gradle.kts new file mode 100644 index 0000000..5034fe5 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-default/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +dependencies { + // 2.3 is the default xjcVersion + implementation("javax.xml.bind:jaxb-api:2.3.1") +} diff --git a/samples/kotlin-dsl/xjc-version-default/settings.gradle.kts b/samples/kotlin-dsl/xjc-version-default/settings.gradle.kts new file mode 100644 index 0000000..baf5e50 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-default/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-version-default" diff --git a/samples/kotlin-dsl/xjc-version-default/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-version-default/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-default/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionDefaultIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionDefaultIntegrationTest.kt new file mode 100644 index 0000000..87afc61 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionDefaultIntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-version-default") +class XjcVersionDefaultIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-version-default") + } +} From 61f17c676341f7c07d6096aa0940cbe4bbaa9806 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:34:14 +0000 Subject: [PATCH 025/115] Added: samples/bindings + IT --- samples/groovy-dsl/bindings/build.gradle | 19 +++++++++ samples/groovy-dsl/bindings/settings.gradle | 8 ++++ .../bindings/src/main/schema/books.xjb | 16 ++++++++ .../bindings/src/main/schema/books.xsd | 21 ++++++++++ samples/kotlin-dsl/bindings/build.gradle.kts | 19 +++++++++ .../kotlin-dsl/bindings/settings.gradle.kts | 8 ++++ .../bindings/src/main/schema/books.xjb | 16 ++++++++ .../bindings/src/main/schema/books.xsd | 21 ++++++++++ .../plugins/xjc/BindingsIntegrationTest.kt | 41 +++++++++++++++++++ 9 files changed, 169 insertions(+) create mode 100644 samples/groovy-dsl/bindings/build.gradle create mode 100644 samples/groovy-dsl/bindings/settings.gradle create mode 100644 samples/groovy-dsl/bindings/src/main/schema/books.xjb create mode 100644 samples/groovy-dsl/bindings/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/bindings/build.gradle.kts create mode 100644 samples/kotlin-dsl/bindings/settings.gradle.kts create mode 100644 samples/kotlin-dsl/bindings/src/main/schema/books.xjb create mode 100644 samples/kotlin-dsl/bindings/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/BindingsIntegrationTest.kt diff --git a/samples/groovy-dsl/bindings/build.gradle b/samples/groovy-dsl/bindings/build.gradle new file mode 100644 index 0000000..52da711 --- /dev/null +++ b/samples/groovy-dsl/bindings/build.gradle @@ -0,0 +1,19 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '2.3' +} + + +dependencies { + implementation 'javax.xml.bind:jaxb-api:2.3.0' +} diff --git a/samples/groovy-dsl/bindings/settings.gradle b/samples/groovy-dsl/bindings/settings.gradle new file mode 100644 index 0000000..4ce589c --- /dev/null +++ b/samples/groovy-dsl/bindings/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'bindings' diff --git a/samples/groovy-dsl/bindings/src/main/schema/books.xjb b/samples/groovy-dsl/bindings/src/main/schema/books.xjb new file mode 100644 index 0000000..822d452 --- /dev/null +++ b/samples/groovy-dsl/bindings/src/main/schema/books.xjb @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/samples/groovy-dsl/bindings/src/main/schema/books.xsd b/samples/groovy-dsl/bindings/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/bindings/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/bindings/build.gradle.kts b/samples/kotlin-dsl/bindings/build.gradle.kts new file mode 100644 index 0000000..8b85190 --- /dev/null +++ b/samples/kotlin-dsl/bindings/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("2.3") +} + + +dependencies { + implementation("javax.xml.bind:jaxb-api:2.3.0") +} diff --git a/samples/kotlin-dsl/bindings/settings.gradle.kts b/samples/kotlin-dsl/bindings/settings.gradle.kts new file mode 100644 index 0000000..812626e --- /dev/null +++ b/samples/kotlin-dsl/bindings/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "bindings" diff --git a/samples/kotlin-dsl/bindings/src/main/schema/books.xjb b/samples/kotlin-dsl/bindings/src/main/schema/books.xjb new file mode 100644 index 0000000..822d452 --- /dev/null +++ b/samples/kotlin-dsl/bindings/src/main/schema/books.xjb @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/samples/kotlin-dsl/bindings/src/main/schema/books.xsd b/samples/kotlin-dsl/bindings/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/bindings/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/BindingsIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/BindingsIntegrationTest.kt new file mode 100644 index 0000000..5ee093a --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/BindingsIntegrationTest.kt @@ -0,0 +1,41 @@ +package org.unbrokendome.gradle.plugins.xjc + +import assertk.all +import assertk.assertThat +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.* +import org.unbrokendome.gradle.plugins.xjc.testutil.runGradle +import java.io.File + + +@UseSampleProject("bindings") +class BindingsIntegrationTest { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + val projectName = "bindings" + + val buildResult = runner.runGradle("build") + + assertThat(buildResult).all { + task(":xjcGenerate").isSuccess() + task(":build").isSuccess() + } + + assertThat(projectDir, "projectDir") + .resolve("build/libs/$projectName.jar") + .withJarFile { + containsEntries( + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/package_name/BookType.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/package_name/BooksType.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/package_name/ObjectFactory.class" + ) + } + + } +} From 8a135983f42f630da41b435f60273b2d3a4862e1 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:39:25 +0000 Subject: [PATCH 026/115] Update XJC 2.2 to use later jaxb-api:2.2.12 Removed: javax.xml.bind:jaxb-api:2.2.11 Replaced with: javax.xml.bind:jaxb-api:2.2.12 --- docs/xjc-versions.adoc | 2 +- .../kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/xjc-versions.adoc b/docs/xjc-versions.adoc index 30b64ec..cec39aa 100644 --- a/docs/xjc-versions.adoc +++ b/docs/xjc-versions.adoc @@ -50,7 +50,7 @@ invoking XJC, with the following dependencies: | `com.sun.xml.bind:jaxb-xjc:2.2.11` `com.sun.xml.bind:jaxb-core:2.2.11` `com.sun.xml.bind:jaxb-impl:2.2.11` - `javax.xml.bind:jaxb-api:2.2.11` + `javax.xml.bind:jaxb-api:2.2.12` | 2.3 | `com.sun.xml.bind:jaxb-xjc:2.3.8` diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt index 1115c6a..e22de8d 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt @@ -33,7 +33,7 @@ class XjcPlugin : Plugin { "com.sun.xml.bind:jaxb-xjc:2.2.11", "com.sun.xml.bind:jaxb-core:2.2.11", "com.sun.xml.bind:jaxb-impl:2.2.11", - "javax.xml.bind:jaxb-api:2.2.11" + "javax.xml.bind:jaxb-api:2.2.12" ), "2.3" to listOf( "com.sun.xml.bind:jaxb-xjc:2.3.8", From f3a19565d3a1132e45e21bb6fc9d148c05d49f74 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:40:17 +0000 Subject: [PATCH 027/115] XjcPlugin: Comment improvement on -target support to reader --- .../kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt index e22de8d..5a21349 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt @@ -29,13 +29,13 @@ class XjcPlugin : Plugin { val XJC_GLOBAL_CATALOG_RESOLUTION_CONFIGURATION_NAME = "xjcCatalogResolutionGlobal" private val DefaultXjcToolDependenciesByVersion = mapOf( - "2.2" to listOf( + "2.2" to listOf( // Supports JAXB -target 2.2 (and 2.1 and 2.0) "com.sun.xml.bind:jaxb-xjc:2.2.11", "com.sun.xml.bind:jaxb-core:2.2.11", "com.sun.xml.bind:jaxb-impl:2.2.11", "javax.xml.bind:jaxb-api:2.2.12" ), - "2.3" to listOf( + "2.3" to listOf( // Supports JAXB -target 2.2 (and 2.1 and 2.0) "com.sun.xml.bind:jaxb-xjc:2.3.8", "com.sun.xml.bind:jaxb-core:2.3.0.1", // there is no later 2.3 version "com.sun.xml.bind:jaxb-impl:2.3.8", // or 2.3.3 @@ -47,7 +47,7 @@ class XjcPlugin : Plugin { "com.sun.xml.bind:jaxb-impl:2.4.0-b180830.0438", "javax.xml.bind:jaxb-api:2.4.0-b180830.0359" ), - "3.0" to listOf( + "3.0" to listOf( // Supports JAXB -target 3.0 (and 2.3) "com.sun.xml.bind:jaxb-xjc:3.0.2", "com.sun.xml.bind:jaxb-core:3.0.2", "com.sun.xml.bind:jaxb-impl:3.0.2", From 7844ebf1d5edf5c5b7b6466aa4b3e6b2140036ec Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:44:39 +0000 Subject: [PATCH 028/115] Add Support for XJC 4.0 Using: com.sun.xml.bind:jaxb-xjc:4.0.2 com.sun.xml.bind:jaxb-core:4.0.2 com.sun.xml.bind:jaxb-impl:4.0.2 jakarta.xml.bind:jakarta.xml.bind-api:4.0.0 --- build.gradle.kts | 9 ++++++++- docs/xjc-versions.adoc | 8 +++++++- .../org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt | 2 +- .../org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt | 3 ++- .../org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt | 6 ++++++ .../plugins/xjc/work/xjc40/XjcGeneratorWorkAction.kt | 8 ++++++++ 6 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 src/xjc40/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc40/XjcGeneratorWorkAction.kt diff --git a/build.gradle.kts b/build.gradle.kts index 87a6e07..ebe048c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -35,7 +35,8 @@ val xjc22: SourceSet by sourceSets.creating val xjc23: SourceSet by sourceSets.creating val xjc24: SourceSet by sourceSets.creating val xjc30: SourceSet by sourceSets.creating -val xjcSourceSets = listOf(xjcCommon, xjc22, xjc23, xjc24, xjc30) +val xjc40: SourceSet by sourceSets.creating +val xjcSourceSets = listOf(xjcCommon, xjc22, xjc23, xjc24, xjc30, xjc40) dependencies { @@ -76,6 +77,12 @@ dependencies { "xjc30CompileOnly"("com.sun.xml.bind:jaxb-impl:3.0.2") "xjc30CompileOnly"("jakarta.xml.bind:jakarta.xml.bind-api:3.0.1") + "xjc40CompileOnly"(xjcCommon.output) + "xjc40CompileOnly"("com.sun.xml.bind:jaxb-xjc:4.0.2") + "xjc40CompileOnly"("com.sun.xml.bind:jaxb-core:4.0.2") + "xjc40CompileOnly"("com.sun.xml.bind:jaxb-impl:4.0.2") + "xjc40CompileOnly"("jakarta.xml.bind:jakarta.xml.bind-api:4.0.0") + "testLibApi"(kotlin("stdlib-jdk8")) "testLibApi"("com.willowtreeapps.assertk:assertk-jvm:0.22") diff --git a/docs/xjc-versions.adoc b/docs/xjc-versions.adoc index cec39aa..0ef51f5 100644 --- a/docs/xjc-versions.adoc +++ b/docs/xjc-versions.adoc @@ -4,7 +4,7 @@ XJC has been around for a long time and comes in a variety of versions, includin Oracle and non-standard forks from third parties. They should usually correspond with the version of the JAXB API / runtime used, but it is also possible to use a newer XJC to generate code for use with an earlier JAXB target. -The `org.unbroken-dome.xjc` plugin supports the standard XJC versions 2.2, 2.3, 2.4 and 3.0. Other versions may work +The `org.unbroken-dome.xjc` plugin supports the standard XJC versions 2.2, 2.3, 2.4, 3.0 and 4.0. Other versions may work as well but are not tested. The plugin will use XJC 2.3 by default if the version is not specified. NOTE: XJC 3.0 is currently in milestone status but since the interface to XJC has not @@ -70,6 +70,12 @@ invoking XJC, with the following dependencies: `com.sun.xml.bind:jaxb-impl:3.0.2` `jakarta.xml.bind:jakarta.xml.bind-api:3.0.1` +| 4.0 +| `com.sun.xml.bind:jaxb-xjc:4.0.2` + `com.sun.xml.bind:jaxb-core:4.0.2` + `com.sun.xml.bind:jaxb-impl:4.0.2` + `jakarta.xml.bind:jakarta.xml.bind-api:4.0.0` + |=== diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt index bb4c41e..dd6675c 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt @@ -21,7 +21,7 @@ interface XjcExtension : XjcGeneratorOptions { * The version of the XJC _tool_ to use. * * This will influence the version of the XJC compiler that is used, but not (directly) the parameters - * that are passed to it. Valid values are `2.2`, `2.3`, `2.4` and `3.0`. + * that are passed to it. Valid values are `2.2`, `2.3`, `2.4`, `3.0` and `4.0`. * * The value of this property only influences the set of * [defaultDependencies][org.gradle.api.artifacts.Configuration.defaultDependencies] on the global `xjcTool` diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt index 7790dd1..4e3367b 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt @@ -44,7 +44,8 @@ abstract class XjcGenerate "2.2" to "org.unbrokendome.gradle.plugins.xjc.work.xjc22.XjcGeneratorWorkAction", "2.3" to "org.unbrokendome.gradle.plugins.xjc.work.xjc23.XjcGeneratorWorkAction", "2.4" to "org.unbrokendome.gradle.plugins.xjc.work.xjc24.XjcGeneratorWorkAction", - "3.0" to "org.unbrokendome.gradle.plugins.xjc.work.xjc30.XjcGeneratorWorkAction" + "3.0" to "org.unbrokendome.gradle.plugins.xjc.work.xjc30.XjcGeneratorWorkAction", + "4.0" to "org.unbrokendome.gradle.plugins.xjc.work.xjc40.XjcGeneratorWorkAction" ) private val HIGHEST_SUPPORTED_VERSION = WorkActionClassNamesByVersion.keys.max() } diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt index 5a21349..b69db6a 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt @@ -52,6 +52,12 @@ class XjcPlugin : Plugin { "com.sun.xml.bind:jaxb-core:3.0.2", "com.sun.xml.bind:jaxb-impl:3.0.2", "jakarta.xml.bind:jakarta.xml.bind-api:3.0.1" + ), + "4.0" to listOf( // Supports JAXB -target 3.0 (and 2.3) + "com.sun.xml.bind:jaxb-xjc:4.0.2", + "com.sun.xml.bind:jaxb-core:4.0.2", + "com.sun.xml.bind:jaxb-impl:4.0.2", + "jakarta.xml.bind:jakarta.xml.bind-api:4.0.0" ) ) } diff --git a/src/xjc40/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc40/XjcGeneratorWorkAction.kt b/src/xjc40/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc40/XjcGeneratorWorkAction.kt new file mode 100644 index 0000000..4c8812a --- /dev/null +++ b/src/xjc40/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc40/XjcGeneratorWorkAction.kt @@ -0,0 +1,8 @@ +package org.unbrokendome.gradle.plugins.xjc.work.xjc40 + +import org.unbrokendome.gradle.plugins.xjc.work.common.AbstractXjcGeneratorWorkAction +import javax.inject.Inject + +@Suppress("unused") // instantiated dynamically +abstract class XjcGeneratorWorkAction +@Inject constructor(): AbstractXjcGeneratorWorkAction() \ No newline at end of file From e205eeb6522250cc09e75c7d6eed564df69847ba Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:49:20 +0000 Subject: [PATCH 029/115] XjcToolFutureIntegrationTest disable IT Due to 4.0 support being added there is no easily available version of the XJC tool we can switch to that the plugin does not support. This is good news for the plugin project, but not this test. So it has been disabled. It should be possiblle to validate to test works if you wind back SCM history to somewhere between the time the IT was added and a commit or 2 before it was disabled. --- .../gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt index 58f6ed2..94187e3 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt @@ -18,8 +18,14 @@ import java.io.File @UseSampleProject("xjc-tool-future") class XjcToolFutureIntegrationTest : AbstractBasicIntegrationTest() { - @TestEachDslFlavor - @Testable + // Disabled to enable this test with we ideally need to supply an XJC + // Tool implementation that has a future version such as in the + // MANIFEST.MF: + // Specification-Version: 98.0 + // Maybe it is possible to achieve this in the sample project tree + // and have gradle build a subproject before using it to run this test. + //@TestEachDslFlavor + //@Testable fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { Assumptions.assumeTrue(javaVersionAtLeast(11), "Requires JDK11 runtime or above due to the XJC Tool bytecode version requirement") From 36bb353f4a05c54beabe552cefacec30cabb96bc Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:49:50 +0000 Subject: [PATCH 030/115] Added: samples/xjc-version-4_0 + IT --- .../groovy-dsl/xjc-version-4_0/build.gradle | 20 ++++++++++++++++ .../xjc-version-4_0/settings.gradle | 8 +++++++ .../xjc-version-4_0/src/main/schema/books.xsd | 21 +++++++++++++++++ .../xjc-version-4_0/build.gradle.kts | 20 ++++++++++++++++ .../xjc-version-4_0/settings.gradle.kts | 8 +++++++ .../xjc-version-4_0/src/main/schema/books.xsd | 21 +++++++++++++++++ .../xjc/XjcVersion40IntegrationTest.kt | 23 +++++++++++++++++++ 7 files changed, 121 insertions(+) create mode 100644 samples/groovy-dsl/xjc-version-4_0/build.gradle create mode 100644 samples/groovy-dsl/xjc-version-4_0/settings.gradle create mode 100644 samples/groovy-dsl/xjc-version-4_0/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-version-4_0/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-4_0/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-4_0/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion40IntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-version-4_0/build.gradle b/samples/groovy-dsl/xjc-version-4_0/build.gradle new file mode 100644 index 0000000..dc69b57 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-4_0/build.gradle @@ -0,0 +1,20 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '4.0' +} + + +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively + implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0' +} diff --git a/samples/groovy-dsl/xjc-version-4_0/settings.gradle b/samples/groovy-dsl/xjc-version-4_0/settings.gradle new file mode 100644 index 0000000..9788531 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-4_0/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-version-4_0' diff --git a/samples/groovy-dsl/xjc-version-4_0/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-version-4_0/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-4_0/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-version-4_0/build.gradle.kts b/samples/kotlin-dsl/xjc-version-4_0/build.gradle.kts new file mode 100644 index 0000000..57596ed --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-4_0/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("4.0") +} + + +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively + implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.0") +} diff --git a/samples/kotlin-dsl/xjc-version-4_0/settings.gradle.kts b/samples/kotlin-dsl/xjc-version-4_0/settings.gradle.kts new file mode 100644 index 0000000..ccd9692 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-4_0/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-version-4_0" diff --git a/samples/kotlin-dsl/xjc-version-4_0/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-version-4_0/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-4_0/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion40IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion40IntegrationTest.kt new file mode 100644 index 0000000..45c313e --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion40IntegrationTest.kt @@ -0,0 +1,23 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.jupiter.api.Assumptions +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.JavaVersionUtil.Companion.javaVersionAtLeast +import java.io.File + + +@UseSampleProject("xjc-version-4_0") +class XjcVersion40IntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + Assumptions.assumeTrue(javaVersionAtLeast(11), "Requires JDK11 runtime or above due to the XJC Tool bytecode version requirement") + + super.test(runner, projectDir, "xjc-version-4_0") + } +} From 1a0c3f49fd8a714d7fd51663a2051bfd0f0d3419 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:50:28 +0000 Subject: [PATCH 031/115] Added: samples/xjc-tool-4_0 + IT --- samples/groovy-dsl/xjc-tool-4_0/build.gradle | 21 +++++++++++++++++ .../groovy-dsl/xjc-tool-4_0/settings.gradle | 8 +++++++ .../xjc-tool-4_0/src/main/schema/books.xsd | 21 +++++++++++++++++ .../kotlin-dsl/xjc-tool-4_0/build.gradle.kts | 22 ++++++++++++++++++ .../xjc-tool-4_0/settings.gradle.kts | 8 +++++++ .../xjc-tool-4_0/src/main/schema/books.xsd | 21 +++++++++++++++++ .../plugins/xjc/XjcTool40IntegrationTest.kt | 23 +++++++++++++++++++ 7 files changed, 124 insertions(+) create mode 100644 samples/groovy-dsl/xjc-tool-4_0/build.gradle create mode 100644 samples/groovy-dsl/xjc-tool-4_0/settings.gradle create mode 100644 samples/groovy-dsl/xjc-tool-4_0/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-tool-4_0/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-4_0/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-4_0/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool40IntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-tool-4_0/build.gradle b/samples/groovy-dsl/xjc-tool-4_0/build.gradle new file mode 100644 index 0000000..82949dc --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-4_0/build.gradle @@ -0,0 +1,21 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '4.0' +} + + +dependencies { + implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.0' + + xjcTool 'com.sun.xml.bind:jaxb-xjc:4.0.2' +} diff --git a/samples/groovy-dsl/xjc-tool-4_0/settings.gradle b/samples/groovy-dsl/xjc-tool-4_0/settings.gradle new file mode 100644 index 0000000..3ed3b26 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-4_0/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-tool-4_0' diff --git a/samples/groovy-dsl/xjc-tool-4_0/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-tool-4_0/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-4_0/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-tool-4_0/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-4_0/build.gradle.kts new file mode 100644 index 0000000..95b5fb0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-4_0/build.gradle.kts @@ -0,0 +1,22 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("4.0") +} + + +dependencies { + // XJC 3.0 requires a different JAXB API artifact + implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.0") + + xjcTool("com.sun.xml.bind:jaxb-xjc:4.0.2") +} diff --git a/samples/kotlin-dsl/xjc-tool-4_0/settings.gradle.kts b/samples/kotlin-dsl/xjc-tool-4_0/settings.gradle.kts new file mode 100644 index 0000000..c1fd972 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-4_0/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-tool-4_0" diff --git a/samples/kotlin-dsl/xjc-tool-4_0/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-tool-4_0/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-4_0/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool40IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool40IntegrationTest.kt new file mode 100644 index 0000000..7898b8f --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool40IntegrationTest.kt @@ -0,0 +1,23 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.jupiter.api.Assumptions +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.JavaVersionUtil.Companion.javaVersionAtLeast +import java.io.File + + +@UseSampleProject("xjc-tool-4_0") +class XjcTool40IntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + Assumptions.assumeTrue(javaVersionAtLeast(11), "Requires JDK11 runtime or above due to the XJC Tool bytecode version requirement") + + super.test(runner, projectDir, "xjc-tool-4_0") + } +} From 80cd793fb5c838621d126ab20548e9fce7973b36 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:52:01 +0000 Subject: [PATCH 032/115] Added: samples/bindings_jakarta + IT --- .../groovy-dsl/bindings_jakarta/build.gradle | 19 +++++++++ .../bindings_jakarta/settings.gradle | 8 ++++ .../src/main/schema/books.xjb | 16 ++++++++ .../src/main/schema/books.xsd | 21 ++++++++++ .../bindings_jakarta/build.gradle.kts | 19 +++++++++ .../bindings_jakarta/settings.gradle.kts | 8 ++++ .../src/main/schema/books.xjb | 16 ++++++++ .../src/main/schema/books.xsd | 21 ++++++++++ .../xjc/BindingsJakartaIntegrationTest.kt | 41 +++++++++++++++++++ 9 files changed, 169 insertions(+) create mode 100644 samples/groovy-dsl/bindings_jakarta/build.gradle create mode 100644 samples/groovy-dsl/bindings_jakarta/settings.gradle create mode 100644 samples/groovy-dsl/bindings_jakarta/src/main/schema/books.xjb create mode 100644 samples/groovy-dsl/bindings_jakarta/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/bindings_jakarta/build.gradle.kts create mode 100644 samples/kotlin-dsl/bindings_jakarta/settings.gradle.kts create mode 100644 samples/kotlin-dsl/bindings_jakarta/src/main/schema/books.xjb create mode 100644 samples/kotlin-dsl/bindings_jakarta/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/BindingsJakartaIntegrationTest.kt diff --git a/samples/groovy-dsl/bindings_jakarta/build.gradle b/samples/groovy-dsl/bindings_jakarta/build.gradle new file mode 100644 index 0000000..731b25c --- /dev/null +++ b/samples/groovy-dsl/bindings_jakarta/build.gradle @@ -0,0 +1,19 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '3.0' +} + + +dependencies { + implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1' +} diff --git a/samples/groovy-dsl/bindings_jakarta/settings.gradle b/samples/groovy-dsl/bindings_jakarta/settings.gradle new file mode 100644 index 0000000..a4b6154 --- /dev/null +++ b/samples/groovy-dsl/bindings_jakarta/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'bindings_jakarta' diff --git a/samples/groovy-dsl/bindings_jakarta/src/main/schema/books.xjb b/samples/groovy-dsl/bindings_jakarta/src/main/schema/books.xjb new file mode 100644 index 0000000..4d157d8 --- /dev/null +++ b/samples/groovy-dsl/bindings_jakarta/src/main/schema/books.xjb @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/samples/groovy-dsl/bindings_jakarta/src/main/schema/books.xsd b/samples/groovy-dsl/bindings_jakarta/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/bindings_jakarta/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/bindings_jakarta/build.gradle.kts b/samples/kotlin-dsl/bindings_jakarta/build.gradle.kts new file mode 100644 index 0000000..d6599ff --- /dev/null +++ b/samples/kotlin-dsl/bindings_jakarta/build.gradle.kts @@ -0,0 +1,19 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("3.0") +} + + +dependencies { + implementation("jakarta.xml.bind:jakarta.xml.bind-api:3.0.1") +} diff --git a/samples/kotlin-dsl/bindings_jakarta/settings.gradle.kts b/samples/kotlin-dsl/bindings_jakarta/settings.gradle.kts new file mode 100644 index 0000000..4083e23 --- /dev/null +++ b/samples/kotlin-dsl/bindings_jakarta/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "bindings_jakarta" diff --git a/samples/kotlin-dsl/bindings_jakarta/src/main/schema/books.xjb b/samples/kotlin-dsl/bindings_jakarta/src/main/schema/books.xjb new file mode 100644 index 0000000..4d157d8 --- /dev/null +++ b/samples/kotlin-dsl/bindings_jakarta/src/main/schema/books.xjb @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/samples/kotlin-dsl/bindings_jakarta/src/main/schema/books.xsd b/samples/kotlin-dsl/bindings_jakarta/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/bindings_jakarta/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/BindingsJakartaIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/BindingsJakartaIntegrationTest.kt new file mode 100644 index 0000000..32af2b7 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/BindingsJakartaIntegrationTest.kt @@ -0,0 +1,41 @@ +package org.unbrokendome.gradle.plugins.xjc + +import assertk.all +import assertk.assertThat +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.* +import org.unbrokendome.gradle.plugins.xjc.testutil.runGradle +import java.io.File + + +@UseSampleProject("bindings_jakarta") +class BindingsJakartaIntegrationTest { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + val projectName = "bindings_jakarta" + + val buildResult = runner.runGradle("build") + + assertThat(buildResult).all { + task(":xjcGenerate").isSuccess() + task(":build").isSuccess() + } + + assertThat(projectDir, "projectDir") + .resolve("build/libs/$projectName.jar") + .withJarFile { + containsEntries( + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/package_name/BookType.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/package_name/BooksType.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/package_name/ObjectFactory.class" + ) + } + + } +} From 33372f2d249b464f3465406228c3a4677916951f Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 16:54:35 +0000 Subject: [PATCH 033/115] ProjectProperties: Any => Serializable This seems more correct when investigating Issue#34 concerning docLocale usage. --- .../gradle/plugins/xjc/internal/ProjectProperties.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/ProjectProperties.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/ProjectProperties.kt index 98e1c0d..4d5d105 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/ProjectProperties.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/ProjectProperties.kt @@ -2,6 +2,7 @@ package org.unbrokendome.gradle.plugins.xjc.internal import org.gradle.api.Project import org.gradle.api.provider.Provider +import java.io.Serializable internal fun Project.providerFromProjectProperty( @@ -20,7 +21,7 @@ internal fun Project.booleanProviderFromProjectProperty( ) -internal fun Project.providerFromProjectProperty( +internal fun Project.providerFromProjectProperty( propertyName: String, transform: (String) -> T, defaultValue: T? = null ): Provider = provider { findProperty(propertyName)?.toString()?.let(transform) ?: defaultValue From a43ca2285d060c38f777d76efd76dc45aba1b6a5 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 17:11:23 +0000 Subject: [PATCH 034/115] Issue#38 docLocale switch to using String type It is not entirely clear to me why using Locale type directly is better than just keeping the setting as a string and converting it just before use. The Gradle documentation does indicate that anything Serializable can be used as a Property, Locale is Serialiable so I'm not sure why it doesn't work as-is. It would be ideal if it was to be kept as Locale type and if both a Locale or a String can be assigned to the property and it just works. But I could not find out how to provide an accepted type convertor that works in both Groovy and Kotlin DSLs. The other alternative is to proivide a function like: docLocale = locale('it') docLocale = locale(Locale.ITALIAN) It it not clear if the feature previously worked when set inside the DSL, I was unable to create a TestCase that demonstrated it did. It only seemed to work as a gradle.properties setting. This commit does not change the previous behaviour with regards to gradle.properties use, but it does allow it to be set from inside the DSL now in a consistent way to the gradle.properties string property. --- docs/controlling-xjc-behavior.adoc | 2 +- samples/groovy-dsl/doclocale/build.gradle | 17 +++++++++++++++ samples/groovy-dsl/doclocale/settings.gradle | 8 +++++++ .../doclocale/src/main/schema/books.xsd | 21 +++++++++++++++++++ samples/kotlin-dsl/doclocale/build.gradle.kts | 18 ++++++++++++++++ .../kotlin-dsl/doclocale/settings.gradle.kts | 8 +++++++ .../doclocale/src/main/schema/books.xsd | 21 +++++++++++++++++++ .../plugins/xjc/DoclocaleIntegrationTest.kt | 19 +++++++++++++++++ .../gradle/plugins/xjc/XjcGeneratorOptions.kt | 5 ++--- .../internal/XjcGeneratorWorkParameters.kt | 3 +-- .../gradle/plugins/xjc/XjcGenerateTest.kt | 4 ++-- .../gradle/plugins/xjc/XjcPluginTest.kt | 2 +- .../common/AbstractXjcGeneratorWorkAction.kt | 3 ++- 13 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 samples/groovy-dsl/doclocale/build.gradle create mode 100644 samples/groovy-dsl/doclocale/settings.gradle create mode 100644 samples/groovy-dsl/doclocale/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/doclocale/build.gradle.kts create mode 100644 samples/kotlin-dsl/doclocale/settings.gradle.kts create mode 100644 samples/kotlin-dsl/doclocale/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/DoclocaleIntegrationTest.kt diff --git a/docs/controlling-xjc-behavior.adoc b/docs/controlling-xjc-behavior.adoc index bdbf3c8..863031a 100644 --- a/docs/controlling-xjc-behavior.adoc +++ b/docs/controlling-xjc-behavior.adoc @@ -15,7 +15,7 @@ The following properties are available in the project-scoped `xjc` block, and ap | `-target` | (use latest version) -| `docLocale` (`java.util.Locale`) +| `docLocale` (`String`) | The locale to be used when running XJC. This may influence the language of documentation comments in XJC-generated files. | (no equivalent) | JVM default locale diff --git a/samples/groovy-dsl/doclocale/build.gradle b/samples/groovy-dsl/doclocale/build.gradle new file mode 100644 index 0000000..5fc7e5e --- /dev/null +++ b/samples/groovy-dsl/doclocale/build.gradle @@ -0,0 +1,17 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + +repositories { + mavenCentral() +} + +xjc { + docLocale = "it" +} + + +dependencies { + implementation 'javax.xml.bind:jaxb-api:2.3.0' +} diff --git a/samples/groovy-dsl/doclocale/settings.gradle b/samples/groovy-dsl/doclocale/settings.gradle new file mode 100644 index 0000000..b54f9b3 --- /dev/null +++ b/samples/groovy-dsl/doclocale/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'doclocale' diff --git a/samples/groovy-dsl/doclocale/src/main/schema/books.xsd b/samples/groovy-dsl/doclocale/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/doclocale/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/doclocale/build.gradle.kts b/samples/kotlin-dsl/doclocale/build.gradle.kts new file mode 100644 index 0000000..83a3e6e --- /dev/null +++ b/samples/kotlin-dsl/doclocale/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + +xjc { + docLocale.set("it") +} + + +dependencies { + implementation("javax.xml.bind:jaxb-api:2.3.0") +} diff --git a/samples/kotlin-dsl/doclocale/settings.gradle.kts b/samples/kotlin-dsl/doclocale/settings.gradle.kts new file mode 100644 index 0000000..82837a8 --- /dev/null +++ b/samples/kotlin-dsl/doclocale/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "doclocale" diff --git a/samples/kotlin-dsl/doclocale/src/main/schema/books.xsd b/samples/kotlin-dsl/doclocale/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/doclocale/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/DoclocaleIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/DoclocaleIntegrationTest.kt new file mode 100644 index 0000000..1682b91 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/DoclocaleIntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("doclocale") +class DoclocaleIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "doclocale") + } +} diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGeneratorOptions.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGeneratorOptions.kt index 2390f7f..5365a29 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGeneratorOptions.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGeneratorOptions.kt @@ -10,7 +10,6 @@ import org.unbrokendome.gradle.plugins.xjc.internal.XjcGeneratorFlags import org.unbrokendome.gradle.plugins.xjc.internal.booleanProviderFromProjectProperty import org.unbrokendome.gradle.plugins.xjc.internal.providerFromProjectProperty import java.util.EnumSet -import java.util.Locale /** @@ -42,7 +41,7 @@ interface XjcGeneratorOptions { * the JVM's default locale to the given one before calling XJC, and switch it back afterwards. */ @get:[Input Optional] - val docLocale: Property + val docLocale: Property /** * If `true`, perform strict schema validation. @@ -126,7 +125,7 @@ internal fun XjcGeneratorOptions.setFromProjectProperties(project: Project) = ap project.providerFromProjectProperty("xjc.encoding", "UTF-8") ) docLocale.set( - project.providerFromProjectProperty("xjc.docLocale", Locale::forLanguageTag) + project.providerFromProjectProperty("xjc.docLocale") ) strictCheck.set( project.booleanProviderFromProjectProperty("xjc.strictCheck", true) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/XjcGeneratorWorkParameters.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/XjcGeneratorWorkParameters.kt index 6a28cdc..ec54ebc 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/XjcGeneratorWorkParameters.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/XjcGeneratorWorkParameters.kt @@ -7,7 +7,6 @@ import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.api.provider.SetProperty import org.gradle.workers.WorkParameters -import java.util.Locale interface XjcGeneratorWorkParameters : WorkParameters { @@ -23,7 +22,7 @@ interface XjcGeneratorWorkParameters : WorkParameters { val episodes: ConfigurableFileCollection val targetPackage: Property val encoding: Property - val docLocale: Property + val docLocale: Property val episodeTargetFile: RegularFileProperty val extraArgs: ListProperty val flags: SetProperty diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt index 3d876d6..7ab44a4 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt @@ -43,7 +43,7 @@ object XjcGenerateTest : Spek({ with(project.requiredExtension()) { targetVersion.set("XYZ") encoding.set("ISO-8859-1") - docLocale.set(Locale.ITALIAN) + docLocale.set(Locale.ITALIAN.toString()) strictCheck.set(false) packageLevelAnnotations.set(false) noFileHeader.set(false) @@ -56,7 +56,7 @@ object XjcGenerateTest : Spek({ assertThat(task, "task").all { prop(XjcGenerate::targetVersion).hasValueEqualTo("XYZ") prop(XjcGenerate::encoding).hasValueEqualTo("ISO-8859-1") - prop(XjcGenerate::docLocale).hasValueEqualTo(Locale.ITALIAN) + prop(XjcGenerate::docLocale).hasValueEqualTo(Locale.ITALIAN.toString()) prop(XjcGenerate::strictCheck).isFalse() prop(XjcGenerate::packageLevelAnnotations).isFalse() prop(XjcGenerate::noFileHeader).isFalse() diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt index fd6f774..854d569 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt @@ -86,7 +86,7 @@ object XjcPluginTest : Spek({ prop(XjcExtension::srcDirName).hasValueEqualTo("xjc") prop(XjcExtension::targetVersion).hasValueEqualTo("2.2") prop(XjcExtension::encoding).hasValueEqualTo("ISO-8859-1") - prop(XjcExtension::docLocale).hasValueEqualTo(Locale.ITALIAN) + prop(XjcExtension::docLocale).hasValueEqualTo(Locale.ITALIAN.toString()) prop(XjcExtension::strictCheck).isFalse() prop(XjcExtension::packageLevelAnnotations).isFalse() prop(XjcExtension::noFileHeader).isFalse() diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt index b3fdb14..0afc526 100644 --- a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt @@ -17,6 +17,7 @@ import org.unbrokendome.gradle.plugins.xjc.resolver.MavenUriResolver import org.xml.sax.InputSource import java.net.URI import java.net.URISyntaxException +import java.util.Locale abstract class AbstractXjcGeneratorWorkAction : WorkAction { @@ -32,7 +33,7 @@ abstract class AbstractXjcGeneratorWorkAction : WorkAction Date: Thu, 9 Mar 2023 18:56:12 +0000 Subject: [PATCH 035/115] Added: samples/xjc-tool-2_2-legacy support for legacy XJC 2.2 --- .../xjc-tool-2_2-legacy/build.gradle | 27 +++++++++++++++++++ .../xjc-tool-2_2-legacy/settings.gradle | 8 ++++++ .../src/main/schema/books.xsd | 21 +++++++++++++++ .../xjc-tool-2_2-legacy/build.gradle.kts | 27 +++++++++++++++++++ .../xjc-tool-2_2-legacy/settings.gradle.kts | 8 ++++++ .../src/main/schema/books.xsd | 21 +++++++++++++++ .../xjc/XjcTool22LegacyIntegrationTest.kt | 20 ++++++++++++++ .../gradle/plugins/xjc/XjcGenerate.kt | 11 ++++++-- .../plugins/xjc/internal/ManifestUtils.kt | 1 + 9 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 samples/groovy-dsl/xjc-tool-2_2-legacy/build.gradle create mode 100644 samples/groovy-dsl/xjc-tool-2_2-legacy/settings.gradle create mode 100644 samples/groovy-dsl/xjc-tool-2_2-legacy/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-tool-2_2-legacy/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-2_2-legacy/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-2_2-legacy/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool22LegacyIntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-tool-2_2-legacy/build.gradle b/samples/groovy-dsl/xjc-tool-2_2-legacy/build.gradle new file mode 100644 index 0000000..734af32 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_2-legacy/build.gradle @@ -0,0 +1,27 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '2.2' +} + + +dependencies { + // These legacy jars do not have any OSGi MANIFEST data, + // that is what makes them legacy as plugin auto-detect works slightly different + implementation 'javax.xml.bind:jaxb-api:2.2.7' + + xjcTool 'javax.xml.bind:jaxb-api:2.2.7' + + xjcTool 'com.sun.xml.bind:jaxb-xjc:2.2.7' + xjcTool 'com.sun.xml.bind:jaxb-impl:2.2.7' + xjcTool 'com.sun.xml.bind:jaxb-core:2.2.7' +} diff --git a/samples/groovy-dsl/xjc-tool-2_2-legacy/settings.gradle b/samples/groovy-dsl/xjc-tool-2_2-legacy/settings.gradle new file mode 100644 index 0000000..d98388f --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_2-legacy/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-tool-2_2-legacy' diff --git a/samples/groovy-dsl/xjc-tool-2_2-legacy/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-tool-2_2-legacy/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_2-legacy/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-tool-2_2-legacy/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_2-legacy/build.gradle.kts new file mode 100644 index 0000000..e93dfe7 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_2-legacy/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("2.2") +} + + +dependencies { + // These legacy jars do not have any OSGi MANIFEST data, + // that is what makes them legacy as plugin auto-detect works slightly different + implementation("javax.xml.bind:jaxb-api:2.2.7") + + xjcTool("javax.xml.bind:jaxb-api:2.2.7") + + xjcTool("com.sun.xml.bind:jaxb-xjc:2.2.7") + xjcTool("com.sun.xml.bind:jaxb-impl:2.2.7") + xjcTool("com.sun.xml.bind:jaxb-core:2.2.7") +} diff --git a/samples/kotlin-dsl/xjc-tool-2_2-legacy/settings.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_2-legacy/settings.gradle.kts new file mode 100644 index 0000000..46609b6 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_2-legacy/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-tool-2_2-legacy" diff --git a/samples/kotlin-dsl/xjc-tool-2_2-legacy/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-tool-2_2-legacy/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_2-legacy/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool22LegacyIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool22LegacyIntegrationTest.kt new file mode 100644 index 0000000..83e3e16 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool22LegacyIntegrationTest.kt @@ -0,0 +1,20 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.AbstractBasicIntegrationTest +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-tool-2_2-legacy") +class XjcTool22LegacyIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-tool-2_2-legacy") + } +} diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt index 4e3367b..8d56dec 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt @@ -238,12 +238,15 @@ abstract class XjcGenerate private fun resolveXjcVersion(): String { val toolManifest = toolClasspath.findManifests() .singleOrNull { manifest -> + // pre XJC 2.3.x + val extensionName = manifest.mainAttributes[ManifestAttributes.ExtensionName] + // post XJC 2.3.0+ val bundleSymbolicName = manifest.mainAttributes[ManifestAttributes.BundleSymbolicName] - bundleSymbolicName == "com.sun.xml.bind.jaxb-xjc" + extensionName == "com.sun.tools.xjc" || bundleSymbolicName == "com.sun.xml.bind.jaxb-xjc" } ?: throw IllegalStateException("Could not find a suitable XJC implementation on the tool classpath, expecting: com.sun.xml.bind.jaxb-xjc") - val xjcVersionSpecificationVersion = toolManifest.mainAttributes[ManifestAttributes.SpecificationVersion]?.toString() + val xjcVersionSpecificationVersion = sanitizeSpecificationVersion(toolManifest.mainAttributes[ManifestAttributes.SpecificationVersion]?.toString()) // Although this setting is called xjcVersionUnsupportedStrategy externally it is actually internally xjcVersionStrategy, // it is named as it is to better reflect to the target audience the correct level of concern when configuring it. val xjcVersionStrategy = xjcVersionUnsupportedStrategy.get() @@ -285,6 +288,10 @@ abstract class XjcGenerate return resolvedWorkActionClassName } + private fun sanitizeSpecificationVersion(s: String?): String? { + return s?.split(".")?.subList(0, 2)?.joinToString(".") // "1.2.3-FOO" => "1.2" + } + private fun cleanOutputDirs(): Boolean { val outputCleaned = outputDirectory.get().asFile.deleteAllContents() val episodeOutputCleaned = episodeOutputDirectory.get().asFile.deleteAllContents() diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/ManifestUtils.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/ManifestUtils.kt index 53b35e2..63f105a 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/ManifestUtils.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/internal/ManifestUtils.kt @@ -11,6 +11,7 @@ internal object ManifestAttributes { val MainClass = Attributes.Name("Main-Class") val BundleSymbolicName = Attributes.Name("Bundle-SymbolicName") val SpecificationVersion = Attributes.Name("Specification-Version") + val ExtensionName = Attributes.Name("Extension-Name") } From 066478ff674a7d0055107bbb0ba840d2c9df655b Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 17:32:58 +0000 Subject: [PATCH 036/115] CatalogsWithCleanIntegrationTest: Failing test on Windows This issue is still being investigated. This IT serves to document the problem. When building a project using this gradle plugin in an IDE on windows it is necessary restart the gradle daemon process (causing it to release open file handles) to allow a clean to occur after using this feature (catalogs resolved with classpath:/maven: scheme). The cause is suspected to be a lost InputStream inside XJC maybe from the CatalogResolver#resolveEntity(String,String) implementation from xml-resolver:xml-resolver:1.2 that isn't being closed. As XJC is built more like a command line tool no one may have noticed. Another commit will fix the URLClassLoader.close() use in this plugin but that does not fix this issue. Things already tried to resolve it with no luck so far, intercept CatalogResolver#resolveEntity(String,String) inside this plugin at ExtensibleCatalogResolver#resolveEntity(String?,String?): InputSource Here it has been tried to force close all open InputStream's returned and setByteStream(null). As maybe the API spec allows this to happen, forcing the caller to open and manage their own InputStream. Here it has been tried to collect all open InputStream's returned leaving them open for the caller, collected into a static ConcurrentLinkedQueue. Then at the exit point of the XJC plugin somewhere around the end of AbstractXjcGeneratorWorkAction#doExecute(Options) call a static method to enumerate and force close them. Did not fix problem. Other options to try... Build a ClassLoader the XJC main gets to use and monitor everything, then cleanup after it. Like the ConcurrentLinkedQueue idea above but with a more global view, not just the XML catalog usage. Copy the JAR to a $TMPDIR location (outside of gradle $buildDir and have URLClassLoader reference that. Security headache? The JARs end up littered around not deleted. These assume XJC is the cause and that use of ClassLoader has visiblity. --- .../xjc/CatalogsWithCleanIntegrationTest.kt | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/CatalogsWithCleanIntegrationTest.kt diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/CatalogsWithCleanIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/CatalogsWithCleanIntegrationTest.kt new file mode 100644 index 0000000..396a603 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/CatalogsWithCleanIntegrationTest.kt @@ -0,0 +1,64 @@ +package org.unbrokendome.gradle.plugins.xjc + +import assertk.all +import assertk.assertThat +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.containsEntries +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.containsEntry +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.isSuccess +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.resolve +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.task +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.withJarFile +import org.unbrokendome.gradle.plugins.xjc.testutil.runGradle +import java.io.File + + +@UseSampleProject("catalogs") +class CatalogsWithCleanIntegrationTest { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + val buildResult = runner.runGradle("build") + + assertThat(buildResult).all { + task(":schema-library:build").isSuccess() + task(":consumer:xjcGenerate").isSuccess() + task(":consumer:build").isSuccess() + } + + assertThat(projectDir, "projectDir") + .resolve("schema-library/build/libs/schema-library.jar") + .withJarFile { + containsEntry("schema/books.xsd") + } + + assertThat(projectDir, "projectDir") + .resolve("consumer/build/libs/consumer.jar") + .withJarFile { + containsEntries( + "org/unbroken_dome/gradle_xjc_plugin/samples/books/BookType.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/BooksType.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/ObjectFactory.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/bookshelf/Bookshelf.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/bookshelf/ObjectFactory.class" + ) + } + + // It has been observed that clean fails to delete the schema-library\build\libs\schema-library.jar + // after Gradle should have finished all processing with it. + // Note this maybe a Windows platform issue only, as by default you can't + // unlink a file with an open file handle on it. + var cleanResult = runner.runGradle("clean") + + assertThat(cleanResult).all { + task(":schema-library:clean").isSuccess() + task(":consumer:clean").isSuccess() + } + + } +} From 0247be62088992f03fc255b3226c54fe860a4d8d Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 17:47:45 +0000 Subject: [PATCH 037/115] URLClassLoader is a Closeable wrap with classLoader.use {} --- .../gradle/plugins/xjc/resolver/MavenUriResolver.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt index 64dacfe..9af057d 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt @@ -49,10 +49,12 @@ class MavenUriResolver( matchingArtifacts.map { it.file.toURI().toURL() }.toList().toTypedArray() ) val resourceName = path.removePrefix("/") - classLoader.getResource(resourceName)?.toURI() - ?: throw IllegalArgumentException( - "Could not resolve resource \"$resourceName\" from classpath: ${classLoader.urLs.toList()}" - ) + classLoader.use { + classLoader.getResource(resourceName)?.toURI() + ?: throw IllegalArgumentException( + "Could not resolve resource \"$resourceName\" from classpath: ${classLoader.urLs.toList()}" + ) + } } else { matchingArtifacts.first() From 34fff7d737ab1c46baeab34ed72e2c5c9cdb9486 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 9 Mar 2023 17:50:58 +0000 Subject: [PATCH 038/115] Warn when multiple bind-api seem present on classpath for XJC AbstractXjcGeneratorWorkAction: Warn when multiple bind-api seem present on classpath for XJC --- .../common/AbstractXjcGeneratorWorkAction.kt | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt index 0afc526..27d3a7c 100644 --- a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt @@ -41,12 +41,39 @@ abstract class AbstractXjcGeneratorWorkAction : WorkAction Date: Thu, 9 Mar 2023 17:58:05 +0000 Subject: [PATCH 039/115] MavenUriResolver: Warn on multiple matches, clarify the selected one Previously it would take the first match and silently ignore the rest. This might lead to silent inconsistent behaviour (selection order maybe dependant on the gradle run at the time, i.e. not consistently recreatable in CI) with no warning or mechanism to diagnose and resolve. Attempt to warn the user and clarify which item got selected and by emitting the list provide a way for the user to resolve or ignore after reading diagnostic warning. --- .../gradle/plugins/xjc/resolver/MavenUriResolver.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt index 9af057d..8e44658 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt @@ -57,8 +57,13 @@ class MavenUriResolver( } } else { - matchingArtifacts.first() - .file.toURI() + val artifacts = matchingArtifacts.toList() + if(artifacts.size > 1) { + for((index,it) in artifacts.withIndex()) { + logger.warn("MavenUriResolver multiple matching artifacts found, only index 0 is selected[{}]: {}", index, it) + } + } + artifacts[0].file.toURI() } } } From 95625b829887de035f9d024ef75a8201a20253f3 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 15:20:06 +0000 Subject: [PATCH 040/115] CatalogsWithCleanIntegrationTest: JVM behaviour workaround This commit fixes the test case when run on Windows platform. This is a best effort to be both compatible with as many JVMs as possible and workaround the JAR locking and URLConnection useCaches issue on Windows platform. Worst case scenario you may get the old issue back and need to manually restart the Gradle daemon when appropriate. But for common JVMs OpenJDK/Oracle from 8 onwards this has a high chance of working around the issue for you. --- .../xjc/resolver/ExtensibleCatalogResolver.kt | 40 ++++++ .../plugins/xjc/resolver/ReflectionHelper.kt | 114 ++++++++++++++++++ .../common/AbstractXjcGeneratorWorkAction.kt | 29 +++-- 3 files changed, 171 insertions(+), 12 deletions(-) create mode 100644 src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ReflectionHelper.kt diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ExtensibleCatalogResolver.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ExtensibleCatalogResolver.kt index ea1b0be..95d96f7 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ExtensibleCatalogResolver.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ExtensibleCatalogResolver.kt @@ -3,6 +3,9 @@ package org.unbrokendome.gradle.plugins.xjc.resolver import org.apache.xml.resolver.CatalogManager import org.apache.xml.resolver.tools.CatalogResolver import org.slf4j.LoggerFactory +import org.unbrokendome.gradle.plugins.xjc.resolver.ReflectionHelper.Companion.reflectiveInvoke_URLConnection_getDefaultUseCaches +import org.unbrokendome.gradle.plugins.xjc.resolver.ReflectionHelper.Companion.reflectiveInvoke_URLConnection_setDefaultUseCaches +import org.xml.sax.InputSource import java.net.URI @@ -15,6 +18,43 @@ class ExtensibleCatalogResolver( private val logger = LoggerFactory.getLogger(ExtensibleCatalogResolver::class.java) } + override fun resolveEntity(publicId: String?, systemId: String?): InputSource? { + val JAR = "jar" + // val useCaches = URLConnection.getDefaultUseCaches(JAR) + val useCaches = reflectiveInvoke_URLConnection_getDefaultUseCaches(JAR) + try { + reflectiveInvoke_URLConnection_setDefaultUseCaches(JAR, false) + // URLConnection.setDefaultUseCaches(JAR, false) + + logger.debug("resolveEntity({}, {}): lookup", publicId, systemId) + + // Why are we intercepting this? Well the classpath JAR loader is based on URLConnection + // and this has a concept of cacheable entities. So it attempts to maintain a shared and + // open file handle to the containing JAR file even when the last resource InputStream + // needing it has been closed. + // + // The Apache xml-resolver:1.2 implementation always returns an open InputStream for a + // successful use of #resolveEnntity(String,String) as per + // org.apache.xml.resolver.tools.CatalogResolver#L211 + // + // This causes a problem, as even though Gradle and this plugin manage the XJC classloader + // to isolate even when that classloader is closed the JVM still maintains an open file + // handle, which is a problem for using Gradle daemon in a long-running way from IDE in + // Windows where JAR locking is a headache. + val inputSource = super.resolveEntity(publicId, systemId) + + if (inputSource?.byteStream != null) + ReflectionHelper.addInputStream(inputSource.byteStream) + // inputSource.characterStream // this exists as well but not used + + return inputSource + } finally { + // URLConnection.setDefaultUseCaches(JAR, useCaches) + if(useCaches != null) + reflectiveInvoke_URLConnection_setDefaultUseCaches(JAR, useCaches) + } + } + override fun getResolvedEntity(publicId: String?, systemId: String?): String? { diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ReflectionHelper.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ReflectionHelper.kt new file mode 100644 index 0000000..d2423e0 --- /dev/null +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ReflectionHelper.kt @@ -0,0 +1,114 @@ +package org.unbrokendome.gradle.plugins.xjc.resolver + +import org.slf4j.LoggerFactory +import java.io.IOException +import java.io.InputStream +import java.lang.reflect.InvocationTargetException +import java.util.concurrent.ConcurrentLinkedQueue + +class ReflectionHelper { + + // Trying to keep this ugliness away from the main code + companion object { + private val logger = LoggerFactory.getLogger(ExtensibleCatalogResolver::class.java) + + private val inputStreams: ConcurrentLinkedQueue = ConcurrentLinkedQueue() + + fun addInputStream(inputStream: InputStream) { + inputStreams.add(inputStream) + } + + fun closeAll() { + if(inputStreams.size > 0) + logger.debug("{}#closeAll() count={}", ReflectionHelper::class.java.simpleName, inputStreams.size) + + while (!inputStreams.isEmpty()) { + val c = inputStreams.remove() + + try { + c.close() + } catch(_: IOException) { + } + + try { + if(c.javaClass.name.endsWith("JarURLInputStream")) { + // "sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream" + reflectiveInvoke_jarFile_close(c); + } + } catch(_: IOException) { + } + } + } + + private fun reflectiveInvoke_jarFile_close(o: InputStream): Boolean? { + // Ugly hacks for broken JRE features + try { + // Enclosing Class field reference to enclosing instance, name is JavaC convention + val enclosingParentField = o.javaClass.getDeclaredField("this$0") + enclosingParentField.isAccessible = true + val enclosingParentInstance = enclosingParentField.get(o) // JarURLConnection + val klass = enclosingParentInstance.javaClass // URLJarFile + val jarFileField = klass.getDeclaredField("jarFile") + jarFileField.isAccessible = true + val jarFile = jarFileField.get(enclosingParentInstance) + if(jarFile != null) { + val closeMethod = jarFile.javaClass.getMethod("close") + closeMethod.invoke(jarFile) + logger.debug("{}.jarFile.close()", o) + return true + } + return false + } catch(_: NoSuchFieldException) { + } catch(_: NoSuchMethodException) { + } catch(_: IllegalArgumentException) { + } catch(_: IllegalAccessException) { + } catch(_: InvocationTargetException) { + } catch(_: SecurityException) { + } catch(e: Throwable) { + // we catch this as the reflection approach is a best-effort and should not + // cause a terminal failure due to an obscure JVM being different here + logger.warn("{}", "", e) + } + return null + } + + fun reflectiveInvoke_URLConnection_getDefaultUseCaches(protocol: String): Boolean? { + // JDK8 compatibility + try { + val klass = Class.forName("java.net.URLConnection") // since 1.0 + val m = klass.getMethod("getDefaultUseCaches", String::class.java) // JDK9+ + val rv = m.invoke(null, protocol) as Boolean + logger.debug("URLConnection.getDefaultUseCaches({}) = {}", protocol, rv) + return rv + } catch(_: NoSuchMethodException) { + } catch(_: InvocationTargetException) { + } catch(_: SecurityException) { + } catch(e: Throwable) { + // we catch this as the reflection approach is a best-effort and should not + // cause a terminal failure due to an obscure JVM being different here + logger.warn("{}", "", e) + } + return null + } + + fun reflectiveInvoke_URLConnection_setDefaultUseCaches(protocol: String, defaultVal: Boolean): Boolean { + // JDK8 compatibility + try { + val klass = Class.forName("java.net.URLConnection") // since 1.0 + val m = klass.getMethod("setDefaultUseCaches", String::class.java, Boolean::class.java) // JDK9+ + m.invoke(null, protocol, defaultVal) + logger.debug("URLConnection.setDefaultUseCaches({}, {})", protocol, defaultVal) + return true + } catch(_: NoSuchMethodException) { + } catch(_: InvocationTargetException) { + } catch(_: SecurityException) { + } catch(e: Throwable) { + // we catch this as the reflection approach is a best-effort and should not + // cause a terminal failure due to an obscure JVM being different here + logger.warn("{}", "", e) + } + return false + } + } + +} diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt index 27d3a7c..98f9403 100644 --- a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt @@ -14,6 +14,7 @@ import org.unbrokendome.gradle.plugins.xjc.internal.XjcGeneratorWorkParameters import org.unbrokendome.gradle.plugins.xjc.resolver.ClasspathUriResolver import org.unbrokendome.gradle.plugins.xjc.resolver.ExtensibleCatalogResolver import org.unbrokendome.gradle.plugins.xjc.resolver.MavenUriResolver +import org.unbrokendome.gradle.plugins.xjc.resolver.ReflectionHelper import org.xml.sax.InputSource import java.net.URI import java.net.URISyntaxException @@ -74,22 +75,26 @@ abstract class AbstractXjcGeneratorWorkAction : WorkAction - if (!options.quiet) { - ProgressCodeWriter(cw, listener, model.codeModel.countArtifacts()) - } else cw - } + val codeWriter = options.createCodeWriter() + .let { cw -> + if (!options.quiet) { + ProgressCodeWriter(cw, listener, model.codeModel.countArtifacts()) + } else cw + } - model.codeModel.build(codeWriter) + model.codeModel.build(codeWriter) + } finally { + ReflectionHelper.closeAll() + } } From 3f734041f5f31431bdbebbff872e019b4651159d Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 15:25:46 +0000 Subject: [PATCH 041/115] ContextClassLoaderHolder save/restore Thread.contextClassLoader Restores the Thread.currentThread().contextClassLoader after it was modified before running XJC. --- .../common/AbstractXjcGeneratorWorkAction.kt | 36 +++++++++++-------- .../work/common/ContextClassLoaderHolder.kt | 33 +++++++++++++++++ .../work/common/IContextClassLoaderHolder.kt | 11 ++++++ 3 files changed, 66 insertions(+), 14 deletions(-) create mode 100644 src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/ContextClassLoaderHolder.kt create mode 100644 src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/IContextClassLoaderHolder.kt diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt index 98f9403..82df57a 100644 --- a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt @@ -26,19 +26,31 @@ abstract class AbstractXjcGeneratorWorkAction : WorkAction classpaths.add(classpathEntry.toURI().toURL()) } + } + + protected open fun buildOptions(options: Options) = options.apply { - // Set up the classloader containing the plugin classpath. This should happen before any call - // to parseArgument() or parseArguments() because it might trigger the resolution of plugins - // (which are then cached) - val contextClassLoader = Thread.currentThread().contextClassLoader - val userClassLoader = getUserClassLoader(contextClassLoader) - Thread.currentThread().contextClassLoader = userClassLoader target = parameters.target .map { SpecVersion.parse(it) } diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/ContextClassLoaderHolder.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/ContextClassLoaderHolder.kt new file mode 100644 index 0000000..d8824b5 --- /dev/null +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/ContextClassLoaderHolder.kt @@ -0,0 +1,33 @@ +package org.unbrokendome.gradle.plugins.xjc.work.common + +import com.sun.tools.xjc.Options +import java.io.Closeable +import java.io.IOException + +class ContextClassLoaderHolder : IContextClassLoaderHolder { + private var contextClassLoader: ClassLoader? = null + + override fun setup(options: Options) { + // Set up the classloader containing the plugin classpath. This should happen before any call + // to parseArgument() or parseArguments() because it might trigger the resolution of plugins + // (which are then cached) + contextClassLoader = Thread.currentThread().contextClassLoader + var userClassLoader = options.getUserClassLoader(contextClassLoader) as ClassLoader + Thread.currentThread().contextClassLoader = userClassLoader + } + + override fun restore() { + if(contextClassLoader != null) { + val userClassLoader = Thread.currentThread().contextClassLoader + Thread.currentThread().contextClassLoader = contextClassLoader + if(userClassLoader != contextClassLoader && userClassLoader is Closeable) { + try { + userClassLoader.close() + } catch(_: IOException) { + } + } + contextClassLoader = null + } + } + +} diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/IContextClassLoaderHolder.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/IContextClassLoaderHolder.kt new file mode 100644 index 0000000..8ef857a --- /dev/null +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/IContextClassLoaderHolder.kt @@ -0,0 +1,11 @@ +package org.unbrokendome.gradle.plugins.xjc.work.common + +import com.sun.tools.xjc.Options + +interface IContextClassLoaderHolder { + + fun restore() + + fun setup(options: Options) + +} From d31bb953cfb9c721429fb03c327c43ac759db018 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 15:31:43 +0000 Subject: [PATCH 042/115] Added: IOptionsAccessor for Options.encoding --- .../common/AbstractXjcGeneratorWorkAction.kt | 12 ++++++++---- .../xjc/work/common/IOptionsAccessor.kt | 11 +++++++++++ .../plugins/xjc/work/common/OptionsAccessor.kt | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/IOptionsAccessor.kt create mode 100644 src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/OptionsAccessor.kt diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt index 82df57a..a7967a5 100644 --- a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt @@ -28,6 +28,8 @@ abstract class AbstractXjcGeneratorWorkAction : WorkAction @@ -191,7 +194,7 @@ abstract class AbstractXjcGeneratorWorkAction : WorkAction Date: Fri, 10 Mar 2023 15:33:25 +0000 Subject: [PATCH 043/115] Support XJC 2.1 Legacy Also adds: xjc.xjcVersionUnsupportedStrategy = 'legacy-latest' --- build.gradle.kts | 9 ++++- docs/controlling-xjc-behavior.adoc | 2 +- docs/xjc-versions.adoc | 9 ++++- .../xjc-tool-2_1-legacy/build.gradle | 27 ++++++++++++++ .../xjc-tool-2_1-legacy/settings.gradle | 8 ++++ .../src/main/schema/books.xsd | 21 +++++++++++ .../xjc-tool-2_1-legacy/build.gradle.kts | 27 ++++++++++++++ .../xjc-tool-2_1-legacy/settings.gradle.kts | 8 ++++ .../src/main/schema/books.xsd | 21 +++++++++++ .../xjc/XjcTool21LegacyIntegrationTest.kt | 19 ++++++++++ .../gradle/plugins/xjc/XjcExtension.kt | 3 +- .../gradle/plugins/xjc/XjcGenerate.kt | 8 ++++ .../gradle/plugins/xjc/XjcPlugin.kt | 6 +++ .../xjc21/XjcGeneratorLegacyWorkAction.kt | 16 ++++++++ .../common/ContextClassLoaderHolderV21.kt | 37 +++++++++++++++++++ .../xjc/work/common/OptionsAccessorV21.kt | 18 +++++++++ 16 files changed, 235 insertions(+), 4 deletions(-) create mode 100644 samples/groovy-dsl/xjc-tool-2_1-legacy/build.gradle create mode 100644 samples/groovy-dsl/xjc-tool-2_1-legacy/settings.gradle create mode 100644 samples/groovy-dsl/xjc-tool-2_1-legacy/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-tool-2_1-legacy/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-2_1-legacy/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-2_1-legacy/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool21LegacyIntegrationTest.kt create mode 100644 src/xjc21/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc21/XjcGeneratorLegacyWorkAction.kt create mode 100644 src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/ContextClassLoaderHolderV21.kt create mode 100644 src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/OptionsAccessorV21.kt diff --git a/build.gradle.kts b/build.gradle.kts index ebe048c..cd0a88a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -31,12 +31,13 @@ testSets { val xjcCommon: SourceSet by sourceSets.creating +val xjc21: SourceSet by sourceSets.creating val xjc22: SourceSet by sourceSets.creating val xjc23: SourceSet by sourceSets.creating val xjc24: SourceSet by sourceSets.creating val xjc30: SourceSet by sourceSets.creating val xjc40: SourceSet by sourceSets.creating -val xjcSourceSets = listOf(xjcCommon, xjc22, xjc23, xjc24, xjc30, xjc40) +val xjcSourceSets = listOf(xjcCommon, xjc21, xjc22, xjc23, xjc24, xjc30, xjc40) dependencies { @@ -54,6 +55,12 @@ dependencies { "xjcCommonCompileOnly"("com.sun.xml.bind:jaxb-xjc:2.3.3") + "xjc21CompileOnly"(xjcCommon.output) + "xjc21CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.1.17") + "xjc21CompileOnly"("com.sun.xml.bind:jaxb-core:2.1.14") + "xjc21CompileOnly"("com.sun.xml.bind:jaxb-impl:2.1.17") + "xjc21CompileOnly"("javax.xml.bind:jaxb-api:2.1") + "xjc22CompileOnly"(xjcCommon.output) "xjc22CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.2.11") "xjc22CompileOnly"("com.sun.xml.bind:jaxb-core:2.2.11") diff --git a/docs/controlling-xjc-behavior.adoc b/docs/controlling-xjc-behavior.adoc index 863031a..17ba477 100644 --- a/docs/controlling-xjc-behavior.adoc +++ b/docs/controlling-xjc-behavior.adoc @@ -21,7 +21,7 @@ The following properties are available in the project-scoped `xjc` block, and ap | JVM default locale | `encoding` (`String`) -| The encoding for generated files. +| The encoding for generated files. This is supported by XJC 2.2 and later. | `-encoding` (non-standard) | `UTF-8` diff --git a/docs/xjc-versions.adoc b/docs/xjc-versions.adoc index 0ef51f5..0bdb409 100644 --- a/docs/xjc-versions.adoc +++ b/docs/xjc-versions.adoc @@ -4,7 +4,7 @@ XJC has been around for a long time and comes in a variety of versions, includin Oracle and non-standard forks from third parties. They should usually correspond with the version of the JAXB API / runtime used, but it is also possible to use a newer XJC to generate code for use with an earlier JAXB target. -The `org.unbroken-dome.xjc` plugin supports the standard XJC versions 2.2, 2.3, 2.4, 3.0 and 4.0. Other versions may work +The `org.unbroken-dome.xjc` plugin supports the standard XJC versions 2.1, 2.2, 2.3, 2.4, 3.0 and 4.0. Other versions may work as well but are not tested. The plugin will use XJC 2.3 by default if the version is not specified. NOTE: XJC 3.0 is currently in milestone status but since the interface to XJC has not @@ -46,6 +46,13 @@ invoking XJC, with the following dependencies: |=== | XJC Version | Classpath artifacts +| 2.1 +| `com.sun.xml.bind:jaxb-xjc:2.1.17` + `com.sun.xml.bind:jaxb-core:2.1.14` + `com.sun.xml.bind:jaxb-impl:2.1.17` + `javax.xml.bind:jaxb-api:2.1` + + | 2.2 | `com.sun.xml.bind:jaxb-xjc:2.2.11` `com.sun.xml.bind:jaxb-core:2.2.11` diff --git a/samples/groovy-dsl/xjc-tool-2_1-legacy/build.gradle b/samples/groovy-dsl/xjc-tool-2_1-legacy/build.gradle new file mode 100644 index 0000000..3d9d20a --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_1-legacy/build.gradle @@ -0,0 +1,27 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '2.1' +} + + +dependencies { + // These legacy jars do not have any OSGi MANIFEST data, + // that is what makes them legacy as plugin auto-detect works slightly different + implementation 'javax.xml.bind:jaxb-api:2.1' + + xjcTool 'javax.xml.bind:jaxb-api:2.1' + + xjcTool 'com.sun.xml.bind:jaxb-xjc:2.1.17' + xjcTool 'com.sun.xml.bind:jaxb-impl:2.1.17' + xjcTool 'com.sun.xml.bind:jaxb-core:2.1.14' +} diff --git a/samples/groovy-dsl/xjc-tool-2_1-legacy/settings.gradle b/samples/groovy-dsl/xjc-tool-2_1-legacy/settings.gradle new file mode 100644 index 0000000..4e8ef8e --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_1-legacy/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-tool-2_1-legacy' diff --git a/samples/groovy-dsl/xjc-tool-2_1-legacy/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-tool-2_1-legacy/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-2_1-legacy/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-tool-2_1-legacy/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_1-legacy/build.gradle.kts new file mode 100644 index 0000000..127aaaa --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_1-legacy/build.gradle.kts @@ -0,0 +1,27 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("2.1") +} + + +dependencies { + // These legacy jars do not have any OSGi MANIFEST data, + // that is what makes them legacy as plugin auto-detect works slightly different + implementation("javax.xml.bind:jaxb-api:2.1") + + xjcTool("javax.xml.bind:jaxb-api:2.1") + + xjcTool("com.sun.xml.bind:jaxb-xjc:2.1.17") + xjcTool("com.sun.xml.bind:jaxb-impl:2.1.17") + xjcTool("com.sun.xml.bind:jaxb-core:2.1.14") +} diff --git a/samples/kotlin-dsl/xjc-tool-2_1-legacy/settings.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_1-legacy/settings.gradle.kts new file mode 100644 index 0000000..bc755eb --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_1-legacy/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-tool-2_1-legacy" diff --git a/samples/kotlin-dsl/xjc-tool-2_1-legacy/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-tool-2_1-legacy/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-2_1-legacy/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool21LegacyIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool21LegacyIntegrationTest.kt new file mode 100644 index 0000000..59d2076 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool21LegacyIntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-tool-2_1-legacy") +class XjcTool21LegacyIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-tool-2_1-legacy") + } +} diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt index dd6675c..cc504c5 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcExtension.kt @@ -21,7 +21,7 @@ interface XjcExtension : XjcGeneratorOptions { * The version of the XJC _tool_ to use. * * This will influence the version of the XJC compiler that is used, but not (directly) the parameters - * that are passed to it. Valid values are `2.2`, `2.3`, `2.4`, `3.0` and `4.0`. + * that are passed to it. Valid values are `2.1`, `2.2`, `2.3`, `2.4`, `3.0` and `4.0`. * * The value of this property only influences the set of * [defaultDependencies][org.gradle.api.artifacts.Configuration.defaultDependencies] on the global `xjcTool` @@ -53,6 +53,7 @@ interface XjcExtension : XjcGeneratorOptions { * `auto-resolve` This will behave as `default` first, if `default` fails then proceed using `latest`. * This strategy is anticipated to be the action most users want in the situation. * `latest` to use the strategy for the latest supported version. As listed in `xjcVersion`. + * `legacy-latest` to use the latest known legacy strategy as used for 2.1 XJC tools. * `2.3` would force a specific strategy of a specific XJC tool version. * Any string value also valid for `xjcVersion` is allowed, `2.3` is an example of one of those values. * diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt index 8d56dec..9c1b06e 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt @@ -41,12 +41,17 @@ abstract class XjcGenerate * Used to select the correct WorkAction for a given JAXB spec version. */ private val WorkActionClassNamesByVersion = mapOf( + "2.1" to "org.unbrokendome.gradle.plugins.xjc.work.xjc21.XjcGeneratorLegacyWorkAction", "2.2" to "org.unbrokendome.gradle.plugins.xjc.work.xjc22.XjcGeneratorWorkAction", "2.3" to "org.unbrokendome.gradle.plugins.xjc.work.xjc23.XjcGeneratorWorkAction", "2.4" to "org.unbrokendome.gradle.plugins.xjc.work.xjc24.XjcGeneratorWorkAction", "3.0" to "org.unbrokendome.gradle.plugins.xjc.work.xjc30.XjcGeneratorWorkAction", "4.0" to "org.unbrokendome.gradle.plugins.xjc.work.xjc40.XjcGeneratorWorkAction" ) + private val LEGACY_LATEST_SUPPORTED_VERSION = WorkActionClassNamesByVersion.entries + .filter { it.value.endsWith("LegacyWorkAction") } + .map { it.key } + .max() private val HIGHEST_SUPPORTED_VERSION = WorkActionClassNamesByVersion.keys.max() } @@ -188,6 +193,7 @@ abstract class XjcGenerate * `auto-resolve` This will behave as `default` first, if `default` fails then proceed using `latest`. * This strategy is anticipated to be the action most users want in the situation. * `latest` to use the strategy for the latest supported version. As listed in `xjcVersion`. + * `legacy-latest` to use the latest known legacy strategy as used for 2.1 XJC tools. * `2.3` would force a specific strategy of a specific XJC tool version. * Any string value also valid for `xjcVersion` is allowed, `2.3` is an example of one of those values. * @@ -257,6 +263,8 @@ abstract class XjcGenerate var xjcVersion: String? if("latest".equals(xjcVersionStrategy, true)) xjcVersion = HIGHEST_SUPPORTED_VERSION + else if("legacy-latest".equals(xjcVersionStrategy, true)) + xjcVersion = LEGACY_LATEST_SUPPORTED_VERSION else if(!isDefault && !isAutoResolve && xjcVersionStrategy.isNotEmpty()) xjcVersion = xjcVersionStrategy else // "default" || "auto-resolve" || empty || null diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt index b69db6a..0543fa0 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt @@ -29,6 +29,12 @@ class XjcPlugin : Plugin { val XJC_GLOBAL_CATALOG_RESOLUTION_CONFIGURATION_NAME = "xjcCatalogResolutionGlobal" private val DefaultXjcToolDependenciesByVersion = mapOf( + "2.1" to listOf( // Supports JAXB -target 2.1 (and 2.0) + "com.sun.xml.bind:jaxb-xjc:2.1.17", + "com.sun.xml.bind:jaxb-core:2.1.14", + "com.sun.xml.bind:jaxb-impl:2.1.17", + "javax.xml.bind:jaxb-api:2.1" + ), "2.2" to listOf( // Supports JAXB -target 2.2 (and 2.1 and 2.0) "com.sun.xml.bind:jaxb-xjc:2.2.11", "com.sun.xml.bind:jaxb-core:2.2.11", diff --git a/src/xjc21/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc21/XjcGeneratorLegacyWorkAction.kt b/src/xjc21/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc21/XjcGeneratorLegacyWorkAction.kt new file mode 100644 index 0000000..c1d48c4 --- /dev/null +++ b/src/xjc21/kotlin/org/unbrokendome/gradle/plugins/xjc/work/xjc21/XjcGeneratorLegacyWorkAction.kt @@ -0,0 +1,16 @@ +package org.unbrokendome.gradle.plugins.xjc.work.xjc21 + +import com.sun.tools.xjc.Options +import org.unbrokendome.gradle.plugins.xjc.work.common.* +import javax.inject.Inject + + +@Suppress("unused") // instantiated dynamically +abstract class XjcGeneratorLegacyWorkAction +@Inject constructor(): AbstractXjcGeneratorWorkAction() { + + override fun getContextClassLoaderHolder(): IContextClassLoaderHolder = ContextClassLoaderHolderV21() + + override fun getOptionsAccessor(options: Options): IOptionsAccessor = OptionsAccessorV21(options) + +} diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/ContextClassLoaderHolderV21.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/ContextClassLoaderHolderV21.kt new file mode 100644 index 0000000..aa0e8c6 --- /dev/null +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/ContextClassLoaderHolderV21.kt @@ -0,0 +1,37 @@ +package org.unbrokendome.gradle.plugins.xjc.work.common + +import com.sun.tools.xjc.Options +import java.io.Closeable +import java.io.IOException +import java.net.URLClassLoader + +class ContextClassLoaderHolderV21 : IContextClassLoaderHolder { + private var contextClassLoader: ClassLoader? = null + + override fun setup(options: Options) { + // Set up the classloader containing the plugin classpath. This should happen before any call + // to parseArgument() or parseArguments() because it might trigger the resolution of plugins + // (which are then cached) + contextClassLoader = Thread.currentThread().contextClassLoader + var userClassLoader = contextClassLoader + if(!options.classpaths.isEmpty()) + userClassLoader = URLClassLoader(options.classpaths.toTypedArray(), contextClassLoader); + //var userClassLoader = options.getUserClassLoader(contextClassLoader) + Thread.currentThread().contextClassLoader = userClassLoader + } + + override fun restore() { + if(contextClassLoader != null) { + val userClassLoader = Thread.currentThread().contextClassLoader + Thread.currentThread().contextClassLoader = contextClassLoader + if(userClassLoader != contextClassLoader && userClassLoader is Closeable) { + try { + userClassLoader.close() + } catch(_: IOException) { + } + } + contextClassLoader = null + } + } + +} diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/OptionsAccessorV21.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/OptionsAccessorV21.kt new file mode 100644 index 0000000..d432457 --- /dev/null +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/OptionsAccessorV21.kt @@ -0,0 +1,18 @@ +package org.unbrokendome.gradle.plugins.xjc.work.common + +import com.sun.tools.xjc.Options + +// XJC Options v2.1 +class OptionsAccessorV21(options: Options) : IOptionsAccessor { + + private val options = options + + override fun hasEncoding() = false + + override fun getEncoding(): String? = null + + override fun setEncoding(encoding: String?) { + // NOOP + } + +} From b0c1b8c54bb32db816df604bee56bfad317dbce5 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 15:36:15 +0000 Subject: [PATCH 044/115] MavenUriResolver: improve hidden diagnostic --- .../gradle/plugins/xjc/resolver/MavenUriResolver.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt index 8e44658..a83ff87 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt @@ -45,6 +45,11 @@ class MavenUriResolver( val path = dependency.path return if (path != null) { + if(logger.isDebugEnabled) { // This is useful visibility for users + matchingArtifacts.forEach { + logger.debug("MavenUriResolver matchingArtifacts={} for {}", it, dependency) + } + } val classLoader = URLClassLoader( matchingArtifacts.map { it.file.toURI().toURL() }.toList().toTypedArray() ) From 1ff43dbf53b3e70975c4b03a2bbc64e7b1658dc9 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 15:38:50 +0000 Subject: [PATCH 045/115] MavenUriResolver: improve hidden diagnostic part2 --- .../gradle/plugins/xjc/resolver/MavenUriResolver.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt index a83ff87..7e6c79b 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/MavenUriResolver.kt @@ -55,6 +55,14 @@ class MavenUriResolver( ) val resourceName = path.removePrefix("/") classLoader.use { + + val resList = classLoader.getResources(resourceName).toList() + if(resList.size > 1) { + for((index,arti) in artifacts.withIndex()) { + logger.warn("MavenUriResolver multiple matching resources found[{}]: {}", index, arti) + } + } + classLoader.getResource(resourceName)?.toURI() ?: throw IllegalArgumentException( "Could not resolve resource \"$resourceName\" from classpath: ${classLoader.urLs.toList()}" From 82b09fc50199d78aff050fc0fd92aa5e1ca21c02 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 15:41:58 +0000 Subject: [PATCH 046/115] Added: .github/dependabot.yml --- .github/dependabot.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..39bf6aa --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,18 @@ +version: 2 +registries: + gradle-plugin-portal: + type: maven-repository + url: https://plugins.gradle.org/m2 + username: dummy # Required by dependabot + password: dummy # Required by dependabot +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "gradle" + directory: "/" + registries: + - gradle-plugin-portal + schedule: + interval: "weekly" From deb45d81922fdf212a25c6e216a181ca93022102 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 15:49:37 +0000 Subject: [PATCH 047/115] Added samples/xjc-version-2_1-legacy + IT --- .../xjc-version-2_1-legacy/build.gradle | 20 ++++++++++++++++++ .../xjc-version-2_1-legacy/settings.gradle | 8 +++++++ .../src/main/schema/books.xsd | 21 +++++++++++++++++++ .../xjc-version-2_1-legacy/build.gradle.kts | 20 ++++++++++++++++++ .../settings.gradle.kts | 8 +++++++ .../src/main/schema/books.xsd | 21 +++++++++++++++++++ .../xjc/XjcVersion21LegacyIntegrationTest.kt | 19 +++++++++++++++++ 7 files changed, 117 insertions(+) create mode 100644 samples/groovy-dsl/xjc-version-2_1-legacy/build.gradle create mode 100644 samples/groovy-dsl/xjc-version-2_1-legacy/settings.gradle create mode 100644 samples/groovy-dsl/xjc-version-2_1-legacy/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-version-2_1-legacy/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-2_1-legacy/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-2_1-legacy/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion21LegacyIntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-version-2_1-legacy/build.gradle b/samples/groovy-dsl/xjc-version-2_1-legacy/build.gradle new file mode 100644 index 0000000..a2875d1 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-2_1-legacy/build.gradle @@ -0,0 +1,20 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '2.1' +} + + +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively + implementation 'javax.xml.bind:jaxb-api:2.1' +} diff --git a/samples/groovy-dsl/xjc-version-2_1-legacy/settings.gradle b/samples/groovy-dsl/xjc-version-2_1-legacy/settings.gradle new file mode 100644 index 0000000..14e36ab --- /dev/null +++ b/samples/groovy-dsl/xjc-version-2_1-legacy/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-version-2_1-legacy' diff --git a/samples/groovy-dsl/xjc-version-2_1-legacy/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-version-2_1-legacy/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-2_1-legacy/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-version-2_1-legacy/build.gradle.kts b/samples/kotlin-dsl/xjc-version-2_1-legacy/build.gradle.kts new file mode 100644 index 0000000..b8e2063 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-2_1-legacy/build.gradle.kts @@ -0,0 +1,20 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("2.1") +} + + +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively + implementation("javax.xml.bind:jaxb-api:2.1") +} diff --git a/samples/kotlin-dsl/xjc-version-2_1-legacy/settings.gradle.kts b/samples/kotlin-dsl/xjc-version-2_1-legacy/settings.gradle.kts new file mode 100644 index 0000000..ee10317 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-2_1-legacy/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-version-2_1-legacy" diff --git a/samples/kotlin-dsl/xjc-version-2_1-legacy/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-version-2_1-legacy/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-2_1-legacy/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion21LegacyIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion21LegacyIntegrationTest.kt new file mode 100644 index 0000000..080371e --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion21LegacyIntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-version-2_1-legacy") +class XjcVersion21LegacyIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-version-2_1-legacy") + } +} From 2d9891dc46c0c50a4e014ca2337c30411dc1f149 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 17:42:04 +0000 Subject: [PATCH 048/115] adoc: @Generated example --- docs/using-xjc-plugins.adoc | 82 +++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/docs/using-xjc-plugins.adoc b/docs/using-xjc-plugins.adoc index 4f434a5..72302d9 100644 --- a/docs/using-xjc-plugins.adoc +++ b/docs/using-xjc-plugins.adoc @@ -108,3 +108,85 @@ xjc { } ---- ==== + + +== @Generated annotation support + +XJC can provide support for standard plugin activated with `-mark-generated` to emit additional Java annotations +in the generated source. + +The implementation of XJC will impact exactly which package the @Generated is from, with the 2 options being `javax.annotation.Generated` and `jakarta.annotation.Generated`. In order to allow +Gradle JavaC to compile the output code and for the project to export the correct transative dependency +you need to include the appropiate annotation-api dependency. + +The configuration for `javax.annotation.Generated` might look like this: + +[source,groovy,role="primary"] +.Groovy +---- +xjc { + // Ensure we are using a javax.annotation.Generated era version + xjcVersion = '2.3' // maybe this configuration item could be omitted +} +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitive dependency to the project + implementation 'javax.annotation:javax-annotation-api:1.3.2' +} +sourceSets { + main { + xjcExtraArgs.addAll '-mark-generated' + } +} +---- + +[source,kotlin,role="secondary"] +.Kotlin +---- +xjc { + // Ensure we are using a javax.annotation.Generated era version + xjcVersion.set("2.3") // maybe this configuration item could be omitted +} +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitive dependency to the project + implementation("javax.annotation:javax-annotation-api:1.3.2") +} +sourceSets.named("main") { + xjcExtraArgs.addAll("-mark-generated") +} +---- + +The configuration for `jakarta.annotation.Generated` might look like this: + +[source,groovy,role="primary"] +.Groovy +---- +xjc { + // Ensure we are using a javax.annotation.Generated era version + xjcVersion = '3.0' // maybe this configuration item could be omitted +} +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitive dependency to the project + implementation 'jakarta.annotation:javax-annotation-api:1.3.5' +} +sourceSets { + main { + xjcExtraArgs.addAll '-mark-generated' + } +} +---- + +[source,kotlin,role="secondary"] +.Kotlin +---- +xjc { + // Ensure we are using a javax.annotation.Generated era version + xjcVersion.set("3.0") // maybe this configuration item could be omitted +} +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitive dependency to the project + implementation("jakarta.annotation:javax-annotation-api:1.3.5") +} +sourceSets.named("main") { + xjcExtraArgs.addAll("-mark-generated") +} +---- From 4f46053e68f0247532fa77e8a85397ca0f6de4a4 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 17:42:45 +0000 Subject: [PATCH 049/115] adoc: Jakarta era documentation information --- docs/controlling-xjc-behavior.adoc | 96 ++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/docs/controlling-xjc-behavior.adoc b/docs/controlling-xjc-behavior.adoc index 17ba477..3533ba6 100644 --- a/docs/controlling-xjc-behavior.adoc +++ b/docs/controlling-xjc-behavior.adoc @@ -4,6 +4,8 @@ The link:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/xjc.html[com a number of arguments to fine-tune the code generation. The XJC Gradle plugin supports many of these as properties which can be set in the build script. +The link:https://eclipse-ee4j.github.io/jaxb-ri/3.0.0/docs/ch04.html#tools-xjc[Jakarta command line version] of XJC documentation. + The following properties are available in the project-scoped `xjc` block, and apply to all XJC invocations (for all source sets): @@ -73,6 +75,100 @@ The following property is available for each source set: | (not set) |=== +== JAXB Target Specification Version compatibility + +The version of JAXB and the version of XJC are not necessarily consistent. The JAXB specification +version follows the relevant JSR process while the XJC tool is updated in its maintenance lifecycle. + +The XJC -target option which is configured via `targetVersion` is the mechanism to use to override +the default. The following table is only known for the `com.sun.xml.bind` implementation of XJC. + +TIP: Some XJC tool versions may downgrade the default JAXB target (to 2.1) if they do not find a + 2.2+ version of `javax.xml.bind:jaxb-api` on the XJC tool classpath. For example if the `jaxb-api` + dependency is missing from the classpath because your configuration overrides plugin defaults. + +|=== +| XJC Tool Version | Default JAXB Spec Version | JAXB -target support | Package + +| 2.1 to 2.1.7 +| 2.1 +| 2.1, 2.0 +| javax + +| 2.1.8+ +| 2.2 +| 2.2, 2.1, 2.0 +| javax + +| 2.2 +| 2.2 +| 2.2, 2.1, 2.0 +| javax + +| 2.3 +| 2.2 +| 2.2, 2.1, 2.0 +| javax + +| 2.4 +| 2.2 +| 2.2, 2.1, 2.0 +| javax + +| 3.0 +| 3.0 +| 3.0, 2.3 +| jakarta + +| 4.0 +| 3.0 +| 3.0, 2.3 +| jakarta + +|=== + +== JAXB Target Package compatibility + +This table maybe a useful reference. + +TIP: When expecting `jarkarta` package output, ensure to remove `javax.xml.bind:bind-api` from the XJC classpath. + +|=== +| XJC Tool Version | Default JAXB package | Supported package + +| 2.1 to 2.1.7 +| javax +| javax + +| 2.1.8+ +| javax +| javax + +| 2.2 +| javax +| javax + +| 2.3 +| javax +| javax + +| 2.4 +| javax +| javax + +| 3.0 +| jakarta +| jakarta (with -target 3.0) + + javax (with -target 2.3) + + +| 4.0 +| jakarta +| jakarta (with -target 3.0) + + javax (with -target 2.3) + +|=== + == Configuring XJC with Gradle Project Properties From 945930887a981a5d3fa59178aa9aed5ffc4f6769 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 17:44:16 +0000 Subject: [PATCH 050/115] adoc: -target clarify meaning The latest version of what relative to what ? --- docs/controlling-xjc-behavior.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/controlling-xjc-behavior.adoc b/docs/controlling-xjc-behavior.adoc index 3533ba6..23437e9 100644 --- a/docs/controlling-xjc-behavior.adoc +++ b/docs/controlling-xjc-behavior.adoc @@ -15,7 +15,7 @@ The following properties are available in the project-scoped `xjc` block, and ap | `targetVersion` (`String`) | The version of the JAXB specification to target. | `-target` -| (use latest version) +| (use latest version supported by the XJC tool version in use) | `docLocale` (`String`) | The locale to be used when running XJC. This may influence the language of documentation comments in XJC-generated files. From e40362e5a38a6b99684406442b5a91a52033dc10 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 10 Mar 2023 17:45:24 +0000 Subject: [PATCH 051/115] adoc: quickstart added repositories{} Clarification mainly due to the plugin not being in Maven Central. --- docs/quickstart.adoc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/quickstart.adoc b/docs/quickstart.adoc index 39f95ca..ad3792c 100644 --- a/docs/quickstart.adoc +++ b/docs/quickstart.adoc @@ -18,6 +18,24 @@ plugins { } ---- +It may be necessary to include a repository entry to allow Gradle to locate the plugin to active. + +[source,groovy,role="primary",subs="+attributes"] +.Groovy +---- +repositories { + gradlePluginPortal() +} +---- + +[source,kotlin,role="secondary",subs="+attributes"] +.Kotlin +---- +repositories { + gradlePluginPortal() +} +---- + Put your XJC source files into `src/main/schema`. This includes XML schema files (extension `.xsd`), binding customizations (extension `.xjb`) and catalog files (extension `.cat`). From a3878a8cabd8bae8fb1967ee9942cf37c9ac45bb Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 14:48:32 +0000 Subject: [PATCH 052/115] adoc: catalogs tips for diagnostic --- docs/working-with-catalogs.adoc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/working-with-catalogs.adoc b/docs/working-with-catalogs.adoc index e2f206b..5744ae6 100644 --- a/docs/working-with-catalogs.adoc +++ b/docs/working-with-catalogs.adoc @@ -141,3 +141,13 @@ declared in the `xjcCatalogResolution` configuration (or inherited through other You can think of the `maven:` scheme as an extension to `classpath:` with a filter for the JARs to be searched for resources. (In fact, `classpath:` is defined as an alias for `maven::!`.) + + +=== Catalog resolution diagnostic + +.Suggestions: + * --info (dump XJC configuration) + * --debug (see catalog resolution working) + * -Dxml.catalog.verbosity=999 for info at + https://xerces.apache.org/xml-commons/components/apidocs/resolver/org/apache/xml/resolver/CatalogManager.html + * Lookup documentation around Apache Xerces CatalogManager.properties From d57bba9be3fbf950cba9b20e450458533ab8141c Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 14:53:04 +0000 Subject: [PATCH 053/115] adoc: XJC tool runtime Java compatibility table --- docs/controlling-xjc-behavior.adoc | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/docs/controlling-xjc-behavior.adoc b/docs/controlling-xjc-behavior.adoc index 23437e9..eca29a5 100644 --- a/docs/controlling-xjc-behavior.adoc +++ b/docs/controlling-xjc-behavior.adoc @@ -170,6 +170,53 @@ TIP: When expecting `jarkarta` package output, ensure to remove `javax.xml.bind: |=== +== XJC Tool runtime Java compatibility + +This table maybe a useful reference, this only concerns the standard `com.sun.xml.bind` +implementation and the contents of the jaxb-xjc.jar itself. + +Inaccuracies may exist in this table, but it demonstrates some possible unexpected +inconsistencies to look into when working with some versions of the XJC tool. + + +|=== +| XJC Tool Version | Java Version + +| 2.1 +| Java SE 5 + +| 2.2 to 2.2.5 +| Java SE 5 + +| 2.2.6+ +| Java SE 6 + +| 2.3.0-b170127.1453 and 2.3.0.1 +| Java SE 7 (JDK6+ com/sun/xml/dtdparser/*.class, no JDK9+ module-info.class provided but JDK9+ Options.class) + +| 2.3.0 +| Java SE 7 (JDK6+ com/sun/xml/dtdparser/*.class, no JDK9+ module-info.class provided but XJC2Task/CatalogUtil still provided) + +| 2.3.1 +| Java SE 7 (JDK9+ module-info.class provided) + +| 2.3.2 +| Java SE 7 (removed JDK9+ module-info.class but XJC2Task/CatalogUtil still provided) + +| 2.3.3+ +| Java SE 8 (JDK9+ module-info.class provided) + +| 2.4.x +| Java SE 7 (JDK8+ com/sun/xml/dtdparser/*.class, JDK9+ module-info.class provided) + +| 3.x +| Java SE 8 (JDK9+ module-info.class provided) + +| 4.x +| Java SE 11 + +|=== + == Configuring XJC with Gradle Project Properties As an alternative to configuring the above settings in your build script, you can use Gradle project From 5555786cf7e454b56badac909cc429ec630457d6 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 15:02:22 +0000 Subject: [PATCH 054/115] Support addClassNameReplacer() for -target 2.3 --- .../common/AbstractXjcGeneratorWorkAction.kt | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt index a7967a5..672a720 100644 --- a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt @@ -16,6 +16,7 @@ import org.unbrokendome.gradle.plugins.xjc.resolver.ExtensibleCatalogResolver import org.unbrokendome.gradle.plugins.xjc.resolver.MavenUriResolver import org.unbrokendome.gradle.plugins.xjc.resolver.ReflectionHelper import org.xml.sax.InputSource +import java.lang.reflect.InvocationTargetException import java.net.URI import java.net.URISyntaxException import java.util.Locale @@ -90,7 +91,11 @@ abstract class AbstractXjcGeneratorWorkAction : WorkAction= specVersion30.ordinal) + return // targeting 3.0 or newer, nothing to do here + + // if target version is < 3.0 + + // if implementation is: com.sun.xml.bind.jaxb-xjc or has class ? + // we don't really check this, this allows the feature to work on 3rd party XJC + // implementations where the addClassNameReplacer(String,String) method is available + // if implementation version is >= 3.0 or simply has the method ? + // the method was only introduced since 3.0 so it doesn't matter if we can't + // find it on older versions. + // if a new version of XJC 2.x were to came along with the method available in the + // future adding these replacement still doesn't break anything while targeting < 3.0 + val JAKARTA = "jakarta.xml.bind" // Regex.escape() breaks it + val JAVAX = "javax.xml.bind" + val JAXB_CORE = "org.glassfish.jaxb.core" // Regex.escape() breaks it + val BIND = "com.sun.xml.bind" + + // The JCodeModel#addClassNameReplacer(String c1,String c2) method is documented + // as taking a string Regex in c1. You would expect to quote-meta on the + // full-stop characters as the correct c1 value. But it also uses the c1 + // value in a String#startsWith(c1) check before doing a String#replaceAll(c1, c2). + + reflectiveInvoke_JCodeModel_addClassNameReplacer(jCodeModel, JAKARTA, JAVAX) + reflectiveInvoke_JCodeModel_addClassNameReplacer(jCodeModel, JAXB_CORE, BIND) + } protected open fun setupBuildOptions() = Options().apply { parameters.pluginClasspath.forEach { classpathEntry -> From 002d3c38c9aed60e8bbbbc3afd7bfee8000147ba Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 15:07:21 +0000 Subject: [PATCH 055/115] Added: samples/xjc-tool-3_0-target-2_3/** + IT --- .../xjc-tool-3_0-target-2_3/build.gradle | 29 ++++++++++++++++ .../xjc-tool-3_0-target-2_3/settings.gradle | 8 +++++ .../src/main/schema/books.xsd | 21 ++++++++++++ .../xjc-tool-3_0-target-2_3/build.gradle.kts | 29 ++++++++++++++++ .../settings.gradle.kts | 8 +++++ .../src/main/schema/books.xsd | 21 ++++++++++++ .../xjc/XjcTool30Target23IntegrationTest.kt | 33 +++++++++++++++++++ .../xjc/testutil/assertions/ReadTextFile.kt | 15 +++++++++ 8 files changed, 164 insertions(+) create mode 100644 samples/groovy-dsl/xjc-tool-3_0-target-2_3/build.gradle create mode 100644 samples/groovy-dsl/xjc-tool-3_0-target-2_3/settings.gradle create mode 100644 samples/groovy-dsl/xjc-tool-3_0-target-2_3/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-tool-3_0-target-2_3/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-3_0-target-2_3/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-tool-3_0-target-2_3/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30Target23IntegrationTest.kt create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/ReadTextFile.kt diff --git a/samples/groovy-dsl/xjc-tool-3_0-target-2_3/build.gradle b/samples/groovy-dsl/xjc-tool-3_0-target-2_3/build.gradle new file mode 100644 index 0000000..aa729a5 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-3_0-target-2_3/build.gradle @@ -0,0 +1,29 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '3.0' + targetVersion = '2.3' +} + + +dependencies { + // Yes this looks wrong, based on XJC command line usage: + // XJC 3.x/4.x itself does not need javax.xml.bind on its classpath, + // it needs jakarta.xml.bind for generation. + // JavaC does need to see javax.xml.bind as that is what is in the generated *.java + + implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359' + + xjcTool 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1' + + xjcTool 'com.sun.xml.bind:jaxb-xjc:3.0.2' +} diff --git a/samples/groovy-dsl/xjc-tool-3_0-target-2_3/settings.gradle b/samples/groovy-dsl/xjc-tool-3_0-target-2_3/settings.gradle new file mode 100644 index 0000000..7dc033f --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-3_0-target-2_3/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-tool-3_0-target-2_3' diff --git a/samples/groovy-dsl/xjc-tool-3_0-target-2_3/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-tool-3_0-target-2_3/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-tool-3_0-target-2_3/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/build.gradle.kts new file mode 100644 index 0000000..1a3a1f3 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/build.gradle.kts @@ -0,0 +1,29 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("3.0") + targetVersion.set("2.3") +} + + +dependencies { + // Yes this looks wrong, based on XJC command line usage: + // XJC 3.x/4.x itself does not need javax.xml.bind on its classpath, + // it needs jakarta.xml.bind for generation. + // JavaC does need to see javax.xml.bind as that is what is in the generated *.java + + implementation("javax.xml.bind:jaxb-api:2.4.0-b180830.0359") + + xjcTool("jakarta.xml.bind:jakarta.xml.bind-api:3.0.1") + + xjcTool("com.sun.xml.bind:jaxb-xjc:3.0.2") +} diff --git a/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/settings.gradle.kts b/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/settings.gradle.kts new file mode 100644 index 0000000..5b38681 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-tool-3_0-target-2_3" diff --git a/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30Target23IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30Target23IntegrationTest.kt new file mode 100644 index 0000000..c3b7e5b --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30Target23IntegrationTest.kt @@ -0,0 +1,33 @@ +package org.unbrokendome.gradle.plugins.xjc + +import assertk.assertThat +import assertk.assertions.contains +import assertk.assertions.doesNotContain +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.resolve +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.withReadTextFile +import java.io.File + + +@UseSampleProject("xjc-tool-3_0-target-2_3") +class XjcTool30Target23IntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + val projectName = "xjc-tool-3_0-target-2_3" + + super.test(runner, projectDir, projectName) + + assertThat(projectDir, "projectDir") + .resolve("build/generated/sources/xjc/java/main/org/unbroken_dome/gradle_xjc_plugin/samples/books/ObjectFactory.java") + .withReadTextFile { + contains("javax.xml.bind.annotation.XmlRegistry") + doesNotContain("jakarta") + } + } +} diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/ReadTextFile.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/ReadTextFile.kt new file mode 100644 index 0000000..dcf99f8 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/ReadTextFile.kt @@ -0,0 +1,15 @@ +package org.unbrokendome.gradle.plugins.xjc.testutil.assertions + +import assertk.Assert +import assertk.all +import assertk.assertions.isFile +import java.io.File + + +fun Assert.withReadTextFile(block: Assert.() -> Unit) { + isFile() + given { actual -> + val text = actual.readText(Charsets.UTF_8) + assertThat(text, "readText:$name").all(block) + } +} From 6381b87be024f7c6f9ef78f04c18efb4a098c69b Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 15:09:16 +0000 Subject: [PATCH 056/115] Update: samples/xjc-tool-3_0 IT with package namespace check --- .../plugins/xjc/XjcTool30IntegrationTest.kt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30IntegrationTest.kt index 121732d..572a239 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30IntegrationTest.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcTool30IntegrationTest.kt @@ -1,10 +1,15 @@ package org.unbrokendome.gradle.plugins.xjc +import assertk.assertThat +import assertk.assertions.contains +import assertk.assertions.doesNotContain import org.gradle.testkit.runner.GradleRunner import org.junit.platform.commons.annotation.Testable import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.resolve +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.withReadTextFile import java.io.File @@ -14,6 +19,16 @@ class XjcTool30IntegrationTest : AbstractBasicIntegrationTest() { @TestEachDslFlavor @Testable fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { - super.test(runner, projectDir, "xjc-tool-3_0") + val projectName = "xjc-tool-3_0" + + super.test(runner, projectDir, projectName) + + assertThat(projectDir, "projectDir") + .resolve("build/generated/sources/xjc/java/main/org/unbroken_dome/gradle_xjc_plugin/samples/books/ObjectFactory.java") + .withReadTextFile { + contains("jakarta.xml.bind.annotation.XmlRegistry") + doesNotContain("javax.xml.bind") + } + } } From e9379ce42888166c3a2fc85b9c3d4a197114c5ef Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 15:10:55 +0000 Subject: [PATCH 057/115] Added: samples/xjc-version-3_0-target-2_3/** + IT --- .../xjc-version-3_0-target-2_3/build.gradle | 21 ++++++++++++ .../settings.gradle | 8 +++++ .../src/main/schema/books.xsd | 21 ++++++++++++ .../build.gradle.kts | 21 ++++++++++++ .../settings.gradle.kts | 8 +++++ .../src/main/schema/books.xsd | 21 ++++++++++++ .../XjcVersion30Target23IntegrationTest.kt | 33 +++++++++++++++++++ 7 files changed, 133 insertions(+) create mode 100644 samples/groovy-dsl/xjc-version-3_0-target-2_3/build.gradle create mode 100644 samples/groovy-dsl/xjc-version-3_0-target-2_3/settings.gradle create mode 100644 samples/groovy-dsl/xjc-version-3_0-target-2_3/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-version-3_0-target-2_3/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-3_0-target-2_3/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-3_0-target-2_3/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion30Target23IntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-version-3_0-target-2_3/build.gradle b/samples/groovy-dsl/xjc-version-3_0-target-2_3/build.gradle new file mode 100644 index 0000000..dc8f50e --- /dev/null +++ b/samples/groovy-dsl/xjc-version-3_0-target-2_3/build.gradle @@ -0,0 +1,21 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion = '3.0' + targetVersion = '2.3' +} + + +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively + implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359' +} diff --git a/samples/groovy-dsl/xjc-version-3_0-target-2_3/settings.gradle b/samples/groovy-dsl/xjc-version-3_0-target-2_3/settings.gradle new file mode 100644 index 0000000..e59da91 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-3_0-target-2_3/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-version-3_0-target-2_3' diff --git a/samples/groovy-dsl/xjc-version-3_0-target-2_3/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-version-3_0-target-2_3/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-3_0-target-2_3/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-version-3_0-target-2_3/build.gradle.kts b/samples/kotlin-dsl/xjc-version-3_0-target-2_3/build.gradle.kts new file mode 100644 index 0000000..aecd2fd --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-3_0-target-2_3/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + xjcVersion.set("3.0") + targetVersion.set("2.3") +} + + +dependencies { + // This is still needed for Gradle to compile the generated Java and add transitively + implementation("javax.xml.bind:jaxb-api:2.4.0-b180830.0359") +} diff --git a/samples/kotlin-dsl/xjc-version-3_0-target-2_3/settings.gradle.kts b/samples/kotlin-dsl/xjc-version-3_0-target-2_3/settings.gradle.kts new file mode 100644 index 0000000..fa0e64b --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-3_0-target-2_3/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-version-3_0-target-2_3" diff --git a/samples/kotlin-dsl/xjc-version-3_0-target-2_3/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-version-3_0-target-2_3/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-3_0-target-2_3/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion30Target23IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion30Target23IntegrationTest.kt new file mode 100644 index 0000000..69ea408 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion30Target23IntegrationTest.kt @@ -0,0 +1,33 @@ +package org.unbrokendome.gradle.plugins.xjc + +import assertk.assertThat +import assertk.assertions.contains +import assertk.assertions.doesNotContain +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.resolve +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.withReadTextFile +import java.io.File + + +@UseSampleProject("xjc-version-3_0-target-2_3") +class XjcVersion30Target23IntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + val projectName = "xjc-version-3_0-target-2_3" + + super.test(runner, projectDir, projectName) + + assertThat(projectDir, "projectDir") + .resolve("build/generated/sources/xjc/java/main/org/unbroken_dome/gradle_xjc_plugin/samples/books/ObjectFactory.java") + .withReadTextFile { + contains("javax.xml.bind.annotation.XmlRegistry") + doesNotContain("jakarta") + } + } +} From a4d430cb709f1febb5d47511fde60e148c0331fb Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 15:15:32 +0000 Subject: [PATCH 058/115] Update: samples/xjc-version-3_0 IT with package namespace check --- .../plugins/xjc/XjcVersion30IntegrationTest.kt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion30IntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion30IntegrationTest.kt index 79e0ffa..8043f81 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion30IntegrationTest.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersion30IntegrationTest.kt @@ -1,10 +1,15 @@ package org.unbrokendome.gradle.plugins.xjc +import assertk.assertThat +import assertk.assertions.contains +import assertk.assertions.doesNotContain import org.gradle.testkit.runner.GradleRunner import org.junit.platform.commons.annotation.Testable import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.resolve +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.withReadTextFile import java.io.File @@ -14,6 +19,16 @@ class XjcVersion30IntegrationTest : AbstractBasicIntegrationTest() { @TestEachDslFlavor @Testable fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { - super.test(runner, projectDir, "xjc-version-3_0") + val projectName = "xjc-version-3_0" + + super.test(runner, projectDir, projectName) + + assertThat(projectDir, "projectDir") + .resolve("build/generated/sources/xjc/java/main/org/unbroken_dome/gradle_xjc_plugin/samples/books/ObjectFactory.java") + .withReadTextFile { + contains("jakarta.xml.bind.annotation.XmlRegistry") + doesNotContain("javax.xml.bind") + } + } } From 9f8366bbef3bb7ddc45640b723ef0a22db36ad9a Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 15:23:51 +0000 Subject: [PATCH 059/115] Added: samples/xjc-version-extensions/** + IT --- .../xjc-version-extensions/build.gradle | 28 +++++++++ .../xjc-version-extensions/settings.gradle | 8 +++ .../src/main/schema/books.xjb | 28 +++++++++ .../src/main/schema/books.xsd | 23 +++++++ .../xjc-version-extensions/build.gradle.kts | 28 +++++++++ .../settings.gradle.kts | 8 +++ .../src/main/schema/books.xjb | 28 +++++++++ .../src/main/schema/books.xsd | 21 +++++++ .../XjcVersionExtensionsIntegrationTest.kt | 63 +++++++++++++++++++ 9 files changed, 235 insertions(+) create mode 100644 samples/groovy-dsl/xjc-version-extensions/build.gradle create mode 100644 samples/groovy-dsl/xjc-version-extensions/settings.gradle create mode 100644 samples/groovy-dsl/xjc-version-extensions/src/main/schema/books.xjb create mode 100644 samples/groovy-dsl/xjc-version-extensions/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-version-extensions/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-extensions/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-extensions/src/main/schema/books.xjb create mode 100644 samples/kotlin-dsl/xjc-version-extensions/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtensionsIntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-version-extensions/build.gradle b/samples/groovy-dsl/xjc-version-extensions/build.gradle new file mode 100644 index 0000000..6b54952 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-extensions/build.gradle @@ -0,0 +1,28 @@ +import org.gradle.util.VersionNumber + +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + // -episode: is managed by gradle-xjc-plugin already + extraArgs.addAll '-Xpropertyaccessors', '-mark-generated', '-Xlocator', '-Xsync-methods', '-Xinject-code' +} + +dependencies { + // 2.3 is the default xjcVersion + implementation 'javax.xml.bind:jaxb-api:2.3.1' + + // -mark-generated: means you need to add dependency: + implementation 'javax.annotation:javax.annotation-api:1.3.2' + + // -Xlocator: means you need to add dependency: + implementation 'com.sun.xml.bind:jaxb-core:2.3.0.1' +} diff --git a/samples/groovy-dsl/xjc-version-extensions/settings.gradle b/samples/groovy-dsl/xjc-version-extensions/settings.gradle new file mode 100644 index 0000000..3d1442e --- /dev/null +++ b/samples/groovy-dsl/xjc-version-extensions/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-version-extensions' diff --git a/samples/groovy-dsl/xjc-version-extensions/src/main/schema/books.xjb b/samples/groovy-dsl/xjc-version-extensions/src/main/schema/books.xjb new file mode 100644 index 0000000..b059e81 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-extensions/src/main/schema/books.xjb @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + diff --git a/samples/groovy-dsl/xjc-version-extensions/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-version-extensions/src/main/schema/books.xsd new file mode 100644 index 0000000..9c3ee13 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-extensions/src/main/schema/books.xsd @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-version-extensions/build.gradle.kts b/samples/kotlin-dsl/xjc-version-extensions/build.gradle.kts new file mode 100644 index 0000000..ff92bcd --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-extensions/build.gradle.kts @@ -0,0 +1,28 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + + +xjc { + // -episode: is managed by gradle-xjc-plugin already + extraArgs.addAll("-Xpropertyaccessors", "-mark-generated", "-Xlocator", "-Xsync-methods", "-Xinject-code") +} + + +dependencies { + // 2.3 is the default xjcVersion + implementation("javax.xml.bind:jaxb-api:2.3.1") + + // -mark-generated: means you need to add dependency: + implementation("javax.annotation:javax.annotation-api:1.3.2") + + // -Xlocator: means you need to add dependency: + implementation("com.sun.xml.bind:jaxb-core:2.3.0.1") +} diff --git a/samples/kotlin-dsl/xjc-version-extensions/settings.gradle.kts b/samples/kotlin-dsl/xjc-version-extensions/settings.gradle.kts new file mode 100644 index 0000000..53b8f73 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-extensions/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-version-extensions" diff --git a/samples/kotlin-dsl/xjc-version-extensions/src/main/schema/books.xjb b/samples/kotlin-dsl/xjc-version-extensions/src/main/schema/books.xjb new file mode 100644 index 0000000..b059e81 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-extensions/src/main/schema/books.xjb @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-version-extensions/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-version-extensions/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-extensions/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtensionsIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtensionsIntegrationTest.kt new file mode 100644 index 0000000..0a30d0a --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtensionsIntegrationTest.kt @@ -0,0 +1,63 @@ +package org.unbrokendome.gradle.plugins.xjc + +import assertk.all +import assertk.assertThat +import assertk.assertions.contains +import assertk.assertions.doesNotContain +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.* +import org.unbrokendome.gradle.plugins.xjc.testutil.runGradle +import java.io.File + + +@UseSampleProject("xjc-version-extensions") +class XjcVersionExtensionsIntegrationTest { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + val projectName = "xjc-version-extensions" + + val buildResult = runner.runGradle("build") + + assertThat(buildResult).all { + task(":xjcGenerate").isSuccess() + task(":build").isSuccess() + } + + assertThat(projectDir, "projectDir") + .resolve("build/libs/$projectName.jar") + .withJarFile { + containsEntries( + "org/unbroken_dome/gradle_xjc_plugin/samples/books/code_injector/BookType.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/code_injector/BooksType.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/code_injector/ObjectFactory.class" + ) + } + + assertThat(projectDir, "projectDir") + .resolve("build/generated/sources/xjc/java/main/org/unbroken_dome/gradle_xjc_plugin/samples/books/code_injector/ObjectFactory.java") + .withReadTextFile { + contains("javax.xml.bind.annotation.XmlRegistry") + doesNotContain("jakarta") + contains("javax.annotation.Generated") + contains("@Generated(") + } + + assertThat(projectDir, "projectDir") + .resolve("build/generated/sources/xjc/java/main/org/unbroken_dome/gradle_xjc_plugin/samples/books/code_injector/BookType.java") + .withReadTextFile { + contains("javax.xml.bind.annotation.XmlType") + doesNotContain("jakarta") + contains("javax.annotation.Generated") + contains("@Generated(") + contains("com.sun.xml.bind.annotation.XmlLocation") + contains(" synchronized ") + contains(" injectedSystemCurrentTime") + } + } +} From bb8e5b929d2cc48fa339a2a5361743565905d35c Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 15:30:15 +0000 Subject: [PATCH 060/115] Added: samples/xjc-version-ext-mark-generated/** + IT --- .../build.gradle | 26 +++++++++++++++++++ .../settings.gradle | 8 ++++++ .../src/main/schema/books.xsd | 21 +++++++++++++++ .../build.gradle.kts | 26 +++++++++++++++++++ .../settings.gradle.kts | 8 ++++++ .../src/main/schema/books.xsd | 21 +++++++++++++++ ...cVersionExtMarkGeneratedIntegrationTest.kt | 19 ++++++++++++++ 7 files changed, 129 insertions(+) create mode 100644 samples/groovy-dsl/xjc-version-ext-mark-generated/build.gradle create mode 100644 samples/groovy-dsl/xjc-version-ext-mark-generated/settings.gradle create mode 100644 samples/groovy-dsl/xjc-version-ext-mark-generated/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-version-ext-mark-generated/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-ext-mark-generated/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-ext-mark-generated/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtMarkGeneratedIntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-version-ext-mark-generated/build.gradle b/samples/groovy-dsl/xjc-version-ext-mark-generated/build.gradle new file mode 100644 index 0000000..edf08e5 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-ext-mark-generated/build.gradle @@ -0,0 +1,26 @@ +import org.gradle.util.VersionNumber + +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + + +xjc { + // -Xann javax.annotation.Generated could be jakarta.annotation.Generated + // especially needed when xjcVersion = 3.0+ and targetVersion = 2.3 + extraArgs.addAll '-mark-generated', '-noDate', '-Xann', 'javax.annotation.Generated' +} + +dependencies { + // 2.3 is the default xjcVersion + implementation 'javax.xml.bind:jaxb-api:2.3.1' + + // -mark-generated: means you need to add dependency: + implementation 'javax.annotation:javax.annotation-api:1.3.2' +} diff --git a/samples/groovy-dsl/xjc-version-ext-mark-generated/settings.gradle b/samples/groovy-dsl/xjc-version-ext-mark-generated/settings.gradle new file mode 100644 index 0000000..c02beb6 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-ext-mark-generated/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-version-ext-mark-generated' diff --git a/samples/groovy-dsl/xjc-version-ext-mark-generated/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-version-ext-mark-generated/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-ext-mark-generated/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-version-ext-mark-generated/build.gradle.kts b/samples/kotlin-dsl/xjc-version-ext-mark-generated/build.gradle.kts new file mode 100644 index 0000000..4019d7d --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-ext-mark-generated/build.gradle.kts @@ -0,0 +1,26 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + + +xjc { + // -Xann javax.annotation.Generated could be jakarta.annotation.Generated + // especially needed when xjcVersion = 3.0+ and targetVersion = 2.3 + extraArgs.addAll("-mark-generated", "-noDate", "-Xann", "javax.annotation.Generated") +} + + +dependencies { + // 2.3 is the default xjcVersion + implementation("javax.xml.bind:jaxb-api:2.3.1") + + // -mark-generated: means you need to add dependency: + implementation("javax.annotation:javax.annotation-api:1.3.2") +} diff --git a/samples/kotlin-dsl/xjc-version-ext-mark-generated/settings.gradle.kts b/samples/kotlin-dsl/xjc-version-ext-mark-generated/settings.gradle.kts new file mode 100644 index 0000000..4e24bba --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-ext-mark-generated/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-version-ext-mark-generated" diff --git a/samples/kotlin-dsl/xjc-version-ext-mark-generated/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-version-ext-mark-generated/src/main/schema/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-ext-mark-generated/src/main/schema/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtMarkGeneratedIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtMarkGeneratedIntegrationTest.kt new file mode 100644 index 0000000..4206b62 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtMarkGeneratedIntegrationTest.kt @@ -0,0 +1,19 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import java.io.File + + +@UseSampleProject("xjc-version-ext-mark-generated") +class XjcVersionExtMarkGeneratedIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + super.test(runner, projectDir, "xjc-version-ext-mark-generated") + } +} From 46f7caf2cc285e8b3f08cc5a01a83cfa6eb373e6 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 17:15:10 +0000 Subject: [PATCH 061/115] README.adoc: github action badge --- README.adoc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.adoc b/README.adoc index d875bff..f2f1bea 100644 --- a/README.adoc +++ b/README.adoc @@ -5,6 +5,14 @@ ifdef::env-github[] :caution-caption: :fire: :warning-caption: :warning: endif::[] +:my-base-uri: https://github.com/dlmiles/gradle-xjc-plugin +:uri-build-status: https://github.com/dlmiles/gradle-xjc-plugin/actions/workflows/build.yml +:img-build-status: https://github.com/dlmiles/gradle-xjc-plugin/actions/workflows/build.yml/badge.svg + +ifdef::env-github[] +image:{img-build-status}[CI-Gradle-build,link={uri-build-status}] +#CI Targets: `Java 8` and `Java 11` with `Gradle 5.6` through `Gradle 8.0.2`# +endif::[] = Gradle XJC Plugin From 70270901ba5930d1017cb01162d88f1c57917922 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 17:15:10 +0000 Subject: [PATCH 062/115] build.yml: input.integrationTest ? --- .github/workflows/build.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2f71f48..9eb1b7b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,11 @@ name: CI-Gradle-build on: push: workflow_dispatch: + inputs: + GRADLE_TARGET_ENABLE_integrationTest: + description: 'Run with integrationTest ?' + default: false + type: boolean schedule: # * is a special character in YAML # setup monthly background build @@ -21,6 +26,10 @@ jobs: - name: Version run: | + if [ -z "${GRADLE_TARGET_ENABLE_integrationTest}" ] && [ -n "${{ github.event.schedule }}" ]; then + # force this on for schedule build + echo "GRADLE_TARGET_ENABLE_integrationTest=true" >> $GITHUB_ENV + fi target_plugin="org.unbroken-dome.xjc" target_group=$(grep "^group=" gradle.properties | cut -d'=' -f2-) target_artifact="gradle-xjc-plugin" @@ -57,7 +66,7 @@ jobs: run: ./gradlew check - name: Gradle - integrationTest - if: ${{ vars.GRADLE_TARGET_ENABLE_integrationTest == 'true' }} + if: ${{ vars.GRADLE_TARGET_ENABLE_integrationTest == 'true' || inputs.GRADLE_TARGET_ENABLE_integrationTest }} run: ./gradlew integrationTest - name: Gradle - publish From 4413426c0ae4fb9a0c2704b98a5dfb96489ea968 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 14 Mar 2023 17:15:10 +0000 Subject: [PATCH 063/115] build.yml: fail-fast: false --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9eb1b7b..9558aed 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,6 +19,7 @@ jobs: matrix: os: [ubuntu-latest] jvm: ['8', '11'] + fail-fast: false runs-on: ${{ matrix.os }} steps: - name: Checkout From 96654ede0edfc94bfd5b4742ea24d077a4f4c382 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 21 Mar 2023 16:58:11 +0000 Subject: [PATCH 064/115] build.yml: github-pages --- .github/workflows/build.yml | 173 +++++++++++++++++++++++++++++++++++- README.adoc | 54 ++++++++++- build.gradle.kts | 18 +++- 3 files changed, 238 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9558aed..78426f9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,7 +14,7 @@ on: - cron: '45 4 18 * *' jobs: - gradle: + build: strategy: matrix: os: [ubuntu-latest] @@ -29,6 +29,8 @@ jobs: run: | if [ -z "${GRADLE_TARGET_ENABLE_integrationTest}" ] && [ -n "${{ github.event.schedule }}" ]; then # force this on for schedule build + # "${{ github.event.schedule }}" == "45 4 18 * *" + # $GITHUB_EVENT_NAME == "schedule" echo "GRADLE_TARGET_ENABLE_integrationTest=true" >> $GITHUB_ENV fi target_plugin="org.unbroken-dome.xjc" @@ -70,6 +72,12 @@ jobs: if: ${{ vars.GRADLE_TARGET_ENABLE_integrationTest == 'true' || inputs.GRADLE_TARGET_ENABLE_integrationTest }} run: ./gradlew integrationTest + - name: Gradle - asciidoctor + run: ./gradlew asciidoctor + + - name: Gradle - dokka + run: ./gradlew dokka + - name: Gradle - publish run: ./gradlew publish @@ -85,6 +93,24 @@ jobs: find "dist" -type f -exec ls -ld {} \; du -s "dist" + mkdir -p build/gh-pages + cp -a build/reports/tests build/gh-pages/ + cp -a build/asciidoc/html5/* build/gh-pages/ + cp -a build/dokka build/gh-pages/ + + mkdir -p build/gh-pages/maven2 + cp -a build/repo/* build/gh-pages/maven2/ + + ls -lad build/gh-pages + du -s build/gh-pages + + - name: Upload - java${{ matrix.jvm }}-github-pages + uses: actions/upload-pages-artifact@main + with: + name: java${{ matrix.jvm }}-github-pages + path: build/gh-pages/ + retention-days: 1 + - name: Upload - perform uses: actions/upload-artifact@v3 if: ${{ matrix.os == 'ubuntu-latest' }} @@ -92,3 +118,148 @@ jobs: name: java${{ matrix.jvm }}-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts path: dist/repo/* if-no-files-found: error + + + gh-pages-prepare: + needs: build + + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Version + run: | + if [ -z "${GRADLE_TARGET_ENABLE_integrationTest}" ] && [ -n "${{ github.event.schedule }}" ]; then + # force this on for schedule build + # "${{ github.event.schedule }}" == "45 4 18 * *" + # $GITHUB_EVENT_NAME == "schedule" + echo "GRADLE_TARGET_ENABLE_integrationTest=true" >> $GITHUB_ENV + fi + target_plugin="org.unbroken-dome.xjc" + target_group=$(grep "^group=" gradle.properties | cut -d'=' -f2-) + target_artifact="gradle-xjc-plugin" + target_version=$(grep "^version=" gradle.properties | cut -d'=' -f2-) + + echo "target_plugin=$target_plugin" >> $GITHUB_ENV + echo "target_group=$target_group" >> $GITHUB_ENV + echo "target_artifact=$target_artifact" >> $GITHUB_ENV + echo "target_version=$target_version" >> $GITHUB_ENV + + - name: Download - java8-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts + uses: actions/download-artifact@v3 + with: + name: java8-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts + path: build/java8-artifacts/ + + - name: Download - java8-github-pages + uses: actions/download-artifact@v3 + with: + name: java8-github-pages + path: build/java8-github-pages-artifacts/ + + - name: Download - java11-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts + uses: actions/download-artifact@v3 + with: + name: java11-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts + path: build/java11-artifacts/ + + - name: Download - java11-github-pages + uses: actions/download-artifact@v3 + with: + name: java11-github-pages + path: build/java11-github-pages-artifacts/ + + - name: Shell + run: | + pwd + ls -la + find . -type f + ls -lR build + + echo "#### build/java8-github-pages-artifacts/artifact.tar:" + #[ ! -f "build/java8-github-pages-artifacts/artifact.tar" ] || tar -tvf "build/java8-github-pages-artifacts/artifact.tar" + mkdir -p build/java8-github-pages/ + tar -xvf build/java8-github-pages-artifacts/artifact.tar -C build/java8-github-pages/ + + echo "#### build/java11-github-pages-artifacts/artifact.tar:" + #[ ! -f "build/java11-github-pages-artifacts/artifact.tar" ] || tar -tvf "build/java11-github-pages-artifacts/artifact.tar" + mkdir -p build/java11-github-pages/ + tar -xvf build/java11-github-pages-artifacts/artifact.tar -C build/java11-github-pages/ + + mkdir -p build/gh-pages/ + + # build/gh-pages/artifacts + mkdir -p build/gh-pages/artifacts + tar -cf "build/gh-pages/artifacts/java8-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts.tar.gz" -C build/java8-artifacts/ . + pushd build/java8-artifacts + zip -q -r "../gh-pages/artifacts/java8-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts.zip" . + popd + tar -cf "build/gh-pages/artifacts/java11-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts.tar.gz" -C build/java11-artifacts/ . + pushd build/java11-artifacts + zip -q -r "../gh-pages/artifacts/java11-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts.zip" . + popd + + # build/gh-pages/index.html (asciidoctor) + # build/gh-pages/dokka/ + cp -av build/java8-github-pages/* build/gh-pages/ + + mkdir -p build/gh-pages/java8 + # build/gh-pages/java8/tests/ + cp -a build/java8-github-pages/tests build/gh-pages/java8/ + # build/gh-pages/java8/maven2/ + cp -a build/java8-github-pages/maven2 build/gh-pages/java8/ + touch build/gh-pages/java8/maven2/M2_Java8_Artifacts.txt + + mkdir -p build/gh-pages/java11 + # build/gh-pages/java11/tests/ + cp -a build/java11-github-pages/tests build/gh-pages/java11/ + # build/gh-pages/java11/maven2/ + cp -a build/java11-github-pages/maven2 build/gh-pages/java11/ + touch build/gh-pages/java11/maven2/M2_Java11_Artifacts.txt + + echo "#### DONE ####" + pwd + ls -la + find . -type f + ls -lR build + + - name: github-pages - artifacts/ Generate Directory Listings + uses: jayanta525/github-pages-directory-listing@19ee734e017b656528749434335f75a1efb931bc + with: + FOLDER: build/gh-pages/artifacts/ #directory to generate index + + - name: github-pages - java8/ Generate Directory Listings + uses: jayanta525/github-pages-directory-listing@19ee734e017b656528749434335f75a1efb931bc + with: + FOLDER: build/gh-pages/java8/ #directory to generate index + + - name: github-pages - java11/ Generate Directory Listings + uses: jayanta525/github-pages-directory-listing@19ee734e017b656528749434335f75a1efb931bc + with: + FOLDER: build/gh-pages/java11/ #directory to generate index + + - name: Upload - github-pages + uses: actions/upload-pages-artifact@main + with: + name: github-pages + path: build/gh-pages/ + retention-days: 90 + + + deploy: + needs: gh-pages-prepare + + permissions: + pages: write + id-token: write + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 diff --git a/README.adoc b/README.adoc index f2f1bea..03107cb 100644 --- a/README.adoc +++ b/README.adoc @@ -5,7 +5,10 @@ ifdef::env-github[] :caution-caption: :fire: :warning-caption: :warning: endif::[] -:my-base-uri: https://github.com/dlmiles/gradle-xjc-plugin +:github-pages-uri: https://dlmiles.github.io/gradle-xjc-plugin +:github-uri: https://github.com/dlmiles/gradle-xjc-plugin +:github-m2-uri: https://maven.pkg.github.com/dlmiles/gradle-xjc-plugin +:maven-groupId: io.github.dlmiles :uri-build-status: https://github.com/dlmiles/gradle-xjc-plugin/actions/workflows/build.yml :img-build-status: https://github.com/dlmiles/gradle-xjc-plugin/actions/workflows/build.yml/badge.svg @@ -29,15 +32,54 @@ Invokes the `xjc` binding compiler from a Gradle build. == Requirements +The Gradle plugin itself: + - Gradle 5.6 or higher - JDK 1.8 or higher (when running Gradle) +The XJC Tool requirements: + +- If using XJC Tool 4.x or later, the XJC Tool requires JDK 11 or higher while this + plugin only requires 1.8 or higher, earlier versions of XJC Tool are + compatible with JDK 1.8 +- Some specific XJC Tool versions may have been published with incorrect byte code + compatibility, resulting in those versions not running on the Java SE version they + intended to target +- See section link:{github-pages-uri}#_xjc_tool_runtime_java_compatibility[XJC Tool Runtime Java Compatibility] + == Quick Start Apply the `org.unbroken-dome.xjc` plugin to your Gradle build script and add an appropriate dependency on the JAXB API: +ifdef::env-github[] +[source,kotlin,subs="attributes+"] +.settings.gradle(.kts) +---- +pluginManagement { + // 3rd party releases and SNAPSHOTs + maven { + url "{github-pages-uri}/java8/maven2" + // url "{github-m2-uri}" + content { + // this repository *only* contains artifacts for specific groups + includeGroup "org.unbroken-dome.xjc" + includeGroup "org.unbroken-dome.gradle-plugins" +ifdef::env-github[] + + includeGroup "{maven-groupId}.xjc" + includeGroup "{maven-groupId}.gradle-plugins" +endif::[] + } + } + + // Official releases only + gradlePluginPortal() +} +---- + +endif::[] [source,kotlin] .build.gradle(.kts) ---- @@ -59,5 +101,11 @@ it the `main` Java compilation. == Further Documentation -* https://unbroken-dome.github.io/projects/gradle-xjc-plugin/[User Manual] -* https://unbroken-dome.github.io/projects/gradle-xjc-plugin/dokka/gradle-xjc-plugin/[API/DSL Documentation] +* {github-pages-uri}/[User Manual] +* {github-pages-uri}/dokka/gradle-xjc-plugin/[API/DSL Documentation] +* {github-m2-uri}/[Github Maven2 Package Browse] +* {github-pages-uri}/java8/maven2/[Github-Pages Maven2 Artifact Browse] +* {github-pages-uri}/artifacts/[Maven2 Artifact Archive Download] + +* {github-pages-uri}/java8/tests/[Java 8 Test Reports] +* {github-pages-uri}/java11/tests/[Java 11 Test Reports] diff --git a/build.gradle.kts b/build.gradle.kts index cd0a88a..c012fac 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -198,9 +198,18 @@ gradlePlugin { } +fun resolveSystemGetenv(name: String, defaultValue: String? = null): String? { + if(System.getenv().containsKey(name)) + return System.getenv(name) + return defaultValue +} + +val githubRepositoryOwner = resolveSystemGetenv("GITHUB_REPOSITORY_OWNER", "unbroken-dome") + + pluginBundle { - website = "https://github.com/unbroken-dome/gradle-xjc-plugin" - vcsUrl = "https://github.com/unbroken-dome/gradle-xjc-plugin" + website = "https://github.com/${githubRepositoryOwner}/gradle-xjc-plugin" + vcsUrl = "https://github.com/${githubRepositoryOwner}/gradle-xjc-plugin" description = "A plugin that integrates the XJC binding compiler into a Gradle build." tags = listOf("xjc", "jaxb", "code generation", "xml") @@ -221,7 +230,7 @@ tasks.named("dokka", org.jetbrains.dokka.gradle.DokkaTask::class) { reportUndocumented = false sourceLink { path = "src/main/kotlin" - url = "https://github.com/unbroken-dome/gradle-xjc-plugin/blob/v${project.version}/src/main/kotlin" + url = "https://github.com/${githubRepositoryOwner}/gradle-xjc-plugin/blob/v${project.version}/src/main/kotlin" lineSuffix = "#L" } perPackageOption { @@ -249,6 +258,9 @@ tasks.named("asciidoctor", org.asciidoctor.gradle.AsciidoctorTask::class) { "doctype" to "book" )) attributes(mapOf( + "GITHUB_REPOSITORY_OWNER" to githubRepositoryOwner, + "github-pages-uri" to "https://${githubRepositoryOwner}.github.io/gradle-xjc-plugin", + "github-uri" to "https://github.com/${githubRepositoryOwner}/gradle-xjc-plugin", "project-version" to project.version, "source-highlighter" to "prettify" )) From 12d5037aac5b37b860f301afdcc1222182f42635 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 04:33:49 +0000 Subject: [PATCH 065/115] Bump org.ow2.asm:asm from 9.0 to 9.4 Dependabot couldn't find the original pull request head commit, 136a771a0c35e391bf5bd825d37ebc5c257840e1. --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index c012fac..45018b1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -99,7 +99,7 @@ dependencies { "integrationTestImplementation"(gradleTestKit()) "integrationTestImplementation"("org.junit.jupiter:junit-jupiter-api:5.7.0") "integrationTestImplementation"("org.junit.platform:junit-platform-commons:1.7.0") - "integrationTestImplementation"("org.ow2.asm:asm:9.0") + "integrationTestImplementation"("org.ow2.asm:asm:9.4") "integrationTestRuntimeOnly"("org.junit.jupiter:junit-jupiter-engine:5.7.0") } From 25a436949091725300b3f28ce2ec1ead481a10fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Mar 2023 01:21:04 +0000 Subject: [PATCH 066/115] Bump org.spekframework.spek2:spek-runner-junit5 from 2.0.9 to 2.0.15 Bumps [org.spekframework.spek2:spek-runner-junit5](https://github.com/spekframework/spek) from 2.0.9 to 2.0.15. - [Release notes](https://github.com/spekframework/spek/releases) - [Changelog](https://github.com/spekframework/spek/blob/2.x/docs/breaking-changes.md) - [Commits](https://github.com/spekframework/spek/compare/2.0.9...2.0.15) --- updated-dependencies: - dependency-name: org.spekframework.spek2:spek-runner-junit5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 45018b1..61a0005 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -94,7 +94,7 @@ dependencies { "testLibApi"("com.willowtreeapps.assertk:assertk-jvm:0.22") "testImplementation"("org.spekframework.spek2:spek-dsl-jvm:2.0.9") - "testRuntimeOnly"("org.spekframework.spek2:spek-runner-junit5:2.0.9") + "testRuntimeOnly"("org.spekframework.spek2:spek-runner-junit5:2.0.15") "integrationTestImplementation"(gradleTestKit()) "integrationTestImplementation"("org.junit.jupiter:junit-jupiter-api:5.7.0") From 25849d8ce3ac123776673726272315f5f1b45817 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Mar 2023 04:33:52 +0000 Subject: [PATCH 067/115] Bump org.asciidoctor.convert from 1.5.9.2 to 2.4.0 Dependabot couldn't find the original pull request head commit, 4756bc10e3a1be6fbb59e484e8b5d6f36b5bcde1. --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 61a0005..9e70a00 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { `maven-publish` id("org.unbroken-dome.test-sets") version "3.0.1" id("com.gradle.plugin-publish") version "0.12.0" - id("org.asciidoctor.convert") version "1.5.9.2" + id("org.asciidoctor.convert") version "2.4.0" id("org.jetbrains.dokka") version "0.10.1" } From 451509928a7171bf50c5ff83859787ab5f787265 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Mar 2023 19:45:50 +0000 Subject: [PATCH 068/115] Bump com.gradle.plugin-publish from 0.12.0 to 0.21.0 Dependabot couldn't find the original pull request head commit, 4d111234baf5d073800b3270afab3208b740f7d1. --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9e70a00..9eba46c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,7 +3,7 @@ plugins { `java-gradle-plugin` `maven-publish` id("org.unbroken-dome.test-sets") version "3.0.1" - id("com.gradle.plugin-publish") version "0.12.0" + id("com.gradle.plugin-publish") version "0.21.0" id("org.asciidoctor.convert") version "2.4.0" id("org.jetbrains.dokka") version "0.10.1" } From 36760a48abda6c05f018845c786948b86daa180d Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 24 Mar 2023 19:30:42 +0000 Subject: [PATCH 069/115] build.yml: deploy if ${{}} --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 78426f9..6296402 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,6 +2,7 @@ name: CI-Gradle-build on: push: + release: workflow_dispatch: inputs: GRADLE_TARGET_ENABLE_integrationTest: @@ -9,6 +10,7 @@ on: default: false type: boolean schedule: + # FIXME we probably want this to work on the latest release tag only # * is a special character in YAML # setup monthly background build - cron: '45 4 18 * *' @@ -248,6 +250,7 @@ jobs: deploy: + if: ( github.ref == 'master' && github.event_name == 'push' ) || github.event_name == 'release' || github.event_name == 'schedule' needs: gh-pages-prepare permissions: From 476522536205cfb1c318325e62fc0534ffe3e72d Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 24 Mar 2023 19:30:42 +0000 Subject: [PATCH 070/115] README.adoc: update headline features --- README.adoc | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/README.adoc b/README.adoc index 03107cb..111b030 100644 --- a/README.adoc +++ b/README.adoc @@ -24,11 +24,20 @@ Invokes the `xjc` binding compiler from a Gradle build. == Features -- Automatically enable XJC code generation for each source set in your project -- support different versions of XJC through classpath isolation -- producing and consuming episodes -- catalogs with `maven:` and `classpath:` URI resolution (similar to maven-jaxb2-plugin) - +- Supports XJC Tool `com.sun.xml.bind` versions 2.1 (legacy), 2.2, 2.3, 2.4, 3.0 (jakarta) and + 4.0 (jakarta) which is the reference implementation now hosted by Eclipse® foundation + under the EE4J project. +- Supports JAXB™ specification -target versions 2.0, 2.1, 2.2, 2.3, 3.0 (jakarta). +- Automatically enable XJC code generation for each source set in your project. + Project structural use of multiple src//schema/ folders to organise bindings and + schemas. +- Support XJC through classpath isolation to better control visibility of data presented to the + tool separate from the Gradle build itself. +- Producing and consuming episodes. +- Dependency based catalog sources with `maven:` and `classpath:` URI resolution (similar to + maven-jaxb2-plugin) as well as the standard file,jar,jar:file,http,https sources. +- XJC tool plugin extention support, including custom plugins you may provide an implementation + for. == Requirements From 908830099e253d5466a75c57c6ae963db9743d1a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 00:03:14 +0000 Subject: [PATCH 071/115] Bump actions/deploy-pages from 1 to 2 Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 1 to 2. - [Release notes](https://github.com/actions/deploy-pages/releases) - [Commits](https://github.com/actions/deploy-pages/compare/v1...v2) --- updated-dependencies: - dependency-name: actions/deploy-pages dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6296402..a342276 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -265,4 +265,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v1 + uses: actions/deploy-pages@v2 From ff6007e8f38fe078ff539f0d8ac0e7e2ba77c67e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 00:03:23 +0000 Subject: [PATCH 072/115] Bump org.unbroken-dome.test-sets from 3.0.1 to 4.0.0 Bumps org.unbroken-dome.test-sets from 3.0.1 to 4.0.0. --- updated-dependencies: - dependency-name: org.unbroken-dome.test-sets dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9eba46c..1e4371c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ plugins { kotlin("jvm") `java-gradle-plugin` `maven-publish` - id("org.unbroken-dome.test-sets") version "3.0.1" + id("org.unbroken-dome.test-sets") version "4.0.0" id("com.gradle.plugin-publish") version "0.21.0" id("org.asciidoctor.convert") version "2.4.0" id("org.jetbrains.dokka") version "0.10.1" From e5c6947dbd3602e84349d0409e7a9041eb35a739 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Apr 2023 00:13:59 +0000 Subject: [PATCH 073/115] Bump org.ow2.asm:asm from 9.4 to 9.5 Bumps org.ow2.asm:asm from 9.4 to 9.5. --- updated-dependencies: - dependency-name: org.ow2.asm:asm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1e4371c..d9e334e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -99,7 +99,7 @@ dependencies { "integrationTestImplementation"(gradleTestKit()) "integrationTestImplementation"("org.junit.jupiter:junit-jupiter-api:5.7.0") "integrationTestImplementation"("org.junit.platform:junit-platform-commons:1.7.0") - "integrationTestImplementation"("org.ow2.asm:asm:9.4") + "integrationTestImplementation"("org.ow2.asm:asm:9.5") "integrationTestRuntimeOnly"("org.junit.jupiter:junit-jupiter-engine:5.7.0") } From 965ab8816b2ce0b61194e8c3af0f7440359824ac Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 24 Mar 2023 19:30:46 +0000 Subject: [PATCH 074/115] 2.1.0-SNAPSHOT From 413a2e6afd66a1bc95ccf865a100903a3f74b62f Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Mon, 27 Mar 2023 09:55:39 +0100 Subject: [PATCH 075/115] bugfix: build.gradle.kts fix xjc24CompileOnly default deps --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index d9e334e..68c6f8c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -76,7 +76,7 @@ dependencies { "xjc24CompileOnly"(xjcCommon.output) "xjc24CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.4.0-b180830.0438") "xjc24CompileOnly"("com.sun.xml.bind:jaxb-impl:2.4.0-b180830.0438") - "xjc22CompileOnly"("javax.xml.bind:jaxb-api:2.4.0-b180830.0359") + "xjc24CompileOnly"("javax.xml.bind:jaxb-api:2.4.0-b180830.0359") "xjc30CompileOnly"(xjcCommon.output) "xjc30CompileOnly"("com.sun.xml.bind:jaxb-xjc:3.0.2") From 58dc1e87c1b43d79f1d91cc38f1ab315ffdd9085 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Mon, 27 Mar 2023 10:00:29 +0100 Subject: [PATCH 076/115] bind-api.jar XjcTool classpass warning did not detect legacy versions. Previously it was warning that bind-api.jar maybe missing when a legacy 2.2 or older JAR was actually present the detection process is different for that era. --- .../common/AbstractXjcGeneratorWorkAction.kt | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt index 672a720..e99015b 100644 --- a/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt +++ b/src/xjcCommon/kotlin/org/unbrokendome/gradle/plugins/xjc/work/common/AbstractXjcGeneratorWorkAction.kt @@ -58,29 +58,42 @@ abstract class AbstractXjcGeneratorWorkAction : WorkAction() + try { + // It is normal to find this legacy class also in the newer bind-api.jar + Class.forName(javax_legacy_className) + list.add(javax_legacy_className) + kind = "legacy" + } catch (_: ClassNotFoundException) { + } try { Class.forName(javax_className) - foundJavax = true + list.add(javax_className) + kind = "javax" } catch (_: ClassNotFoundException) { } try { Class.forName(jakarta_className) - foundJakarta = true + list.add(jakarta_className) + kind = "jakarta" } catch (_: ClassNotFoundException) { } - if(!foundJavax && !foundJakarta) - logger.warn("Unable to locate expected class {} or {} on XJC visible ClassPath, maybe you have used one or more xjcTool terms and need to also include *.bind-api in an additional xjcTool option.", - javax_className, jakarta_className) + if(list.isEmpty()) + logger.warn("Unable to locate expected class {} or {} or {} on XJC visible ClassPath, maybe you have used one or more xjcTool terms and need to also include *.bind-api in an additional xjcTool option.", + jakarta_className, javax_className, javax_legacy_className) - if(foundJavax && foundJakarta) - logger.warn("Found both {} and {} on XJC visible ClassPath, usually you only need one of these.", - javax_className, jakarta_className) + if(list.size > 1 && list.contains(jakarta_className)) + logger.warn("Found multiple bind-api.jar on XJC visible ClassPath, usually you only need one of these. [{}]", + list.joinToString()) + else + logger.info("Found bind-api.jar on XJC visible ClassPath, detected kind: {} [{}]", + kind, list.joinToString()) } protected open fun doExecute(options: Options) { From 37f17f8a1f59d00984bef5a338212cf2e8d7aeb8 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 7 Dec 2023 09:01:46 +0000 Subject: [PATCH 077/115] Removal of GUtil due to Gradle 9.0 deprecation removal org.gradle.util.GUtil.toWords(String?) was reimplemented internally --- .../plugins/xjc/XjcSourceSetConvention.kt | 27 +++++++++++- .../plugins/xjc/MaintenanceChangesTest.kt | 42 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/MaintenanceChangesTest.kt diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcSourceSetConvention.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcSourceSetConvention.kt index 4325762..880901c 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcSourceSetConvention.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcSourceSetConvention.kt @@ -11,7 +11,6 @@ import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.tasks.SourceSet import org.gradle.util.ConfigureUtil -import org.gradle.util.GUtil import javax.inject.Inject @@ -204,9 +203,33 @@ abstract class XjcSourceSetConvention if (sourceSet.name == SourceSet.MAIN_SOURCE_SET_NAME) name else "${sourceSet.name}${name.capitalize()}" + companion object { + // This was originally org.gradle.util.GUtil.toWords(String?) before it was deprecated by Gradle 9.0 + fun toWords(s: String?): String? { + if (s == null) + return null + if (s.isEmpty()) + return "" + + return s.split(Regex("[^A-Za-z0-9]+")) + // camelCase => camel Case + .map { it.replace(Regex("([a-z0-9])([A-Z])"), { mr -> mr.groupValues.drop(1).joinToString(" ") }) } + // camelCASE => camel CASE + .map { it.replace(Regex("([a-z0-9])([A-Z]+)"), { mr -> mr.groupValues.drop(1).joinToString(" ") }) } + // CAMELcase => CAME Lcase + .map { + it.replace( + Regex("([A-Z]+)([A-Z][a-z0-9]+)"), + { mr -> mr.groupValues.drop(1).joinToString(" ") }) + } + .map { it.toLowerCase() } + .joinToString(" ") + } + } + init { val sourceSetName = sourceSet.name - val displayName = GUtil.toWords(sourceSetName) + val displayName = toWords(sourceSetName) xjcSchema = objects.sourceDirectorySet("xjcSchema", "$displayName XJC schema").apply { include("**/*.xsd") diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/MaintenanceChangesTest.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/MaintenanceChangesTest.kt new file mode 100644 index 0000000..1df7c4b --- /dev/null +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/MaintenanceChangesTest.kt @@ -0,0 +1,42 @@ +package org.unbrokendome.gradle.plugins.xjc + +import org.gradle.internal.impldep.org.testng.Assert.assertEquals +import org.spekframework.spek2.Spek +import org.spekframework.spek2.style.specification.describe +import org.unbrokendome.gradle.plugins.xjc.XjcSourceSetConvention.Companion.toWords + +object MaintenanceChangesTest : Spek({ + + describe("org.gradle.util.GUtil deprecation") { + it("validate replacement method") { + val expected = sequenceOf( + "" to "", + "a" to "a", + "A_Z" to "a z", + "oneTwo" to "one two", + "A9_Z" to "a9 z", + "A_9Z" to "a 9 z", + "A\$9Z4" to "a 9 z4", + "0A\$9Z4" to "0 a 9 z4", + "one9Two" to "one9 two", + "UPPERCASE" to "uppercase", + "UPPERcase" to "uppe rcase", // this is what came out of original method + "upperCASE" to "upper case", + "ABbCddE" to "a bb cdd e", + "ABbCDdE" to "a bb c dd e", + "AbbCddE" to "abb cdd e", + "AbbCdE" to "abb cd e", + "AbCdE" to "ab cd e", + "abcDefGhi Jkl mnoPqr stu vwx yz" to "abc def ghi jkl mno pqr stu vwx yz", + "A\$B?C-D:E.F" to "a b c d e f" + ) + + expected.forEach { + val actual = toWords(it.first) + //val actual = org.gradle.util.GUtil.toWords(it.first) + assertEquals(actual, it.second, "'${it.first}' to actual '$actual' != '${it.second}' expected") + } + } + } + +}) From c3fad43501d24c2a71e047ea35a7cd55d7d0a32b Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 7 Dec 2023 09:03:54 +0000 Subject: [PATCH 078/115] Added: sampled/xjc-version-ext-basics-annox + IT --- .../xjc-version-ext-basics-annox/build.gradle | 31 +++++++++++++++ .../settings.gradle | 8 ++++ .../src/main/schema/books.xjb | 21 ++++++++++ .../src/main/schema/books.xsd | 25 ++++++++++++ .../build.gradle.kts | 31 +++++++++++++++ .../settings.gradle.kts | 8 ++++ .../src/main/schema/books.xjb | 21 ++++++++++ .../src/main/schema/books.xsd | 25 ++++++++++++ ...XjcVersionExtBasicsAnnoxIntegrationTest.kt | 38 +++++++++++++++++++ 9 files changed, 208 insertions(+) create mode 100644 samples/groovy-dsl/xjc-version-ext-basics-annox/build.gradle create mode 100644 samples/groovy-dsl/xjc-version-ext-basics-annox/settings.gradle create mode 100644 samples/groovy-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xjb create mode 100644 samples/groovy-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xsd create mode 100644 samples/kotlin-dsl/xjc-version-ext-basics-annox/build.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-ext-basics-annox/settings.gradle.kts create mode 100644 samples/kotlin-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xjb create mode 100644 samples/kotlin-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtBasicsAnnoxIntegrationTest.kt diff --git a/samples/groovy-dsl/xjc-version-ext-basics-annox/build.gradle b/samples/groovy-dsl/xjc-version-ext-basics-annox/build.gradle new file mode 100644 index 0000000..5efb804 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-ext-basics-annox/build.gradle @@ -0,0 +1,31 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + +xjc { + extraArgs.addAll '-Xannotate' + extension = true +} + +dependencies { + // 2.3 is the default xjcVersion + implementation 'javax.xml.bind:jaxb-api:2.3.1' + + // Picked 2.0.9 for middling Java8/XJC2.3 support but if you research and fixup your + // environment and dependencies here you could go newer or older with Java/XJC. + // -Xannotate: means you need to add dependency: + xjcClasspath 'org.jvnet.jaxb:jaxb2-basics:2.0.9' + //xjcClasspath 'org.jvnet.jaxb:jaxb-annox:2.0.9' + xjcClasspath 'org.jvnet.jaxb:jaxb-basics-annotate:2.0.9' + + // Don't forget to include your implementation dependencies for the annotations themselves + // A random arbitrary annotation library to demonstrate use, replace with the ones you described in XJB + implementation 'javax.validation:validation-api:2.0.1.Final' + +} diff --git a/samples/groovy-dsl/xjc-version-ext-basics-annox/settings.gradle b/samples/groovy-dsl/xjc-version-ext-basics-annox/settings.gradle new file mode 100644 index 0000000..3a149d5 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-ext-basics-annox/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'xjc-version-ext-basics-annox' diff --git a/samples/groovy-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xjb b/samples/groovy-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xjb new file mode 100644 index 0000000..5489ee9 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xjb @@ -0,0 +1,21 @@ + + + + + + @javax.xml.bind.annotation.XmlRootElement(name="BookTypeHasBeenRenamed") + + + @javax.xml.bind.annotation.XmlAttribute(required=false, name="authorFieldHasBeenRenamed") + + + + diff --git a/samples/groovy-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xsd b/samples/groovy-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xsd new file mode 100644 index 0000000..1aa3843 --- /dev/null +++ b/samples/groovy-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xsd @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/xjc-version-ext-basics-annox/build.gradle.kts b/samples/kotlin-dsl/xjc-version-ext-basics-annox/build.gradle.kts new file mode 100644 index 0000000..2cd5fdd --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-ext-basics-annox/build.gradle.kts @@ -0,0 +1,31 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + + +xjc { + extraArgs.addAll("-Xannotate") + extension.set(true) +} + + +dependencies { + implementation("javax.xml.bind:jaxb-api:2.3.1") + + // Picked 2.0.9 for middling Java8/XJC2.3 support but if you research and fixup your + // environment and dependencies here you could go newer or older with Java/XJC. + // -Xannotate: means you need to add dependency: + xjcClasspath("org.jvnet.jaxb:jaxb2-basics:2.0.9") + //xjcClasspath("org.jvnet.jaxb:jaxb-annox:2.0.9") + xjcClasspath("org.jvnet.jaxb:jaxb-basics-annotate:2.0.9") + + // Don't forget to include your implementation dependencies for the annotations themselves + // A random arbitrary annotation library to demonstrate use, replace with the ones you described in XJB + implementation("javax.validation:validation-api:2.0.1.Final") +} diff --git a/samples/kotlin-dsl/xjc-version-ext-basics-annox/settings.gradle.kts b/samples/kotlin-dsl/xjc-version-ext-basics-annox/settings.gradle.kts new file mode 100644 index 0000000..78fbe26 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-ext-basics-annox/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "xjc-version-ext-basics-annox" diff --git a/samples/kotlin-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xjb b/samples/kotlin-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xjb new file mode 100644 index 0000000..5489ee9 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xjb @@ -0,0 +1,21 @@ + + + + + + @javax.xml.bind.annotation.XmlRootElement(name="BookTypeHasBeenRenamed") + + + @javax.xml.bind.annotation.XmlAttribute(required=false, name="authorFieldHasBeenRenamed") + + + + diff --git a/samples/kotlin-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xsd b/samples/kotlin-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xsd new file mode 100644 index 0000000..1aa3843 --- /dev/null +++ b/samples/kotlin-dsl/xjc-version-ext-basics-annox/src/main/schema/books.xsd @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtBasicsAnnoxIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtBasicsAnnoxIntegrationTest.kt new file mode 100644 index 0000000..aca6be5 --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcVersionExtBasicsAnnoxIntegrationTest.kt @@ -0,0 +1,38 @@ +package org.unbrokendome.gradle.plugins.xjc + +import assertk.assertThat +import assertk.assertions.contains +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.resolve +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.withReadTextFile +import java.io.File + + +@UseSampleProject("xjc-version-ext-basics-annox") +class XjcVersionExtBasicsAnnoxIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + val projectName = "xjc-version-ext-basics-annox" + + super.test(runner, projectDir, projectName) + + assertThat(projectDir, "projectDir") + .resolve("build/generated/sources/xjc/java/main/org/unbroken_dome/gradle_xjc_plugin/samples/books/BookType.java") + .withReadTextFile { + contains("BookTypeHasBeenRenamed") + } + + assertThat(projectDir, "projectDir") + .resolve("build/generated/sources/xjc/java/main/org/unbroken_dome/gradle_xjc_plugin/samples/books/BookType.java") + .withReadTextFile { + contains("authorFieldHasBeenRenamed") + } + } + +} From f0fcafa9532d555257b081f6c8395829ad4ba206 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 7 Dec 2023 09:05:24 +0000 Subject: [PATCH 079/115] Replace Kotlin .max() use with 1.9.x compatible method .max() does not exist in newer Gradle 8.5/Kotlin 1.9.21 .maxOf() does not exist in original Gradle 5.6/Kotlin 1.3.x --- .../org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt index 9c1b06e..e694579 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt @@ -51,8 +51,14 @@ abstract class XjcGenerate private val LEGACY_LATEST_SUPPORTED_VERSION = WorkActionClassNamesByVersion.entries .filter { it.value.endsWith("LegacyWorkAction") } .map { it.key } - .max() - private val HIGHEST_SUPPORTED_VERSION = WorkActionClassNamesByVersion.keys.max() + .fold("") { acc, it -> if (acc > it) acc else it } // .max() but supported by all kotlin versions + private val HIGHEST_SUPPORTED_VERSION = WorkActionClassNamesByVersion.keys + .fold("") { acc, it -> if (acc > it) acc else it } // .max() but supported by all kotlin versions + + init { + assert(LEGACY_LATEST_SUPPORTED_VERSION.isNotEmpty()) + assert(HIGHEST_SUPPORTED_VERSION.isNotEmpty()) + } } From a596a0c68d9c5e7e6d17948babdb826ce78b4f8a Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 7 Dec 2023 09:07:10 +0000 Subject: [PATCH 080/115] integrationTest: GradleVersions property override for CI matrix use -Dorg.unbrokendome.gradle.plugins.xjc.testutil.GradleVersions=99.0,98.0.1 --- build.gradle.kts | 5 +++++ .../gradle/plugins/xjc/testutil/GradleVersionsExtension.kt | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 68c6f8c..ed36a97 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -142,6 +142,11 @@ tasks.withType { doFirst { project.mkdir(tmpDir) } + + // ensure custom system properties are exposed to testing from CI + System.getProperties().filter { it.key.toString().startsWith("org.unbrokendome.gradle.plugins.xjc") } + .forEach { (t, u) -> systemProperty(t.toString(), u ?: "") } + } diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/GradleVersionsExtension.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/GradleVersionsExtension.kt index 1ed3da1..83e47e5 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/GradleVersionsExtension.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/GradleVersionsExtension.kt @@ -55,7 +55,11 @@ class GradleVersionsExtension : TestTemplateInvocationContextProvider { return Stream.empty() } - return versions.asSequence() + // support for CI canary testing -Dorg.unbrokendome.gradle.plugins.xjc.testutil.GradleVersions=99.0,98.0.1 + val propValue = System.getProperty(GradleVersions::class.java.name)?.trim() + val versionsAfterPropertyOverride = if(propValue?.isNotBlank() == true) listOf(propValue) else versions + + return versionsAfterPropertyOverride.asSequence() .flatMap { gradleVersions -> gradleVersions.splitToSequence(',').map { it.trim() } } From 424f714fb9d029ca3e586ed73604ac8fcc7ba314 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 7 Dec 2023 09:09:16 +0000 Subject: [PATCH 081/115] JDK21 support under Gradle 8.5 This covers: * Testing of plugin consumption with runtime Java 8, 11, 17 and 21 while using an appropriate version of Gradle to match. This also covers aspects of being able to build the plugin itself with a newer environment than is committed to the repository by default, even if the published artifacts are still based on Java 8 to ensure maximal bytecode compatibility for consumers. * Testing of plugin building with Java 8, 11, 17 and 21. * Testing of plugin building with Gradle 6.9.x, 7.x and 8.x --- README.adoc | 47 ++++++++++++++++++++++++++++++--------------- build.gradle.kts | 3 ++- gradle.properties | 22 +++++++++++++++++++++ settings.gradle.kts | 5 +++++ 4 files changed, 60 insertions(+), 17 deletions(-) diff --git a/README.adoc b/README.adoc index 111b030..5ceac01 100644 --- a/README.adoc +++ b/README.adoc @@ -14,7 +14,12 @@ endif::[] ifdef::env-github[] image:{img-build-status}[CI-Gradle-build,link={uri-build-status}] -#CI Targets: `Java 8` and `Java 11` with `Gradle 5.6` through `Gradle 8.0.2`# + +#CI Targets: `Java 8` and `Java 11` for plugin project builder# + +#Plugin artifact supports `Java 8`, `Java 11`, `Java 17` and `Java 21`# + +#For use with `Gradle 5.6` through `Gradle 8.5`# endif::[] = Gradle XJC Plugin @@ -36,15 +41,19 @@ Invokes the `xjc` binding compiler from a Gradle build. - Producing and consuming episodes. - Dependency based catalog sources with `maven:` and `classpath:` URI resolution (similar to maven-jaxb2-plugin) as well as the standard file,jar,jar:file,http,https sources. -- XJC tool plugin extention support, including custom plugins you may provide an implementation +- XJC tool plugin extension support, including custom plugins you may provide an implementation for. == Requirements The Gradle plugin itself: -- Gradle 5.6 or higher +- Gradle 5.6 or higher including +* 5.6 or later using JDK8 or JDK11 +* 7.3 or later using JDK8, JDK11 or JDK17 +* 8.5 or later using JDK8, JDK11, JDK17 or JDK21 - JDK 1.8 or higher (when running Gradle) +- See also Gradle build tool Java compatibility matrix at https://docs.gradle.org/current/userguide/compatibility.html for which this plugin is consistent with The XJC Tool requirements: @@ -59,7 +68,7 @@ The XJC Tool requirements: == Quick Start -Apply the `org.unbroken-dome.xjc` plugin to your Gradle build script and add an appropriate +Apply the `{maven-groupId}.xjc` plugin to your Gradle build script and add an appropriate dependency on the JAXB API: ifdef::env-github[] @@ -67,19 +76,25 @@ ifdef::env-github[] .settings.gradle(.kts) ---- pluginManagement { - // 3rd party releases and SNAPSHOTs - maven { - url "{github-pages-uri}/java8/maven2" - // url "{github-m2-uri}" - content { - // this repository *only* contains artifacts for specific groups - includeGroup "org.unbroken-dome.xjc" - includeGroup "org.unbroken-dome.gradle-plugins" + repositories { + maven { + //url = uri("{github-pages-uri}/java8/maven2") + url = uri("{github-m2-uri}") + content { + // this repository *only* contains artifacts for specific groups + includeGroup("org.unbroken-dome.xjc") + includeGroup("org.unbroken-dome") ifdef::env-github[] - includeGroup "{maven-groupId}.xjc" - includeGroup "{maven-groupId}.gradle-plugins" + includeGroup("{maven-groupId}.xjc") + includeGroup("{maven-groupId}") endif::[] + } + credentials { + // github requires any valid credentials even to GET packages + username = System.getenv("GITHUB_USERNAME") + password = System.getenv("GITHUB_TOKEN") + } } } @@ -89,11 +104,11 @@ endif::[] ---- endif::[] -[source,kotlin] +[source,kotlin,subs="normal"] .build.gradle(.kts) ---- plugins { - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("{maven-groupId}.xjc") version "2.1.0-SNAPSHOT" } dependencies { diff --git a/build.gradle.kts b/build.gradle.kts index ed36a97..d78ea91 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ plugins { kotlin("jvm") `java-gradle-plugin` `maven-publish` - id("org.unbroken-dome.test-sets") version "4.0.0" + id("org.unbroken-dome.test-sets") // version "$testSetsVersion" id("com.gradle.plugin-publish") version "0.21.0" id("org.asciidoctor.convert") version "2.4.0" id("org.jetbrains.dokka") version "0.10.1" @@ -10,6 +10,7 @@ plugins { val kotlinVersion: String by extra +val testSetsVersion: String by extra repositories { diff --git a/gradle.properties b/gradle.properties index 93a72cc..923b30c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,26 @@ +# For CI purposes these are now property overrides to help matrix test environment scenarios +# With JVM and Gradle versions for building this project (not consuming the output plugin of this project) + +# Gradle 6.5, Kotlin 1.3.72(1.3) +# Gradle 7.3, Kotlin 1.5.31(1.4) JDK17 +# Gradle 7.5, Kotlin 1.6.21(1.4) configuration-cache +# Gradle 8.5, Kotlin 1.9.20(1.8) JDK21 + +## Gradle 8.x building and testing +#kotlinVersion=1.9.20 +# This needs Java11+ but is the first version to support Gradle 8.x +#testSetsVersion=4.1.0 + +## Gradle 7.x building and testing +#kotlinVersion=1.6.21 +#testSetsVersion=4.0.0 + +## Gradle 5.x 6.x building and testing kotlinVersion=1.3.72 +testSetsVersion=3.0.1 + +# +# group=org.unbroken-dome.gradle-plugins version=2.1.0-SNAPSHOT diff --git a/settings.gradle.kts b/settings.gradle.kts index 9c582dc..6ec7f51 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,11 +1,16 @@ pluginManagement { val kotlinVersion: String by settings + val testSetsVersion: String by settings + // Still needed while we support building this project before Gradle 7.6 resolutionStrategy.eachPlugin { if (requested.id.namespace == "org.jetbrains.kotlin") { useVersion(kotlinVersion) } + if (requested.id.id == "org.unbroken-dome.test-sets") { + useVersion(testSetsVersion) + } } } From aaf9c902c03de602f8b6a0c1ac464bd172e9ca19 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 7 Dec 2023 09:09:38 +0000 Subject: [PATCH 082/115] IT Compat Matrix: 8.5 +update 8.5 8.4, 8.3, 8.2.1, 8.1.1 added, still tailing with 5.6 --- .../plugins/xjc/GradleVersionCompatibilityIntegrationTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/GradleVersionCompatibilityIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/GradleVersionCompatibilityIntegrationTest.kt index 8ac8ba2..1fb6015 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/GradleVersionCompatibilityIntegrationTest.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/GradleVersionCompatibilityIntegrationTest.kt @@ -17,7 +17,7 @@ import org.unbrokendome.gradle.plugins.xjc.testutil.runGradle import java.io.File -const val AllGradleVersions = "8.0.2, 7.6.1, 7.5.1, 7.4.2, 7.3.3, 7.2, 7.1.1, 7.0.2, 6.9.4, 6.8.2, 6.7.1, 6.6.1, 6.5.1, 6.4.1, 6.3, 6.2.2, 6.1.1, 6.0.1, 5.6.4, 5.6" +const val AllGradleVersions = "8.5, 8.4, 8.3, 8.2.1, 8.1.1, 8.0.2, 7.6.3, 7.5.1, 7.4.2, 7.3.3, 7.2, 7.1.1, 7.0.2, 6.9.4, 6.8.3, 6.7.1, 6.6.1, 6.5.1, 6.4.1, 6.3, 6.2.2, 6.1.1, 6.0.1, 5.6.4, 5.6" @GradleIntegrationTest From 4e4ed2f3d1b305528ba21cb0de6a9d4d3a31b024 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 7 Dec 2023 09:19:30 +0000 Subject: [PATCH 083/115] Configuration Cache support (IT) This commit is based on the work of: commit f488e10903bd5ac57a40458be40dd8094bb6a5b3 Author: Ryan Dens Date: Tue Nov 8 22:42:45 2022 -0800 Add configuration cache integration test https://github.com/ryandens/gradle-xjc-plugin/commit/f488e10903bd5ac57a40458be40dd8094bb6a5b3 --- .../xjc/AbstractBasicIntegrationTest.kt | 29 ++++++++++++-- .../xjc/ConfigurationCacheIntegrationTest.kt | 40 +++++++++++++++++++ .../xjc/testutil/assertions/BuildResult.kt | 6 +++ 3 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/ConfigurationCacheIntegrationTest.kt diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/AbstractBasicIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/AbstractBasicIntegrationTest.kt index afdaac0..b662574 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/AbstractBasicIntegrationTest.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/AbstractBasicIntegrationTest.kt @@ -11,6 +11,7 @@ import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProjectExtension import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.containsEntries import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.isSuccess +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.isUpToDate import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.resolve import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.task import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.withJarFile @@ -20,14 +21,35 @@ import java.io.File abstract class AbstractBasicIntegrationTest { - fun test(runner: GradleRunner, projectDir: File, projectName: String): BuildResult { - val buildResult = runner.runGradle("build") + fun test(runner: GradleRunner, projectDir: File, projectName: String, vararg args: String): BuildResult { + val runGradleArgs = if (args.isNotEmpty()) args else arrayOf("build") + + val buildResult = runner.runGradle(*runGradleArgs) + + checkTaskSuccess(buildResult) + + checkOutputJar(projectDir, projectName) + + return buildResult + } + + fun checkTaskSuccess(buildResult: BuildResult) { assertThat(buildResult).all { task(":xjcGenerate").isSuccess() task(":build").isSuccess() } + } + + fun checkTaskUpToDate(buildResult: BuildResult) { + assertThat(buildResult).all { + task(":xjcGenerate").isUpToDate() + task(":build").isUpToDate() + } + } + + fun checkOutputJar(projectDir: File, projectName: String) { assertThat(projectDir, "projectDir") .resolve("build/libs/$projectName.jar") .withJarFile { @@ -37,7 +59,6 @@ abstract class AbstractBasicIntegrationTest { "org/unbroken_dome/gradle_xjc_plugin/samples/books/ObjectFactory.class" ) } - - return buildResult } + } diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/ConfigurationCacheIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/ConfigurationCacheIntegrationTest.kt new file mode 100644 index 0000000..bb8d7aa --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/ConfigurationCacheIntegrationTest.kt @@ -0,0 +1,40 @@ +package org.unbrokendome.gradle.plugins.xjc + +import assertk.all +import assertk.assertThat +import assertk.assertions.contains +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.output +import org.unbrokendome.gradle.plugins.xjc.testutil.runGradle +import java.io.File + + +@UseSampleProject("basic") +class ConfigurationCacheIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + + val projectName = "basic" + val buildResult = runner.runGradle("--configuration-cache", "build") + checkTaskSuccess(buildResult) + checkOutputJar(projectDir, projectName) + + assertThat(buildResult).all { + output().contains("Configuration cache entry stored.") + } + + + val maybeCachedBuildResult = runner.runGradle("--configuration-cache", "build") + checkTaskUpToDate(maybeCachedBuildResult) + + assertThat(maybeCachedBuildResult).all { + output().contains("Configuration cache entry reused.") + } + } +} diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/BuildResult.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/BuildResult.kt index 6479eba..ec4b890 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/BuildResult.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/BuildResult.kt @@ -17,6 +17,12 @@ fun Assert.task(taskPath: String) = } +fun Assert.output() = + transform(name = "output") { actual -> + actual.output + } + + val Assert.outcome: Assert get() = transform(name = "$name outcome") { actual -> actual.outcome From d15e4662b5632b2d029ff1277e220a28d9c20e6d Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 7 Dec 2023 09:19:45 +0000 Subject: [PATCH 084/115] Configuration Cache support (refactor) This commit is based on the work of: commit 8956a7e2d79777aa34c6cc3f67012842116bc2cd Author: Ryan Dens Date: Fri Apr 7 15:38:33 2023 -0700 :recycle: Refactor XjcGenerate task to consume a a list property of an object that is compatible with the Gradle configuration cache https://github.com/ryandens/gradle-xjc-plugin/commit/8956a7e2d79777aa34c6cc3f67012842116bc2cd --- .../gradle/plugins/xjc/XjcGenerate.kt | 16 ++++++++-------- .../unbrokendome/gradle/plugins/xjc/XjcPlugin.kt | 2 +- .../gradle/plugins/xjc/XjcGenerateTest.kt | 5 +++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt index e694579..4eadaa5 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerate.kt @@ -59,6 +59,11 @@ abstract class XjcGenerate assert(LEGACY_LATEST_SUPPORTED_VERSION.isNotEmpty()) assert(HIGHEST_SUPPORTED_VERSION.isNotEmpty()) } + + fun resolveArtifactsForMavenUri(configuration: Configuration): MutableList { + val artifacts = configuration.resolvedConfiguration.lenientConfiguration.artifacts + return artifacts.map { SerializableResolvedArtifact(it) }.toMutableList() + } } @@ -124,8 +129,8 @@ abstract class XjcGenerate /** * A [Configuration] to be used for catalog resolution with the `maven:` URI scheme. */ - @get:[InputFiles Optional Classpath] - abstract val catalogResolutionClasspath: Property + @get:[Input Optional] + abstract val catalogSerializableResolvedArtifact: ListProperty /** @@ -329,12 +334,7 @@ abstract class XjcGenerate parameters.bindingFiles.setFrom(bindingFiles) parameters.pluginClasspath.setFrom(pluginClasspath) parameters.catalogFiles.setFrom(catalogs) - parameters.catalogResolvedArtifacts.set( - catalogResolutionClasspath.map { configuration -> - configuration.resolvedConfiguration.lenientConfiguration.artifacts - .map { SerializableResolvedArtifact(it) } - } - ) + parameters.catalogResolvedArtifacts.set(catalogSerializableResolvedArtifact) parameters.episodes.setFrom(episodes) parameters.targetPackage.set(targetPackage) parameters.encoding.set(encoding) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt index 0543fa0..2e725c6 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt @@ -136,7 +136,7 @@ class XjcPlugin : Plugin { task.catalogs.setFrom(xjcSourceSetConvention.xjcCatalog) task.pluginClasspath.setFrom(xjcClasspathConfiguration) - task.catalogResolutionClasspath.set(catalogResolutionConfiguration) + task.catalogSerializableResolvedArtifact.set(project.provider { XjcGenerate.resolveArtifactsForMavenUri(catalogResolutionConfiguration) }) task.episodes.setFrom(episodesConfiguration) task.targetPackage.set(xjcSourceSetConvention.xjcTargetPackage) diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt index 7ab44a4..0d414a4 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt @@ -159,10 +159,11 @@ object XjcGenerateTest : Spek({ it("should use the catalog resolution classpath") { val task = project.tasks.getByName("xjcGenerate") as XjcGenerate val catalogResolutionConfig = project.configurations.getByName("xjcCatalogResolution") + val resolved = XjcGenerate.resolveArtifactsForMavenUri(catalogResolutionConfig) assertThat(task, name = "task").all { - prop(XjcGenerate::catalogResolutionClasspath) - .hasValueEqualTo(catalogResolutionConfig) + prop(XjcGenerate::catalogSerializableResolvedArtifact) + .hasValueEqualTo(resolved) } } From 52ccf80de3a8e4f98d6fb0df60ff364fd717a274 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 7 Dec 2023 09:14:06 +0000 Subject: [PATCH 085/115] @Suppress UNUSED_PARAMETER Supress this from CI reporting initiative. --- .../gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt index 94187e3..32dfb23 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcToolFutureIntegrationTest.kt @@ -18,6 +18,7 @@ import java.io.File @UseSampleProject("xjc-tool-future") class XjcToolFutureIntegrationTest : AbstractBasicIntegrationTest() { + @Suppress("UNUSED_PARAMETER") // Disabled to enable this test with we ideally need to supply an XJC // Tool implementation that has a future version such as in the // MANIFEST.MF: From 189558a5bef903c6ffea96939893bdc2d366f44e Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 7 Dec 2023 09:17:00 +0000 Subject: [PATCH 086/115] canary.yml: GHA CI workflow added --- .github/workflows/canary-build.yml | 312 +++++++++++++++++ .github/workflows/canary-consume.yml | 481 +++++++++++++++++++++++++++ 2 files changed, 793 insertions(+) create mode 100644 .github/workflows/canary-build.yml create mode 100644 .github/workflows/canary-consume.yml diff --git a/.github/workflows/canary-build.yml b/.github/workflows/canary-build.yml new file mode 100644 index 0000000..0888ca2 --- /dev/null +++ b/.github/workflows/canary-build.yml @@ -0,0 +1,312 @@ +name: CI-Gradle-canary-build +# This build exists to test compatibility of the plugin project build to generate the plugin +# with the latest Gradle version. +# This is checking and reporting about the plugin maintainers perspective of building this plugin +# This also indirectly tests against JVM updates as well but that is not considered the main focus +# +# So I'm calling this a canary as it provides an early warning after a new official Gradle release +# of consumer issues. We do not test release candidates or against any Gradle builds that are not +# an official release as there is no maintenance capacity to keep uptodate with daily issues from +# doing this not any reason to thing doing this will improve the quality of the plugin. +# +# Gradle publishes public data to in this area to help with automation: +# https://services.gradle.org/versions/ +# https://raw.githubusercontent.com/gradle/gradle/master/released-versions.json + +## TODO build project test, using newer Gradle versions, setup matrix of useful version +## TODO run deprecation test turn on warnings, collect output to summary +## TODO emit compile log output warnings to summary + +on: + workflow_dispatch: + inputs: + GRADLE_TARGET_ENABLE_integrationTest: + description: 'Run with integrationTest ?' + default: true + type: boolean + schedule: + # setup weekly canary build + - cron: '45 4 * * 6' + +jobs: + build: + strategy: + max-parallel: 3 + matrix: + # Maintenance update as necessary the expected latest Gradle version supports the JVM matrix listed + os: [ubuntu-latest] + jvm: ['8', '11', '17', '21'] + gradle: [ + 'latest', + '8', + '8.5', # JDK21 + '7', + '7.6', + '7.3', # JDK11 + '6', + '6.6.1' # oldest supported to build project with + ] + exclude: + - jvm: 21 + gradle: 7 + - jvm: 21 + gradle: 7.6 + - jvm: 21 + gradle: 7.3 + - jvm: 21 + gradle: 6 + - jvm: 21 + gradle: 6.6.1 + - jvm: 17 + gradle: 6 + - jvm: 17 + gradle: 6.6.1 + fail-fast: false + runs-on: ${{ matrix.os }} + env: + GRADLE_EXTRA_ARGS: --no-daemon --warning-mode=all + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Matrix Check + run: | + ## Disable runs requesting invalid matrix (done via 'strategy.matrix.exclude' GHA setting) + # jvm=21 only latest 8.5 + # jvm=17 only latest 8.5 7 7.6 7.3 + # jvm=11 only latest 8.5 7 7.6 7.3 6 5 5.6 + # jvm=8 only latest 8.5 7 7.6 7.3 6 5 5.6 + # Resolve all values to actual value + # Remove duplicates (and alias runs) + if [ -z "${{ matrix.os }}" ] + then + echo "$0: matrix.os is not setup" 1>&2 + exit 1 + fi + if [ -z "${{ matrix.jvm }}" ] + then + echo "$0: matrix.jvm is not setup" 1>&2 + exit 1 + fi + if [ -z "${{ matrix.gradle }}" ] + then + echo "$0: matrix.gradle is not setup" 1>&2 + exit 1 + fi + + - name: GHA Option Setup + run: | + if [ -z "${GRADLE_TARGET_ENABLE_integrationTest}" ] && [ -n "${{ github.event.schedule }}" ]; then + # force this on for schedule build + # "${{ github.event.schedule }}" == "45 4 18 * *" + # $GITHUB_EVENT_NAME == "schedule" + echo "GRADLE_TARGET_ENABLE_integrationTest=true" >> $GITHUB_ENV + fi + target_plugin="org.unbroken-dome.xjc" + target_group=$(grep "^group=" gradle.properties | cut -d'=' -f2-) + target_artifact="gradle-xjc-plugin" + target_version=$(grep "^version=" gradle.properties | cut -d'=' -f2-) + + echo "target_plugin=$target_plugin" >> $GITHUB_ENV + echo "target_group=$target_group" >> $GITHUB_ENV + echo "target_artifact=$target_artifact" >> $GITHUB_ENV + echo "target_version=$target_version" >> $GITHUB_ENV + + - name: Gradle Version Setup + run: | + # + curl -s "https://raw.githubusercontent.com/gradle/gradle/master/released-versions.json" > released-versions.json + + # Only supporting 6.6.1 or newer (to build the project itself) + GRADLE_ALL_VERSIONS=$(jq '.finalReleases[].version' -r released-versions.json | sort -rn | tr '\n' ' ' | sed -e 's#\s6.6\s.*##') + echo "GRADLE_ALL_VERSIONS=$GRADLE_ALL_VERSIONS" + + GRADLE_CANARY_VERSION=$(jq '.finalReleases[].version' -r released-versions.json | sort -rn | head -n1) + echo "GRADLE_CANARY_VERSION=$GRADLE_CANARY_VERSION" + + GRADLE_CANARY_MAJOR=$(echo -n "$GRADLE_CANARY_VERSION" | cut -d '.' -f1) + + regex_transform=$(echo -ne "${{ matrix.gradle }}" | sed -e 's#\.#\\\0#g') + GRADLE_MATRIX_VERSION=$(jq '.finalReleases[].version' -r released-versions.json | sort -rn | egrep -- "^${regex_transform}" | head -n1 | tr -d '\r\n') + echo "GRADLE_MATRIX_VERSION=$GRADLE_MATRIX_VERSION" + + GRADLE_MATRIX_MAJOR=$(echo -n "$GRADLE_MATRIX_VERSION" | cut -d '.' -f1) + + if gradlew -v || which gradlew + then + # confirm GHA didn't provide its own + echo "$0: ERROR ./gradlew appears to already be installed" 1>&2 + exit 1 + fi + + if [ "${{ matrix.gradle }}" = "latest" ] + then + GRADLE_VERSION="$GRADLE_CANARY_VERSION" + else + GRADLE_VERSION="$GRADLE_MATRIX_VERSION" + fi + GRADLE_VERSION_MAJOR=$(echo -n "$GRADLE_VERSION" | cut -d '.' -f1) + + # TODO disable duplicate runs which resolve to the same matrix versions + # latest 8 8.5 all resolve to 8.5 for example + + echo "GRADLE_ALL_VERSIONS=$GRADLE_ALL_VERSIONS" >> $GITHUB_ENV + echo "GRADLE_CANARY_VERSION=$GRADLE_CANARY_VERSION" >> $GITHUB_ENV + echo "GRADLE_CANARY_MAJOR=$GRADLE_CANARY_MAJOR" >> $GITHUB_ENV + echo "GRADLE_MATRIX_VERSION=$GRADLE_MATRIX_VERSION" >> $GITHUB_ENV + echo "GRADLE_MATRIX_MAJOR=$GRADLE_MATRIX_MAJOR" >> $GITHUB_ENV + echo "GRADLE_VERSION=$GRADLE_VERSION" >> $GITHUB_ENV + echo "GRADLE_VERSION_MAJOR=$GRADLE_VERSION_MAJOR" >> $GITHUB_ENV + + # Make the version so with wrapper edit + sed -e 's/^distributionUrl=/\#\0/' -i gradle/wrapper/gradle-wrapper.properties + echo "distributionUrl=https\://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip" >> gradle/wrapper/gradle-wrapper.properties + + # Fixup gradle.properties based on Gradle major used to build + sed -e 's/^kotlinVersion=/\#\0/' -i gradle.properties + sed -e 's/^testSetsVersion=/\#\0/' -i gradle.properties + case "$GRADLE_VERSION_MAJOR" in + 5|6) echo "kotlinVersion=1.3.72" >> gradle.properties + echo "testSetsVersion=3.0.1" >> gradle.properties + ;; + 7) echo "kotlinVersion=1.6.21" >> gradle.properties + echo "testSetsVersion=4.0.0" >> gradle.properties + ;; + 8|*) echo "kotlinVersion=1.9.20" >> gradle.properties + if [ "${{ matrix.jvm }}" = "8" ] + then + echo "testSetsVersion=4.0.0" >> gradle.properties + else + # Needs Java11+ + echo "testSetsVersion=4.1.0" >> gradle.properties + fi + ;; + esac + echo "### gradle.properties:" + cat gradle.properties + + - name: Java + uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: ${{ matrix.jvm }} + + - name: Gradle - wrapper-validation-action + uses: gradle/wrapper-validation-action@v1 + + - name: Gradle - setup + uses: gradle/gradle-build-action@v2 + + - name: Show Diff + run: | + git diff || true + + - name: Report Versions + run: | + # Print verbose diagnostics into logs + java -version + + # download-artifact removes executable perm from files + test -x ./gradlew || chmod -c a+x ./gradlew + # Now run it + ./gradlew -v + + JAVA_ARG_VERSION=$(java -version 2>&1 | sed -e ':a;N;$!ba;s/\n/
/g' -e 's#|#\\|#g') + JAVA_ARG_VERSION_SUMMARY=$(java -version 2>&1 | head -n1 | sed -e 's#openjdk\s\+##' -e 's#version\s\+##' -e 's#"##g' -e 's#\s\+.*$##') + GRADLE_ARG_VERSION=$(./gradlew -v 2>&1 | sed -e ':a;N;$!ba;s/\n/
/g' -e 's#|#\\|#g') + GRADLE_WRAPPER_VERSION=$(egrep "^distributionUrl\s*=" gradle/wrapper/gradle-wrapper.properties | sed -e 's#^.*=##' -e 's#.*distributions/##' -e 's#^gradle\-##' -e 's#\-.*$##') + + cat <> /tmp/GITHUB_STEP_SUMMARY$$.txt + Gradle Version $GRADLE_VERSION (${{ matrix.gradle }}) JDK $JAVA_ARG_VERSION_SUMMARY (${{ matrix.jvm }}) + + | Package | Details | + | ---------- | --------------------- | + | Java | ${JAVA_ARG_VERSION} | + | Gradle | ${GRADLE_ARG_VERSION} | + EOF + + cat /tmp/GITHUB_STEP_SUMMARY$$.txt + cat /tmp/GITHUB_STEP_SUMMARY$$.txt >> $GITHUB_STEP_SUMMARY + + - name: Gradle - dependencies + env: # to resolve artifacts from GH packages + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: ./gradlew $GRADLE_EXTRA_ARGS dependencies + + - name: Gradle - assemble + env: # to resolve artifacts from GH packages + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: ./gradlew $GRADLE_EXTRA_ARGS assemble + + - name: Gradle - build + run: ./gradlew $GRADLE_EXTRA_ARGS build + + - name: Gradle - check + run: | + if ! ./gradlew $GRADLE_EXTRA_ARGS check + then + ./gradlew $GRADLE_EXTRA_ARGS --stacktrace check + fi + + - name: Gradle - integrationTest + if: ${{ vars.GRADLE_TARGET_ENABLE_integrationTest == 'true' || inputs.GRADLE_TARGET_ENABLE_integrationTest }} + run: ./gradlew $GRADLE_EXTRA_ARGS "-Dorg.unbrokendome.gradle.plugins.xjc.testutil.GradleVersions=${GRADLE_VERSION}" integrationTest + + - name: Gradle - asciidoctor + if: false # needs fixing for 7.x + run: ./gradlew $GRADLE_EXTRA_ARGS asciidoctor + + - name: Gradle - dokka + if: false # needs fixing for 7.x + run: ./gradlew $GRADLE_EXTRA_ARGS dokka + + - name: Gradle - publish + run: ./gradlew $GRADLE_EXTRA_ARGS publish + + - name: Gradle - deprecation check + run: ./gradlew -Dorg.gradle.deprecation.trace=true --warning-mode=all --stacktrace validatePlugins + + - name: Upload - prepare + if: ${{ matrix.os == 'ubuntu-latest' }} + shell: bash + run: | + mkdir dist + _build_repo_list=$(find . -type d -path "*/build/repo") + if [ -n "${_build_repo_list}" ] + then + for dir in ${_build_repo_list} + do + cp -a "$dir" "dist/" + done + else + echo "$0: no **/build/repo directories found" 1>&2 + fi + find "dist" -type f -exec ls -ld {} \; + du -s "dist" + + mkdir -p build/gh-pages + [ -d build/reports/tests ] && cp -a build/reports/tests build/gh-pages/ + [ -d build/asciidoc/html5 ] && cp -a build/asciidoc/html5/* build/gh-pages/ + [ -d build/dokka ] && cp -a build/dokka build/gh-pages/ + + mkdir -p build/gh-pages/maven2 + [ -d "build/repo" ] && cp -a build/repo/* build/gh-pages/maven2/ + + ls -lad build/gh-pages + du -s build/gh-pages + + - name: Upload - java${{ matrix.jvm }}-gradle${{ matrix.gradle }}-github-pages + uses: actions/upload-pages-artifact@main + if: false + with: + name: java${{ matrix.jvm }}-github-pages + path: build/gh-pages/ + retention-days: 1 + + - name: Upload - perform + uses: actions/upload-artifact@v3 + if: ${{ matrix.os == 'ubuntu-latest' }} + with: + name: java${{ matrix.jvm }}-gradle${{ matrix.gradle }}-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts + path: dist/repo/* + if-no-files-found: warn diff --git a/.github/workflows/canary-consume.yml b/.github/workflows/canary-consume.yml new file mode 100644 index 0000000..ca4c7b3 --- /dev/null +++ b/.github/workflows/canary-consume.yml @@ -0,0 +1,481 @@ +name: CI-Gradle-canary-consume +# This build exists to test compatibility of the plugin produces with the latest Gradle version +# This is checking and reporting about the user perspective of consuming this plugin +# This also indirectly tests against JVM updates as well but that is not considered the main focus +# +# So I'm calling this a canary as it provides an early warning after a new official Gradle release +# of consumer issues. We do not test release candidates or against any Gradle builds that are not +# an official release as there is no maintenance capacity to keep uptodate with daily issues from +# doing this not any reason to thing doing this will improve the quality of the plugin. +# +# Gradle publishes public data to in this area to help with automation: +# https://services.gradle.org/versions/ +# https://raw.githubusercontent.com/gradle/gradle/master/released-versions.json + +## TODO build project test, using newer Gradle versions, setup matrix of useful version +## TODO run deprecation test turn on warnings, collect output to summary +## TODO emit compile log output warnings to summary + +on: + workflow_dispatch: + inputs: + GRADLE_TARGET_ENABLE_integrationTest: + description: 'Run with integrationTest ?' + default: true + type: boolean + schedule: + # setup weekly canary consume + - cron: '45 4 * * 6' + +jobs: + build: + runs-on: ubuntu-latest + env: + GHA_INPUT_BUILD_JVM: 8 + GRADLE_EXTRA_ARGS: --no-daemon + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: GHA Option Setup + run: | + if [ -f "original/gradle.properties" ] + then + gradle_properties_path="original/gradle.properties" + else + gradle_properties_path="gradle.properties" + fi + + if [ -z "${GRADLE_TARGET_ENABLE_integrationTest}" ] && [ -n "${{ github.event.schedule }}" ]; then + # force this on for schedule build + # "${{ github.event.schedule }}" == "45 4 18 * *" + # $GITHUB_EVENT_NAME == "schedule" + echo "GRADLE_TARGET_ENABLE_integrationTest=true" >> $GITHUB_ENV + fi + target_plugin="org.unbroken-dome.xjc" + target_group=$(grep "^group=" $gradle_properties_path | cut -d'=' -f2-) + target_artifact="gradle-xjc-plugin" + target_version=$(grep "^version=" $gradle_properties_path | cut -d'=' -f2-) + + echo "target_plugin=$target_plugin" >> $GITHUB_ENV + echo "target_group=$target_group" >> $GITHUB_ENV + echo "target_artifact=$target_artifact" >> $GITHUB_ENV + echo "target_version=$target_version" >> $GITHUB_ENV + + - name: Java + uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: ${{ env.GHA_INPUT_BUILD_JVM }} + + - name: Gradle - wrapper-validation-action + uses: gradle/wrapper-validation-action@v1 + + - name: Gradle - setup + uses: gradle/gradle-build-action@v2 + + - name: Report Versions + run: | + # Print verbose diagnostics into logs + java -version + + # download-artifact removes executable perm from files + test -x ./gradlew || chmod -c a+x ./gradlew + # Now run it + ./gradlew -v + + JAVA_ARG_VERSION=$(java -version 2>&1 | sed -e ':a;N;$!ba;s/\n/
/g' -e 's#|#\\|#g') + JAVA_ARG_VERSION_SUMMARY=$(java -version 2>&1 | head -n1 | sed -e 's#openjdk\s\+##' -e 's#version\s\+##' -e 's#"##g' -e 's#\s\+.*$##') + GRADLE_ARG_VERSION=$(./gradlew -v 2>&1 | sed -e ':a;N;$!ba;s/\n/
/g' -e 's#|#\\|#g') + GRADLE_WRAPPER_VERSION=$(egrep "^distributionUrl\s*=" gradle/wrapper/gradle-wrapper.properties | sed -e 's#^.*=##' -e 's#.*distributions/##' -e 's#^gradle\-##' -e 's#\-.*$##') + + cat <> /tmp/GITHUB_STEP_SUMMARY$$.txt + Gradle Version $GRADLE_VERSION (wrapper ${GRADLE_WRAPPER_VERSION}) JDK $JAVA_ARG_VERSION_SUMMARY (${{ env.GHA_INPUT_BUILD_JVM }}) + + | Package | Details | + | ---------- | --------------------- | + | Java | ${JAVA_ARG_VERSION} | + | Gradle | ${GRADLE_ARG_VERSION} | + EOF + + cat /tmp/GITHUB_STEP_SUMMARY$$.txt + cat /tmp/GITHUB_STEP_SUMMARY$$.txt >> $GITHUB_STEP_SUMMARY + + - name: Gradle - dependencies + env: # to resolve artifacts from GH packages + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: ./gradlew $GRADLE_EXTRA_ARGS dependencies + + - name: Gradle - assemble + env: # to resolve artifacts from GH packages + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: ./gradlew $GRADLE_EXTRA_ARGS assemble + + - name: Gradle - check + run: ./gradlew $GRADLE_EXTRA_ARGS check + + - name: Gradle - integrationTest + if: ${{ vars.GRADLE_TARGET_ENABLE_integrationTest == 'true' || inputs.GRADLE_TARGET_ENABLE_integrationTest }} + run: ./gradlew $GRADLE_EXTRA_ARGS "-Dorg.unbrokendome.gradle.plugins.xjc.testutil.GradleVersions=${GRADLE_VERSION}" integrationTest + + - name: Gradle - asciidoctor + run: ./gradlew $GRADLE_EXTRA_ARGS asciidoctor + + - name: Gradle - dokka + run: ./gradlew $GRADLE_EXTRA_ARGS dokka + + - name: Gradle - publish + run: ./gradlew $GRADLE_EXTRA_ARGS publish + + - name: Gradle - deprecation check + run: ./gradlew $GRADLE_EXTRA_ARGS publish + + - name: Upload - prepare + if: true # ${{ matrix.os == 'ubuntu-latest' }} + shell: bash + run: | + mkdir dist + _build_repo_list=$(find . -type d -path "*/build/repo") + if [ -n "${_build_repo_list}" ] + then + for dir in ${_build_repo_list} + do + cp -a "$dir" "dist/" + done + else + echo "$0: no **/build/repo directories found" 1>&2 + fi + find "dist" -type f -exec ls -ld {} \; + du -s "dist" + + mkdir -p build/gh-pages + [ -d build/reports/tests ] && cp -a build/reports/tests build/gh-pages/ + [ -d build/asciidoc/html5 ] && cp -a build/asciidoc/html5/* build/gh-pages/ + [ -d build/dokka ] && cp -a build/dokka build/gh-pages/ + + mkdir -p build/gh-pages/maven2 + [ -d "build/repo" ] && cp -a build/repo/* build/gh-pages/maven2/ + + ls -lad build/gh-pages + du -s build/gh-pages + + - name: Upload - java${{ matrix.jvm }}-gradle${{ matrix.gradle }}-github-pages + uses: actions/upload-pages-artifact@main + if: false + with: + name: java${{ matrix.jvm }}-github-pages + path: build/gh-pages/ + retention-days: 1 + + - name: Upload - perform + uses: actions/upload-artifact@v3 + if: true # ${{ matrix.os == 'ubuntu-latest' }} + with: + name: java${{ env.GHA_INPUT_BUILD_JVM }}-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-build-artifacts + path: '*' + if-no-files-found: error + + + # Now we have the plugin built using release engineering settings (such as Java8 built with Gradle 6.6.1) + # we now consume it and perform tests across multiple JVMs and Gradle combintations. The integrationTest + # matrix suite already gets the project a long way there on this. + # TODO use a plugin repository source override to be the build/repo/** output directory from 'build' job. + # Then switch the checkout/download-artifact to place the downloaded copy in a subdir and provide options + # to ensure gradle. Need to execute + consume: + needs: build + strategy: + max-parallel: 3 + matrix: + # Maintenance update as necessary the expected latest Gradle version supports the JVM matrix listed + os: [ubuntu-latest] + jvm: ['8', '11', '17', '21'] + gradle: [ + 'latest', + '8', + '8.5', # JDK21 + '7', + '7.6', + '7.3', # JDK11 + '6', + '6.6.1', # self-hosted build/consume + '5', + '5.6' + ] + exclude: + - jvm: 21 + gradle: 7 + - jvm: 21 + gradle: 7.6 + - jvm: 21 + gradle: 7.3 + - jvm: 21 + gradle: 6 + - jvm: 21 + gradle: 6.6.1 + - jvm: 21 + gradle: 5 + - jvm: 21 + gradle: 5.6 + - jvm: 17 + gradle: 6 + - jvm: 17 + gradle: 6.6.1 + - jvm: 17 + gradle: 5 + - jvm: 17 + gradle: 5.6 + fail-fast: false + runs-on: ${{ matrix.os }} + env: + GRADLE_EXTRA_ARGS: -DexcludeDocsTasks=true --no-daemon --warning-mode=all + GHA_INPUT_BUILD_JVM: 8 + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + path: original + + - name: GHA Option Setup + run: | + if [ -f "original/gradle.properties" ] + then + gradle_properties_path="original/gradle.properties" + else + gradle_properties_path="gradle.properties" + fi + + if [ -z "${GRADLE_TARGET_ENABLE_integrationTest}" ] && [ -n "${{ github.event.schedule }}" ]; then + # force this on for schedule build + # "${{ github.event.schedule }}" == "45 4 18 * *" + # $GITHUB_EVENT_NAME == "schedule" + echo "GRADLE_TARGET_ENABLE_integrationTest=true" >> $GITHUB_ENV + fi + target_plugin="org.unbroken-dome.xjc" + target_group=$(grep "^group=" $gradle_properties_path | cut -d'=' -f2-) + target_artifact="gradle-xjc-plugin" + target_version=$(grep "^version=" $gradle_properties_path | cut -d'=' -f2-) + + echo "target_plugin=$target_plugin" >> $GITHUB_ENV + echo "target_group=$target_group" >> $GITHUB_ENV + echo "target_artifact=$target_artifact" >> $GITHUB_ENV + echo "target_version=$target_version" >> $GITHUB_ENV + + - uses: actions/download-artifact@v3 + with: + name: java${{ env.GHA_INPUT_BUILD_JVM }}-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-build-artifacts + path: . + + - name: Matrix Check + run: | + pwd + ls -la + # TODO We restored the build, so the dist should not be here, when we use plugin respotory from local files dist/repo + # we can check out clean project here and this move won't be needed + [ -d dist ] && mv -v dist dist_moved + + ## Disable runs requesting invalid matrix (done via 'strategy.matrix.exclude' GHA setting) + # jvm=21 only latest 8.5 + # jvm=17 only latest 8.5 7 7.6 7.3 + # jvm=11 only latest 8.5 7 7.6 7.3 6 5 5.6 + # jvm=8 only latest 8.5 7 7.6 7.3 6 5 5.6 + # Resolve all values to actual value + # Remove duplicates (and alias runs) + if [ -z "${{ matrix.os }}" ] + then + echo "$0: matrix.os is not setup" 1>&2 + exit 1 + fi + if [ -z "${{ matrix.jvm }}" ] + then + echo "$0: matrix.jvm is not setup" 1>&2 + exit 1 + fi + if [ -z "${{ matrix.gradle }}" ] + then + echo "$0: matrix.gradle is not setup" 1>&2 + exit 1 + fi + + - name: Gradle Version Setup + run: | + # + curl -s "https://raw.githubusercontent.com/gradle/gradle/master/released-versions.json" > released-versions.json + + # Only supporting 5.6 or newer + GRADLE_ALL_VERSIONS=$(jq '.finalReleases[].version' -r released-versions.json | sort -rn | tr '\n' ' ' | sed -e 's#\s5.5.1\s.*##') + echo "GRADLE_ALL_VERSIONS=$GRADLE_ALL_VERSIONS" + + GRADLE_CANARY_VERSION=$(jq '.finalReleases[].version' -r released-versions.json | sort -rn | head -n1) + echo "GRADLE_CANARY_VERSION=$GRADLE_CANARY_VERSION" + + GRADLE_CANARY_MAJOR=$(echo -n "$GRADLE_CANARY_VERSION" | cut -d '.' -f1) + + regex_transform=$(echo -ne "${{ matrix.gradle }}" | sed -e 's#\.#\\\0#g') + GRADLE_MATRIX_VERSION=$(jq '.finalReleases[].version' -r released-versions.json | sort -rn | egrep -- "^${regex_transform}" | head -n1 | tr -d '\r\n') + echo "GRADLE_MATRIX_VERSION=$GRADLE_MATRIX_VERSION" + + GRADLE_MATRIX_MAJOR=$(echo -n "$GRADLE_MATRIX_VERSION" | cut -d '.' -f1) + + if gradlew -v || which gradlew + then + # confirm GHA didn't provide its own + echo "$0: ERROR ./gradlew appears to already be installed" 1>&2 + exit 1 + fi + + if [ "${{ matrix.gradle }}" = "latest" ] + then + GRADLE_VERSION="$GRADLE_CANARY_VERSION" + else + GRADLE_VERSION="$GRADLE_MATRIX_VERSION" + fi + GRADLE_VERSION_MAJOR=$(echo -n "$GRADLE_VERSION" | cut -d '.' -f1) + + # TODO disable duplicate runs which resolve to the same matrix versions + # latest 8 8.5 all resolve to 8.5 for example + + echo "GRADLE_ALL_VERSIONS=$GRADLE_ALL_VERSIONS" >> $GITHUB_ENV + echo "GRADLE_CANARY_VERSION=$GRADLE_CANARY_VERSION" >> $GITHUB_ENV + echo "GRADLE_CANARY_MAJOR=$GRADLE_CANARY_MAJOR" >> $GITHUB_ENV + echo "GRADLE_MATRIX_VERSION=$GRADLE_MATRIX_VERSION" >> $GITHUB_ENV + echo "GRADLE_MATRIX_MAJOR=$GRADLE_MATRIX_MAJOR" >> $GITHUB_ENV + echo "GRADLE_VERSION=$GRADLE_VERSION" >> $GITHUB_ENV + echo "GRADLE_VERSION_MAJOR=$GRADLE_VERSION_MAJOR" >> $GITHUB_ENV + + # Make the version so with wrapper edit + sed -e 's/^distributionUrl=/\#\0/' -i gradle/wrapper/gradle-wrapper.properties + echo "distributionUrl=https\://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip" >> gradle/wrapper/gradle-wrapper.properties + + test -f gradle.properties + # Fixup gradle.properties based on Gradle major used to build + sed -e 's/^kotlinVersion=/\#\0/' -i gradle.properties + sed -e 's/^testSetsVersion=/\#\0/' -i gradle.properties + case "$GRADLE_VERSION_MAJOR" in + 5|6) echo "kotlinVersion=1.3.72" >> gradle.properties + echo "testSetsVersion=3.0.1" >> gradle.properties + ;; + 7) echo "kotlinVersion=1.6.21" >> gradle.properties + echo "testSetsVersion=4.0.0" >> gradle.properties + ;; + 8|*) echo "kotlinVersion=1.9.20" >> gradle.properties + if [ "${{ matrix.jvm }}" = "8" ] + then + echo "testSetsVersion=4.0.0" >> gradle.properties + else + # Needs Java11+ + echo "testSetsVersion=4.1.0" >> gradle.properties + fi + ;; + esac + echo "### gradle.properties:" + cat gradle.properties + + - name: Java + uses: actions/setup-java@v3 + with: + distribution: temurin + java-version: ${{ matrix.jvm }} + + - name: Gradle - wrapper-validation-action + uses: gradle/wrapper-validation-action@v1 + + - name: Gradle - setup + uses: gradle/gradle-build-action@v2 + + - name: Show Diff + run: | + git diff || true + + - name: Report Versions + run: | + # Print verbose diagnostics into logs + java -version + + # download-artifact removes executable perm from files + test -x ./gradlew || chmod -c a+x ./gradlew + # Now run it + ./gradlew -v + + JAVA_ARG_VERSION=$(java -version 2>&1 | sed -e ':a;N;$!ba;s/\n/
/g' -e 's#|#\\|#g') + JAVA_ARG_VERSION_SUMMARY=$(java -version 2>&1 | head -n1 | sed -e 's#openjdk\s\+##' -e 's#version\s\+##' -e 's#"##g' -e 's#\s\+.*$##') + GRADLE_ARG_VERSION=$(./gradlew -v 2>&1 | sed -e ':a;N;$!ba;s/\n/
/g' -e 's#|#\\|#g') + + cat <> /tmp/GITHUB_STEP_SUMMARY$$.txt + Gradle Version $GRADLE_VERSION (${{ matrix.gradle }}) JDK $JAVA_ARG_VERSION_SUMMARY (${{ matrix.jvm }}) + + | Package | Details | + | ---------- | --------------------- | + | Java | ${JAVA_ARG_VERSION} | + | Gradle | ${GRADLE_ARG_VERSION} | + EOF + + cat /tmp/GITHUB_STEP_SUMMARY$$.txt + cat /tmp/GITHUB_STEP_SUMMARY$$.txt >> $GITHUB_STEP_SUMMARY + + - name: Gradle - dependencies + env: # to resolve artifacts from GH packages + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: ./gradlew $GRADLE_EXTRA_ARGS dependencies + + - name: Gradle - check + run: | + if ! ./gradlew $GRADLE_EXTRA_ARGS check + then + ./gradlew $GRADLE_EXTRA_ARGS --stacktrace check + fi + + - name: Gradle - integrationTest [${{env.GRADLE_VERSION}}] + if: ${{ vars.GRADLE_TARGET_ENABLE_integrationTest == 'true' || inputs.GRADLE_TARGET_ENABLE_integrationTest }} + run: ./gradlew $GRADLE_EXTRA_ARGS "-Dorg.unbrokendome.gradle.plugins.xjc.testutil.GradleVersions=${GRADLE_VERSION}" integrationTest + + - name: Gradle - integrationTest [all] + if: ${{ vars.GRADLE_TARGET_ENABLE_integrationTest == 'true' || inputs.GRADLE_TARGET_ENABLE_integrationTest }} + run: ./gradlew $GRADLE_EXTRA_ARGS integrationTest + + - name: Upload - prepare + if: ${{ matrix.os == 'ubuntu-latest' }} + shell: bash + run: | + mkdir dist + _build_repo_list=$(find . -type d -path "*/build/repo") + if [ -n "${_build_repo_list}" ] + then + for dir in ${_build_repo_list} + do + cp -a "$dir" "dist/" + done + else + echo "$0: no **/build/repo directories found" 1>&2 + fi + find "dist" -type f -exec ls -ld {} \; + du -s "dist" + + mkdir -p build/gh-pages + [ -d build/reports/tests ] && cp -a build/reports/tests build/gh-pages/ + [ -d build/asciidoc/html5 ] && cp -a build/asciidoc/html5/* build/gh-pages/ + [ -d build/dokka ] && cp -a build/dokka build/gh-pages/ + + mkdir -p build/gh-pages/maven2 + [ -d "build/repo" ] && cp -a build/repo/* build/gh-pages/maven2/ + + ls -lad build/gh-pages + du -s build/gh-pages + + - name: Upload - java${{ matrix.jvm }}-gradle${{ matrix.gradle }}-github-pages + uses: actions/upload-pages-artifact@main + if: false + with: + name: java${{ matrix.jvm }}-github-pages + path: build/gh-pages/ + retention-days: 1 + + - name: Upload - perform + uses: actions/upload-artifact@v3 + if: ${{ matrix.os == 'ubuntu-latest' }} + with: + name: java${{ matrix.jvm }}-gradle${{ matrix.gradle }}-${{ env.target_version }}-consume-artifacts + path: dist/repo/* + if-no-files-found: warn From d1be795495cc27cb5aaf4ad44f379dbe39c267d3 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Mon, 11 Dec 2023 11:51:16 +0000 Subject: [PATCH 087/115] docs submodule -DexcludeDocsTasks will disable --- .github/workflows/build.yml | 7 ++- .github/workflows/canary-build.yml | 7 ++- .github/workflows/canary-consume.yml | 14 ++++-- build.gradle.kts | 49 +------------------ docs/build.gradle.kts | 72 ++++++++++++++++++++++++++++ settings.gradle.kts | 6 +++ 6 files changed, 99 insertions(+), 56 deletions(-) create mode 100644 docs/build.gradle.kts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a342276..e5509e4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -97,8 +97,11 @@ jobs: mkdir -p build/gh-pages cp -a build/reports/tests build/gh-pages/ - cp -a build/asciidoc/html5/* build/gh-pages/ - cp -a build/dokka build/gh-pages/ + + docs_build_dir="build" + [ -d docs/build ] && docs_build_dir="docs/build" || true + cp -a $docs_build_dir/asciidoc/html5/* build/gh-pages/ + cp -a $docs_build_dir/dokka build/gh-pages/ mkdir -p build/gh-pages/maven2 cp -a build/repo/* build/gh-pages/maven2/ diff --git a/.github/workflows/canary-build.yml b/.github/workflows/canary-build.yml index 0888ca2..346d71e 100644 --- a/.github/workflows/canary-build.yml +++ b/.github/workflows/canary-build.yml @@ -286,8 +286,11 @@ jobs: mkdir -p build/gh-pages [ -d build/reports/tests ] && cp -a build/reports/tests build/gh-pages/ - [ -d build/asciidoc/html5 ] && cp -a build/asciidoc/html5/* build/gh-pages/ - [ -d build/dokka ] && cp -a build/dokka build/gh-pages/ + + docs_build_dir="build" + [ -d docs/build ] && docs_build_dir="docs/build" || true + [ -d $docs_build_dir/asciidoc/html5 ] && cp -a $docs_build_dir/asciidoc/html5/* build/gh-pages/ + [ -d $docs_build_dir/dokka ] && cp -a $docs_build_dir/dokka build/gh-pages/ mkdir -p build/gh-pages/maven2 [ -d "build/repo" ] && cp -a build/repo/* build/gh-pages/maven2/ diff --git a/.github/workflows/canary-consume.yml b/.github/workflows/canary-consume.yml index ca4c7b3..8650804 100644 --- a/.github/workflows/canary-consume.yml +++ b/.github/workflows/canary-consume.yml @@ -151,8 +151,11 @@ jobs: mkdir -p build/gh-pages [ -d build/reports/tests ] && cp -a build/reports/tests build/gh-pages/ - [ -d build/asciidoc/html5 ] && cp -a build/asciidoc/html5/* build/gh-pages/ - [ -d build/dokka ] && cp -a build/dokka build/gh-pages/ + + docs_build_dir="build" + [ -d docs/build ] && docs_build_dir="docs/build" || true + [ -d $docs_build_dir/asciidoc/html5 ] && cp -a $docs_build_dir/asciidoc/html5/* build/gh-pages/ + [ -d $docs_build_dir/dokka ] && cp -a $docs_build_dir/dokka build/gh-pages/ mkdir -p build/gh-pages/maven2 [ -d "build/repo" ] && cp -a build/repo/* build/gh-pages/maven2/ @@ -455,8 +458,11 @@ jobs: mkdir -p build/gh-pages [ -d build/reports/tests ] && cp -a build/reports/tests build/gh-pages/ - [ -d build/asciidoc/html5 ] && cp -a build/asciidoc/html5/* build/gh-pages/ - [ -d build/dokka ] && cp -a build/dokka build/gh-pages/ + + docs_build_dir="build" + [ -d docs/build ] && docs_build_dir="docs/build" || true + [ -d $docs_build_dir/asciidoc/html5 ] && cp -a $docs_build_dir/asciidoc/html5/* build/gh-pages/ + [ -d $docs_build_dir/dokka ] && cp -a $docs_build_dir/dokka build/gh-pages/ mkdir -p build/gh-pages/maven2 [ -d "build/repo" ] && cp -a build/repo/* build/gh-pages/maven2/ diff --git a/build.gradle.kts b/build.gradle.kts index d78ea91..9fc3032 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,8 +4,6 @@ plugins { `maven-publish` id("org.unbroken-dome.test-sets") // version "$testSetsVersion" id("com.gradle.plugin-publish") version "0.21.0" - id("org.asciidoctor.convert") version "2.4.0" - id("org.jetbrains.dokka") version "0.10.1" } @@ -227,51 +225,6 @@ pluginBundle { } -tasks.named("dokka", org.jetbrains.dokka.gradle.DokkaTask::class) { - outputFormat = "html" - configuration { - externalDocumentationLink { - url = uri("https://docs.gradle.org/current/javadoc/").toURL() - } - reportUndocumented = false - sourceLink { - path = "src/main/kotlin" - url = "https://github.com/${githubRepositoryOwner}/gradle-xjc-plugin/blob/v${project.version}/src/main/kotlin" - lineSuffix = "#L" - } - perPackageOption { - prefix = "org.unbrokendome.gradle.plugins.xjc.internal" - suppress = true - } - } -} - - -asciidoctorj { - version = "2.4.1" -} - -dependencies { - "asciidoctor"("com.bmuschko:asciidoctorj-tabbed-code-extension:0.3") -} - - -tasks.named("asciidoctor", org.asciidoctor.gradle.AsciidoctorTask::class) { - sourceDir("docs") - sources(delegateClosureOf { include("index.adoc") }) - - options(mapOf( - "doctype" to "book" - )) - attributes(mapOf( - "GITHUB_REPOSITORY_OWNER" to githubRepositoryOwner, - "github-pages-uri" to "https://${githubRepositoryOwner}.github.io/gradle-xjc-plugin", - "github-uri" to "https://github.com/${githubRepositoryOwner}/gradle-xjc-plugin", - "project-version" to project.version, - "source-highlighter" to "prettify" - )) -} - apply { - from("${rootDir}/publish.gradle.kts") + from("${rootDir}/publish.gradle.kts") } diff --git a/docs/build.gradle.kts b/docs/build.gradle.kts new file mode 100644 index 0000000..8dfed59 --- /dev/null +++ b/docs/build.gradle.kts @@ -0,0 +1,72 @@ +import org.jetbrains.dokka.gradle.DokkaTask +import org.asciidoctor.gradle.AsciidoctorTask + +plugins { + kotlin("jvm") + id("org.asciidoctor.convert") version "2.4.0" + id("org.jetbrains.dokka") version "0.10.1" +} + +val kotlinVersion: String by extra + + +repositories { + mavenCentral() +} + + +fun resolveSystemGetenv(name: String, defaultValue: String? = null): String? { + if(System.getenv().containsKey(name)) + return System.getenv(name) + return defaultValue +} + +val githubRepositoryOwner = resolveSystemGetenv("GITHUB_REPOSITORY_OWNER", "unbroken-dome") + + +tasks.named("dokka", org.jetbrains.dokka.gradle.DokkaTask::class) { +//tasks.withType().configureEach { + outputFormat = "html" + configuration { + externalDocumentationLink { + url = uri("https://docs.gradle.org/current/javadoc/").toURL() + } + reportUndocumented = false + sourceLink { + path = "src/main/kotlin" + url = "https://github.com/${githubRepositoryOwner}/gradle-xjc-plugin/blob/v${project.version}/src/main/kotlin" + lineSuffix = "#L" + } + perPackageOption { + prefix = "org.unbrokendome.gradle.plugins.xjc.internal" + suppress = true + } + } +} + + +asciidoctorj { + version = "2.4.1" +} + +dependencies { + "asciidoctor"("com.bmuschko:asciidoctorj-tabbed-code-extension:0.3") +} + + +tasks.named("asciidoctor", org.asciidoctor.gradle.AsciidoctorTask::class) { +//tasks.withType().configureEach { + sourceDir(".") + sources(delegateClosureOf { include("index.adoc") }) + + options(mapOf( + "doctype" to "book" + )) + attributes(mapOf( + "GITHUB_REPOSITORY_OWNER" to githubRepositoryOwner, + "github-pages-uri" to "https://${githubRepositoryOwner}.github.io/gradle-xjc-plugin", + "github-uri" to "https://github.com/${githubRepositoryOwner}/gradle-xjc-plugin", + "project-version" to project.version, + "source-highlighter" to "prettify" + )) +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 6ec7f51..50b25df 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,3 +15,9 @@ pluginManagement { } rootProject.name = "gradle-xjc-plugin" + +if(System.getProperty("excludeDocsTasks") == null) { + include(":docs") +} else { + logger.warn("systemProperty \"excludeDocsTasks\" is present, causing project :docs exclusion") +} From 27b43d131f32ab73793cd388d2857a68ce5f44a2 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Mon, 11 Dec 2023 11:54:45 +0000 Subject: [PATCH 088/115] build.gradle.kts: Gradle 8.x compat xjcSourceSets --- build.gradle.kts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9fc3032..4667200 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -48,8 +48,19 @@ dependencies { for (xjcSourceSet in xjcSourceSets) { (xjcSourceSet.compileOnlyConfigurationName)(sourceSets["main"].output) - (xjcSourceSet.compileOnlyConfigurationName)(configurations["compileOnly"]) - (xjcSourceSet.implementationConfigurationName)(configurations["implementation"]) + + // Gradle 8.x does not allow referencing configurations[] like this anymore + // but it seems a convenience to unroll the deplist + + // for compileOnly() + //(xjcSourceSet.compileOnlyConfigurationName)(configurations["compileOnly"].allDependencies) + (xjcSourceSet.compileOnlyConfigurationName)(kotlin("stdlib-jdk8")) + (xjcSourceSet.compileOnlyConfigurationName)(gradleApi()) + + // for implementation() + //(xjcSourceSet.implementationConfigurationName)(configurations["implementation"].allDependencies) + (xjcSourceSet.implementationConfigurationName)("javax.activation:javax.activation-api:1.2.0") + (xjcSourceSet.implementationConfigurationName)("xml-resolver:xml-resolver:1.2") } "xjcCommonCompileOnly"("com.sun.xml.bind:jaxb-xjc:2.3.3") From 29d5f6bb26fdf8fe28083293dcf065f5816d48cc Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Mon, 11 Dec 2023 11:55:30 +0000 Subject: [PATCH 089/115] build.gradle.kts: JavaCompile.targetCompatibility = "1.8" (to match kotlin) From canary-consume testing, using newer JDK with Gradle 8.x will cause a configuration failure due to the mismatched target. Due to the JavaCompile inheriting the default of the JDK being used whilst kotlin output is locked. --- build.gradle.kts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 4667200..01143f5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -128,6 +128,12 @@ tasks.withType { kotlinOptions.freeCompilerArgs = listOf("-Xjvm-default=enable") } +// There is no *.java code in this project but newer Gradle complains if there +// is a mismatch with kotlin due to the runtime JDK being newer than kotlin target. +tasks.withType { + targetCompatibility = "1.8" +} + tasks.named("jar") { for (xjcSourceSet in xjcSourceSets) { From 74133779f08daf5deb5381d32ed7605ccdbfb959 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Mon, 11 Dec 2023 11:55:37 +0000 Subject: [PATCH 090/115] build.gradle.kts: kotlinVersion >= 1.6.20 use -Xjvm-default=all-compatibility --- build.gradle.kts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 01143f5..39a852d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -125,7 +125,11 @@ configurations.all { tasks.withType { kotlinOptions.jvmTarget = "1.8" - kotlinOptions.freeCompilerArgs = listOf("-Xjvm-default=enable") + if(kotlinVersion >= "1.6.20") { + kotlinOptions.freeCompilerArgs = listOf("-Xjvm-default=all-compatibility") + } else { + kotlinOptions.freeCompilerArgs = listOf("-Xjvm-default=enable") // 1.3 thru 1.6.0 (not 1.6.20) + } } // There is no *.java code in this project but newer Gradle complains if there From bba49445a73cd55f5bfa49757bad033372728137 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Mon, 11 Dec 2023 11:55:44 +0000 Subject: [PATCH 091/115] XjcPlugin.kt reflectMethodAndInvoke() for Gradle 5.6/6 use of setOutputDir(File) --- .../gradle/plugins/xjc/XjcPlugin.kt | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt index 2e725c6..ba4ffa7 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPlugin.kt @@ -6,10 +6,12 @@ import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Dependency import org.gradle.api.internal.HasConvention import org.gradle.api.plugins.JavaBasePlugin +import org.gradle.api.provider.Provider import org.gradle.api.tasks.SourceSetContainer import org.gradle.util.GradleVersion import org.unbrokendome.gradle.plugins.xjc.internal.GRADLE_VERSION_6_1 import org.unbrokendome.gradle.plugins.xjc.internal.MIN_REQUIRED_GRADLE_VERSION +import java.io.File class XjcPlugin : Plugin { @@ -153,12 +155,21 @@ class XjcPlugin : Plugin { val xjcOutputDir = generateTask.flatMap { it.outputDirectory } + // Gradle 6.1 introduced new API and 8.x removed the setOutputDir(File) method, so we can use reflection if (GradleVersion.current() >= GRADLE_VERSION_6_1) { - xjcSourceSetConvention.xjcSchema.destinationDirectory.set(xjcOutputDir) + val destinationDirectory = reflectMethodAndInvoke(xjcSourceSetConvention.xjcSchema, + "getDestinationDirectory") + reflectMethodAndInvoke(destinationDirectory!!, + "set", arrayOf(Provider::class.java), arrayOf(xjcOutputDir)) + // The intention is to maintain compatibility with Gradle 5.6+ and 8.x + //xjcSourceSetConvention.xjcSchema.destinationDirectory.set(xjcOutputDir) sourceSet.java.srcDir(xjcOutputDir) } else { - xjcSourceSetConvention.xjcSchema.outputDir = - project.file(generateTask.flatMap { it.outputDirectory }) + reflectMethodAndInvoke(xjcSourceSetConvention.xjcSchema, + "setOutputDir", arrayOf(File::class.java), arrayOf(project.file(generateTask.flatMap { it.outputDirectory }))) + // The intention is to maintain compatibility with Gradle 5.6+ and 8.x + //xjcSourceSetConvention.xjcSchema.outputDir = + // project.file(generateTask.flatMap { it.outputDirectory }) sourceSet.java.srcDir(xjcOutputDir) } @@ -170,6 +181,13 @@ class XjcPlugin : Plugin { } + // Perform method invocation via reflection API (to maintain compile time compatability with older Gradle versions) + private fun reflectMethodAndInvoke(target: Any, methodName: String, methodParameters: Array> = emptyArray(), values: Array = emptyArray()): Any? { + val method = if(methodParameters.isNotEmpty()) target.javaClass.getMethod(methodName, *methodParameters) else target.javaClass.getMethod(methodName) + return if(values.isNotEmpty()) method.invoke(target, *values) else method.invoke(target) + } + + private fun Project.defaultXjcDependencies(xjcVersion: String): List = checkNotNull(DefaultXjcToolDependenciesByVersion[xjcVersion]) { "Invalid XJC version: \"$version\". Valid values are: ${DefaultXjcToolDependenciesByVersion.keys}" From 6967ac1df068a9c7a14b94dabdbc93ee84544c6a Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 12 Dec 2023 16:39:51 +0000 Subject: [PATCH 092/115] build.yml: GRADLE_EXTRA_ARGS = --no-daemon --- .github/workflows/build.yml | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e5509e4..0141b43 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -51,37 +51,32 @@ jobs: distribution: temurin java-version: ${{ matrix.jvm }} - - name: Cache - uses: actions/cache@v3 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle', '**/gradle-wrapper.properties', '**/gradle.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- + - name: Gradle - wrapper-validation-action + uses: gradle/wrapper-validation-action@v1 - name: Gradle - setup uses: gradle/gradle-build-action@v2 - - name: Gradle - build - run: ./gradlew build + - name: Gradle - assemble + env: # to resolve artifacts from GH packages + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: ./gradlew $GRADLE_EXTRA_ARGS assemble - name: Gradle - check - run: ./gradlew check + run: ./gradlew $GRADLE_EXTRA_ARGS check - name: Gradle - integrationTest if: ${{ vars.GRADLE_TARGET_ENABLE_integrationTest == 'true' || inputs.GRADLE_TARGET_ENABLE_integrationTest }} - run: ./gradlew integrationTest + run: ./gradlew $GRADLE_EXTRA_ARGS integrationTest - name: Gradle - asciidoctor - run: ./gradlew asciidoctor + run: ./gradlew $GRADLE_EXTRA_ARGS asciidoctor - name: Gradle - dokka - run: ./gradlew dokka + run: ./gradlew $GRADLE_EXTRA_ARGS dokka - name: Gradle - publish - run: ./gradlew publish + run: ./gradlew $GRADLE_EXTRA_ARGS publish - name: Upload - prepare if: ${{ matrix.os == 'ubuntu-latest' }} @@ -129,6 +124,8 @@ jobs: needs: build runs-on: ubuntu-latest + env: + GRADLE_EXTRA_ARGS: --no-daemon steps: - name: Checkout uses: actions/checkout@v3 From b93bc6427370889941f6f004f0d573aa93fd0ea1 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 12 Dec 2023 16:40:38 +0000 Subject: [PATCH 093/115] build.gradle.kts: switch to org.darrylmiles.repack.org.unbroken-dome.test-sets This is due to the 4.1.0 release (needed for Gradle 8.x) being release with Java11 bytecode compatiblity which affects validating CI with JDK8+Gradle8. So a release of 3.0.1, 4.0.0 and 4.1.0 exist under a new GAV and using GitHubPackages distribution point. --- build.gradle.kts | 2 +- settings.gradle.kts | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 39a852d..0dd3dad 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ plugins { kotlin("jvm") `java-gradle-plugin` `maven-publish` - id("org.unbroken-dome.test-sets") // version "$testSetsVersion" + id("org.darrylmiles.repack.org.unbroken-dome.test-sets") // version "$testSetsVersion" id("com.gradle.plugin-publish") version "0.21.0" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 50b25df..d618ab2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,6 +11,32 @@ pluginManagement { if (requested.id.id == "org.unbroken-dome.test-sets") { useVersion(testSetsVersion) } + if (requested.id.id == "org.darrylmiles.repack.org.unbroken-dome.test-sets") { + useVersion(testSetsVersion) + } + } + + repositories { + gradlePluginPortal() + maven { + url = uri("https://maven.pkg.github.com/dlmiles/gradle-testsets-plugin") + content { + // this repository only contains artifacts for specific groups + includeGroup("org.darrylmiles.repack.org.unbroken-dome.test-sets") + includeGroup("org.darrylmiles.repack.org.unbroken-dome") + } + + val GITHUB_USERNAME = System.getenv("GITHUB_USERNAME") ?: System.getenv("GITHUB_ACTOR") ?: "" + val GITHUB_TOKEN = System.getenv("GITHUB_TOKEN") ?: System.getenv("GH_TOKEN") ?: "" + if(GITHUB_USERNAME.isEmpty()) { logger.warn("\$GITHUB_USERNAME not set") } + if(GITHUB_TOKEN.isEmpty()) { logger.warn("\$GITHUB_TOKEN not set") } + // Any valid GH credentials are necessary to download dependencies from GitHubPackages + credentials { + username = GITHUB_USERNAME + password = GITHUB_TOKEN + } + } + mavenCentral() } } From d16ad00870800c0f1cee07fc6863510c3c891c42 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 12 Dec 2023 16:41:13 +0000 Subject: [PATCH 094/115] o.d.repack.org.unbroken-dome.test-sets fixup CI & gradle.properties commentry Due to switch to org.darrylmiles.repack.org.unbroken-dome.test-sets --- .github/workflows/canary-build.yml | 8 ++++++-- .github/workflows/canary-consume.yml | 8 ++++++-- gradle.properties | 5 ++++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/canary-build.yml b/.github/workflows/canary-build.yml index 346d71e..0be682f 100644 --- a/.github/workflows/canary-build.yml +++ b/.github/workflows/canary-build.yml @@ -175,9 +175,13 @@ jobs: 8|*) echo "kotlinVersion=1.9.20" >> gradle.properties if [ "${{ matrix.jvm }}" = "8" ] then - echo "testSetsVersion=4.0.0" >> gradle.properties + # The official org.unbroken-dome.test-sets 4.1.0 Needs Java11+ and is the first version to support Gradle 8.x + #echo "testSetsVersion=4.0.0" >> gradle.properties + # So this is why this if[] exists, but the we now use unofficial: + #org.darrylmiles.repack.org.unbroken-dome.test-sets which a release in Java8 bytecode of 4.1.0 + echo "testSetsVersion=4.1.0" >> gradle.properties else - # Needs Java11+ + # The official org.unbroken-dome.test-sets 4.1.0 Needs Java11+ echo "testSetsVersion=4.1.0" >> gradle.properties fi ;; diff --git a/.github/workflows/canary-consume.yml b/.github/workflows/canary-consume.yml index 8650804..5f46fe7 100644 --- a/.github/workflows/canary-consume.yml +++ b/.github/workflows/canary-consume.yml @@ -366,9 +366,13 @@ jobs: 8|*) echo "kotlinVersion=1.9.20" >> gradle.properties if [ "${{ matrix.jvm }}" = "8" ] then - echo "testSetsVersion=4.0.0" >> gradle.properties + # The official org.unbroken-dome.test-sets 4.1.0 Needs Java11+ and is the first version to support Gradle 8.x + #echo "testSetsVersion=4.0.0" >> gradle.properties + # So this is why this if[] exists, but the we now use unofficial: + #org.darrylmiles.repack.org.unbroken-dome.test-sets which a release in Java8 bytecode of 4.1.0 + echo "testSetsVersion=4.1.0" >> gradle.properties else - # Needs Java11+ + # The official org.unbroken-dome.test-sets 4.1.0 Needs Java11+ echo "testSetsVersion=4.1.0" >> gradle.properties fi ;; diff --git a/gradle.properties b/gradle.properties index 923b30c..b3ff9dc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,10 @@ ## Gradle 8.x building and testing #kotlinVersion=1.9.20 -# This needs Java11+ but is the first version to support Gradle 8.x +## The official org.unbroken-dome.test-sets 4.1.0 Needs Java11+ and is the first version to support Gradle 8.x +##testSetsVersion=4.0.0 +## So this is why these comments exist, but we now use unofficial: +##org.darrylmiles.repack.org.unbroken-dome.test-sets which a release in Java8 bytecode of 4.1.0 #testSetsVersion=4.1.0 ## Gradle 7.x building and testing From 9c6d5fdbdcb60ecc7c31b6ebd795ef8ff6d64f9c Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 12 Dec 2023 16:42:32 +0000 Subject: [PATCH 095/115] REVIEW: IDE error markers over lack of this keyword use ".... can't be called from this context by implicit receiver. Use the explicit one if necessary" Think it is an IDE issue using 1.9.21 capable editor against a 1.3 configured codebase? --- .../xjc/testutil/assertions/BuildResult.kt | 2 +- .../gradle/plugins/xjc/XjcGenerateTest.kt | 46 +++++------ .../gradle/plugins/xjc/XjcPluginTest.kt | 80 +++++++++---------- .../plugins/xjc/XjcSourceSetConventionTest.kt | 28 +++---- .../xjc/testutil/assertions/Configuration.kt | 4 +- .../xjc/testutil/assertions/Container.kt | 4 +- .../xjc/testutil/assertions/Extension.kt | 18 ++--- .../xjc/testutil/assertions/GradleProject.kt | 4 +- .../xjc/testutil/assertions/GradleTask.kt | 10 +-- .../xjc/testutil/assertions/Provider.kt | 14 ++-- 10 files changed, 102 insertions(+), 108 deletions(-) diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/BuildResult.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/BuildResult.kt index ec4b890..38024cd 100644 --- a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/BuildResult.kt +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/BuildResult.kt @@ -13,7 +13,7 @@ import org.gradle.testkit.runner.TaskOutcome fun Assert.task(taskPath: String) = transform(name = "task $taskPath") { actual -> actual.task(taskPath) - ?: expected("to include task '$taskPath', but was: ${show(actual.tasks.map { it.path })}") + ?: this.expected("to include task '$taskPath', but was: ${show(actual.tasks.map { it.path })}") } diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt index 0d414a4..02546cf 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcGenerateTest.kt @@ -54,16 +54,16 @@ object XjcGenerateTest : Spek({ } assertThat(task, "task").all { - prop(XjcGenerate::targetVersion).hasValueEqualTo("XYZ") - prop(XjcGenerate::encoding).hasValueEqualTo("ISO-8859-1") - prop(XjcGenerate::docLocale).hasValueEqualTo(Locale.ITALIAN.toString()) - prop(XjcGenerate::strictCheck).isFalse() - prop(XjcGenerate::packageLevelAnnotations).isFalse() - prop(XjcGenerate::noFileHeader).isFalse() - prop(XjcGenerate::enableIntrospection).isTrue() - prop(XjcGenerate::contentForWildcard).isTrue() - prop(XjcGenerate::readOnly).isTrue() - prop(XjcGenerate::extension).isTrue() + this.prop(XjcGenerate::targetVersion).hasValueEqualTo("XYZ") + this.prop(XjcGenerate::encoding).hasValueEqualTo("ISO-8859-1") + this.prop(XjcGenerate::docLocale).hasValueEqualTo(Locale.ITALIAN.toString()) + this.prop(XjcGenerate::strictCheck).isFalse() + this.prop(XjcGenerate::packageLevelAnnotations).isFalse() + this.prop(XjcGenerate::noFileHeader).isFalse() + this.prop(XjcGenerate::enableIntrospection).isTrue() + this.prop(XjcGenerate::contentForWildcard).isTrue() + this.prop(XjcGenerate::readOnly).isTrue() + this.prop(XjcGenerate::extension).isTrue() } } @@ -104,9 +104,9 @@ object XjcGenerateTest : Spek({ it("should create an XjcGenerate task for each existing source set") { assertThat(project.tasks, name = "tasks").all { - containsItem("xjcGenerate") + this.containsItem("xjcGenerate") .isInstanceOf(XjcGenerate::class) - containsItem("xjcGenerateTest") + this.containsItem("xjcGenerateTest") .isInstanceOf(XjcGenerate::class) } } @@ -125,13 +125,13 @@ object XjcGenerateTest : Spek({ } assertThat(task, name = "task").all { - prop(XjcGenerate::source) + this.prop(XjcGenerate::source) .containsOnly(project.file("src/main/schema/schema.xsd")) - prop(XjcGenerate::bindingFiles) + this.prop(XjcGenerate::bindingFiles) .containsOnly(project.file("src/main/schema/binding.xjb")) - prop(XjcGenerate::urlSources) + this.prop(XjcGenerate::urlSources) .containsOnly(project.file("src/main/schema/externals.url")) - prop(XjcGenerate::catalogs) + this.prop(XjcGenerate::catalogs) .containsOnly(project.file("src/main/schema/catalog.cat")) } } @@ -148,9 +148,9 @@ object XjcGenerateTest : Spek({ ) assertThat(task, name = "task").all { - prop(XjcGenerate::pluginClasspath) + this.prop(XjcGenerate::pluginClasspath) .containsOnly(project.file("custom-jaxb-plugin-1.2.3.jar")) - prop(XjcGenerate::episodes) + this.prop(XjcGenerate::episodes) .containsOnly(project.file("custom-episode-1.2.3.jar")) } } @@ -162,7 +162,7 @@ object XjcGenerateTest : Spek({ val resolved = XjcGenerate.resolveArtifactsForMavenUri(catalogResolutionConfig) assertThat(task, name = "task").all { - prop(XjcGenerate::catalogSerializableResolvedArtifact) + this.prop(XjcGenerate::catalogSerializableResolvedArtifact) .hasValueEqualTo(resolved) } } @@ -178,9 +178,9 @@ object XjcGenerateTest : Spek({ xjcSourceSetConvention.xjcGenerateEpisode.set(true) assertThat(task, name = "task").all { - prop(XjcGenerate::targetPackage) + this.prop(XjcGenerate::targetPackage) .hasValueEqualTo("com.example") - prop(XjcGenerate::generateEpisode) + this.prop(XjcGenerate::generateEpisode) .hasValueEqualTo(true) } } @@ -211,9 +211,9 @@ object XjcGenerateTest : Spek({ val task = project.tasks.getByName("xjcGenerate") as XjcGenerate assertThat(task, name = "task").all { - prop(XjcGenerate::outputDirectory) + this.prop(XjcGenerate::outputDirectory) .dirValue().isEqualTo(project.file("build/generated/sources/xjc/java/main")) - prop(XjcGenerate::episodeOutputDirectory) + this.prop(XjcGenerate::episodeOutputDirectory) .dirValue().isEqualTo(project.file("build/generated/resources/xjc/main")) } } diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt index 854d569..f8f9b5b 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcPluginTest.kt @@ -9,15 +9,9 @@ import org.gradle.api.plugins.JavaPlugin import org.gradle.api.tasks.SourceSetContainer import org.spekframework.spek2.Spek import org.spekframework.spek2.style.specification.describe -import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.containsItem -import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.hasConvention -import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.hasExtension -import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.hasValueEqualTo import org.unbrokendome.gradle.plugins.xjc.spek.applyPlugin import org.unbrokendome.gradle.plugins.xjc.spek.setupGradleProject -import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.extendsOnlyFrom -import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.isFalse -import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.isTrue +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.* import org.unbrokendome.gradle.plugins.xjc.testutil.evaluate import org.unbrokendome.gradle.plugins.xjc.testutil.requiredExtension import org.unbrokendome.gradle.plugins.xjc.testutil.sourceSets @@ -48,17 +42,17 @@ object XjcPluginTest : Spek({ it("xjc DSL extension should apply defaults") { assertThat(project) .hasExtension().all { - prop(XjcExtension::xjcVersion).hasValueEqualTo(XjcExtension.DEFAULT_XJC_VERSION) - prop(XjcExtension::xjcVersionUnsupportedStrategy).hasValueEqualTo(XjcExtension.DEFAULT_XJC_VERSION_UNSUPPORTED_STRATEGY) - prop(XjcExtension::srcDirName).hasValueEqualTo(XjcExtension.DEFAULT_SRC_DIR_NAME) - prop(XjcExtension::encoding).hasValueEqualTo("UTF-8") - prop(XjcExtension::strictCheck).isTrue() - prop(XjcExtension::packageLevelAnnotations).isTrue() - prop(XjcExtension::noFileHeader).isTrue() - prop(XjcExtension::enableIntrospection).isFalse() - prop(XjcExtension::contentForWildcard).isFalse() - prop(XjcExtension::readOnly).isFalse() - prop(XjcExtension::extension).isFalse() + this.prop(XjcExtension::xjcVersion).hasValueEqualTo(XjcExtension.DEFAULT_XJC_VERSION) + this.prop(XjcExtension::xjcVersionUnsupportedStrategy).hasValueEqualTo(XjcExtension.DEFAULT_XJC_VERSION_UNSUPPORTED_STRATEGY) + this.prop(XjcExtension::srcDirName).hasValueEqualTo(XjcExtension.DEFAULT_SRC_DIR_NAME) + this.prop(XjcExtension::encoding).hasValueEqualTo("UTF-8") + this.prop(XjcExtension::strictCheck).isTrue() + this.prop(XjcExtension::packageLevelAnnotations).isTrue() + this.prop(XjcExtension::noFileHeader).isTrue() + this.prop(XjcExtension::enableIntrospection).isFalse() + this.prop(XjcExtension::contentForWildcard).isFalse() + this.prop(XjcExtension::readOnly).isFalse() + this.prop(XjcExtension::extension).isFalse() } } @@ -81,28 +75,28 @@ object XjcPluginTest : Spek({ assertThat(project) .hasExtension().all { - prop(XjcExtension::xjcVersion).hasValueEqualTo("3.0") - prop(XjcExtension::xjcVersionUnsupportedStrategy).hasValueEqualTo("default") - prop(XjcExtension::srcDirName).hasValueEqualTo("xjc") - prop(XjcExtension::targetVersion).hasValueEqualTo("2.2") - prop(XjcExtension::encoding).hasValueEqualTo("ISO-8859-1") - prop(XjcExtension::docLocale).hasValueEqualTo(Locale.ITALIAN.toString()) - prop(XjcExtension::strictCheck).isFalse() - prop(XjcExtension::packageLevelAnnotations).isFalse() - prop(XjcExtension::noFileHeader).isFalse() - prop(XjcExtension::enableIntrospection).isTrue() - prop(XjcExtension::contentForWildcard).isTrue() - prop(XjcExtension::readOnly).isTrue() - prop(XjcExtension::extension).isTrue() + this.prop(XjcExtension::xjcVersion).hasValueEqualTo("3.0") + this.prop(XjcExtension::xjcVersionUnsupportedStrategy).hasValueEqualTo("default") + this.prop(XjcExtension::srcDirName).hasValueEqualTo("xjc") + this.prop(XjcExtension::targetVersion).hasValueEqualTo("2.2") + this.prop(XjcExtension::encoding).hasValueEqualTo("ISO-8859-1") + this.prop(XjcExtension::docLocale).hasValueEqualTo(Locale.ITALIAN.toString()) + this.prop(XjcExtension::strictCheck).isFalse() + this.prop(XjcExtension::packageLevelAnnotations).isFalse() + this.prop(XjcExtension::noFileHeader).isFalse() + this.prop(XjcExtension::enableIntrospection).isTrue() + this.prop(XjcExtension::contentForWildcard).isTrue() + this.prop(XjcExtension::readOnly).isTrue() + this.prop(XjcExtension::extension).isTrue() } } it("should create global XJC configurations") { assertThat(project.configurations, "configurations").all { - containsItem("xjcTool") - containsItem("xjcClasspathGlobal") - containsItem("xjcCatalogResolutionGlobal") + this.containsItem("xjcTool") + this.containsItem("xjcClasspathGlobal") + this.containsItem("xjcCatalogResolutionGlobal") } } } @@ -119,9 +113,9 @@ object XjcPluginTest : Spek({ val sourceSets = project.extensions.getByType(SourceSetContainer::class.java) assertThat(sourceSets).all { - containsItem("main") + this.containsItem("main") .hasConvention() - containsItem("test") + this.containsItem("test") .hasConvention() } } @@ -136,17 +130,17 @@ object XjcPluginTest : Spek({ it("should create XJC configurations for each existing source set") { assertThat(project.configurations, name = "configurations").all { - containsItem("xjcClasspath") + this.containsItem("xjcClasspath") .extendsOnlyFrom("xjcClasspathGlobal") - containsItem("xjcEpisodes") - containsItem("xjcCatalogResolution").all { + this.containsItem("xjcEpisodes") + this.containsItem("xjcCatalogResolution").all { extendsOnlyFrom("xjcCatalogResolutionGlobal", "compileClasspath") } - containsItem("testXjcClasspath") + this.containsItem("testXjcClasspath") .extendsOnlyFrom("xjcClasspathGlobal") - containsItem("testXjcEpisodes") - containsItem("testXjcCatalogResolution").all { + this.containsItem("testXjcEpisodes") + this.containsItem("testXjcCatalogResolution").all { extendsOnlyFrom("xjcCatalogResolutionGlobal", "testCompileClasspath") } } @@ -156,7 +150,7 @@ object XjcPluginTest : Spek({ it("should create XJC configurations for each new source set") { project.sourceSets.create("foo") assertThat(project.configurations, name = "configurations").all { - containsItem("fooXjcClasspath") + this.containsItem("fooXjcClasspath") .extendsOnlyFrom("xjcClasspathGlobal") } } diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcSourceSetConventionTest.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcSourceSetConventionTest.kt index 1f1ee6f..2f2c53a 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcSourceSetConventionTest.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/XjcSourceSetConventionTest.kt @@ -40,13 +40,13 @@ object XjcSourceSetConventionTest : Spek({ it("should return the correct task and configuration names") { assertThat(xjcSourceSetConvention).all { - prop(XjcSourceSetConvention::xjcGenerateTaskName) + this.prop(XjcSourceSetConvention::xjcGenerateTaskName) .isEqualTo("xjcGenerate") - prop(XjcSourceSetConvention::xjcClasspathConfigurationName) + this.prop(XjcSourceSetConvention::xjcClasspathConfigurationName) .isEqualTo("xjcClasspath") - prop(XjcSourceSetConvention::xjcEpisodesConfigurationName) + this.prop(XjcSourceSetConvention::xjcEpisodesConfigurationName) .isEqualTo("xjcEpisodes") - prop(XjcSourceSetConvention::xjcCatalogResolutionConfigurationName) + this.prop(XjcSourceSetConvention::xjcCatalogResolutionConfigurationName) .isEqualTo("xjcCatalogResolution") } } @@ -66,13 +66,13 @@ object XjcSourceSetConventionTest : Spek({ it("should return the correct task and configuration names") { assertThat(xjcSourceSetConvention).all { - prop(XjcSourceSetConvention::xjcGenerateTaskName) + this.prop(XjcSourceSetConvention::xjcGenerateTaskName) .isEqualTo("xjcGenerateCustom") - prop(XjcSourceSetConvention::xjcClasspathConfigurationName) + this.prop(XjcSourceSetConvention::xjcClasspathConfigurationName) .isEqualTo("customXjcClasspath") - prop(XjcSourceSetConvention::xjcEpisodesConfigurationName) + this.prop(XjcSourceSetConvention::xjcEpisodesConfigurationName) .isEqualTo("customXjcEpisodes") - prop(XjcSourceSetConvention::xjcCatalogResolutionConfigurationName) + this.prop(XjcSourceSetConvention::xjcCatalogResolutionConfigurationName) .isEqualTo("customXjcCatalogResolution") } } @@ -80,13 +80,13 @@ object XjcSourceSetConventionTest : Spek({ it("should set default include filters") { assertThat(xjcSourceSetConvention).all { - prop("xjcSchema") { it.xjcSchema } + this.prop("xjcSchema") { it.xjcSchema } .prop("includes") { it.includes } .containsOnly("**/*.xsd") - prop("xjcBinding") { it.xjcBinding } + this.prop("xjcBinding") { it.xjcBinding } .prop("includes") { it.includes } .containsOnly("**/*.xjb") - prop("xjcUrl") { it.xjcUrl } + this.prop("xjcUrl") { it.xjcUrl } .prop("includes") { it.includes } .containsOnly("**/*.url") } @@ -98,13 +98,13 @@ object XjcSourceSetConventionTest : Spek({ xjc.srcDirName.set("xjc") assertThat(xjcSourceSetConvention).all { - prop("xjcSchema") { it.xjcSchema } + this.prop("xjcSchema") { it.xjcSchema } .prop("srcDirs") { it.srcDirs } .containsOnly(project.file("src/custom/xjc")) - prop("xjcBinding") { it.xjcBinding } + this.prop("xjcBinding") { it.xjcBinding } .prop("srcDirs") { it.srcDirs } .containsOnly(project.file("src/custom/xjc")) - prop("xjcUrl") { it.xjcUrl } + this.prop("xjcUrl") { it.xjcUrl } .prop("srcDirs") { it.srcDirs } .containsOnly(project.file("src/custom/xjc")) } diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Configuration.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Configuration.kt index 91d3149..9537a48 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Configuration.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Configuration.kt @@ -10,7 +10,7 @@ import org.gradle.api.artifacts.Configuration fun Assert.extendsFrom(other: String) = given { actual -> if (other in actual.extendsFrom.map { it.name }) return - expected( + this.expected( "to extend from configuration \"$other\", but extends from: ${show(actual.extendsFrom)}", actual = actual.extendsFrom, expected = other ) @@ -21,7 +21,7 @@ fun Assert.extendsOnlyFrom(vararg others: String) = given { actua val extendsFromNames = actual.extendsFrom.map { it.name }.toSet() if (others.toSet() == extendsFromNames) return - expected( + this.expected( "to extend only from configuration(s) ${show(others)}, but extends from: ${show(extendsFromNames)}", actual = extendsFromNames, expected = others ) diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Container.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Container.kt index 60f4b87..810f33d 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Container.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Container.kt @@ -8,13 +8,13 @@ import org.gradle.api.NamedDomainObjectCollection fun Assert>.containsItem(name: String) = transform(name = "${this.name}[\"$name\"]") { actual -> - actual.findByName(name) ?: expected("to contain an item named \"$name\"", actual = actual.names) + actual.findByName(name) ?: this.expected("to contain an item named \"$name\"", actual = actual.names) } fun Assert>.doesNotContainItem(name: String) = given { actual -> val item = actual.findByName(name) if (item != null) { - expected("to contain no item named \"$name\", but did contain: ${show(item)}", actual = actual.names) + this.expected("to contain no item named \"$name\", but did contain: ${show(item)}", actual = actual.names) } } diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Extension.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Extension.kt index fa146db..4a5c0e8 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Extension.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Extension.kt @@ -11,32 +11,32 @@ import kotlin.reflect.KClass fun Assert.hasExtensionNamed(name: String): Assert = transform("extension \"$name\"") { actual -> if (actual !is ExtensionAware) { - expected("to be ExtensionAware") + this.expected("to be ExtensionAware") } actual.extensions.findByName(name) - ?: expected("to have an extension named \"$name\"") + ?: this.expected("to have an extension named \"$name\"") } inline fun Assert.hasExtension(name: String? = null): Assert = transform("extension " + (name?.let { "\"$it\"" } ?: show(E::class))) { actual -> if (actual !is ExtensionAware) { - expected("to be ExtensionAware") + this.expected("to be ExtensionAware") } val extensions = actual.extensions if (name != null) { val extension = extensions.findByName(name) - ?: expected("to have an extension named \"$name\" of type ${show(E::class)}") + ?: this.expected("to have an extension named \"$name\" of type ${show(E::class)}") (extension as? E) - ?: expected( + ?: this.expected( "to have an extension named \"$name\" of type ${show(E::class)}, " + "but actual type was: ${show(extension.javaClass)}" ) } else { extensions.findByType(E::class.java) - ?: expected("to have an extension of type ${show(E::class)}") + ?: this.expected("to have an extension of type ${show(E::class)}") } } @@ -44,12 +44,12 @@ inline fun Assert.hasExtension(name: String? = null): Ass fun Assert.hasConvention(type: KClass): Assert = transform("convention ${show(type)}") { actual -> if (actual !is HasConvention) { - expected("to support conventions") + this.expected("to support conventions") } actual.convention.findPlugin(type.java) - ?: expected("to have a convention plugin of type ${show(type)}") + ?: this.expected("to have a convention plugin of type ${show(type)}") } inline fun Assert.hasConvention(): Assert = - hasConvention(C::class) + this.hasConvention(C::class) diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/GradleProject.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/GradleProject.kt index 8a2fa0d..21fe4e5 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/GradleProject.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/GradleProject.kt @@ -11,7 +11,7 @@ import kotlin.reflect.KClass private fun Assert.containsTaskInternal(taskName: String) = transform("task \"$taskName\"") { actual -> actual.tasks.findByName(taskName) - ?: expected("to contain a task named \"$taskName\"") + ?: this.expected("to contain a task named \"$taskName\"") } @@ -21,4 +21,4 @@ fun Assert.containsTask(taskName: String, taskType: KClass Assert.containsTask(taskName: String) = - containsTask(taskName, T::class) + this.containsTask(taskName, T::class) diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/GradleTask.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/GradleTask.kt index 6965bc3..9bd20f7 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/GradleTask.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/GradleTask.kt @@ -18,7 +18,7 @@ val Assert.taskDependencies fun Assert.hasTaskDependency(taskName: String) = given { actual -> val dependencies = actual.taskDependencies.getDependencies(actual) if (dependencies.none { it.name == taskName }) { - expected("to have a dependency on task \"${taskName}\", but dependencies were: ${show(dependencies)}") + this.expected("to have a dependency on task \"${taskName}\", but dependencies were: ${show(dependencies)}") } } @@ -26,7 +26,7 @@ fun Assert.hasTaskDependency(taskName: String) = given { actual -> fun Assert.hasOnlyTaskDependency(taskName: String) = given { actual -> val dependencies = actual.taskDependencies.getDependencies(actual) if (dependencies.size != 1 || dependencies.firstOrNull()?.name != taskName) { - expected("to have a single dependency on task \"${taskName}\", but dependencies were: ${show(dependencies)}") + this.expected("to have a single dependency on task \"${taskName}\", but dependencies were: ${show(dependencies)}") } } @@ -49,20 +49,20 @@ fun Assert.hasTaskDependencies(vararg taskNames: String, exactly: Boolean fun Assert.doesNotHaveTaskDependency(taskName: String) = given { actual -> val dependencies = actual.taskDependencies.getDependencies(actual) if (dependencies.any { it.name == taskName }) { - expected("to have no dependency on task \"${taskName}\", but dependencies were: ${show(dependencies)}") + this.expected("to have no dependency on task \"${taskName}\", but dependencies were: ${show(dependencies)}") } } fun Assert.isSkipped() = given { actual -> if (!actual.isSkipped()) { - expected("to be skipped, but was not skipped") + this.expected("to be skipped, but was not skipped") } } fun Assert.isNotSkipped() = given { actual -> if (actual.isSkipped()) { - expected("not to be skipped, but was skipped") + this.expected("not to be skipped, but was skipped") } } diff --git a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Provider.kt b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Provider.kt index c27a072..09614ff 100644 --- a/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Provider.kt +++ b/src/test/kotlin/org/unbrokendome/gradle/plugins/xjc/testutil/assertions/Provider.kt @@ -14,31 +14,31 @@ import org.gradle.api.provider.Provider fun Assert>.isPresent() = transform { actual -> - actual.orNull ?: expected("${show(actual)} to have a value", actual = actual) + actual.orNull ?: this.expected("${show(actual)} to have a value", actual = actual) } fun Assert>.isTrue() = - isPresent().isTrue() + this.isPresent().isTrue() fun Assert>.isFalse() = - isPresent().isFalse() + this.isPresent().isFalse() fun Assert>.hasValueEqualTo(value: T) = - isPresent().isEqualTo(value) + this.isPresent().isEqualTo(value) fun Assert>.fileValue() = - isPresent() + this.isPresent() .prop("file") { it.asFile } fun Assert>.dirValue() = - isPresent() + this.isPresent() .prop("directory") { it.asFile } fun Assert>>.contains(key: K, value: V) = - isPresent().contains(key, value) + this.isPresent().contains(key, value) From 07810016a461cc01558e8e491cdd0d0c7778741b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Dec 2023 19:48:36 +0000 Subject: [PATCH 096/115] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 4 ++-- .github/workflows/canary-build.yml | 2 +- .github/workflows/canary-consume.yml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0141b43..6705a59 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,7 +25,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Version run: | @@ -128,7 +128,7 @@ jobs: GRADLE_EXTRA_ARGS: --no-daemon steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Version run: | diff --git a/.github/workflows/canary-build.yml b/.github/workflows/canary-build.yml index 0be682f..e706c6e 100644 --- a/.github/workflows/canary-build.yml +++ b/.github/workflows/canary-build.yml @@ -67,7 +67,7 @@ jobs: GRADLE_EXTRA_ARGS: --no-daemon --warning-mode=all steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Matrix Check run: | diff --git a/.github/workflows/canary-consume.yml b/.github/workflows/canary-consume.yml index 5f46fe7..fc9a177 100644 --- a/.github/workflows/canary-consume.yml +++ b/.github/workflows/canary-consume.yml @@ -36,7 +36,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: GHA Option Setup run: | @@ -237,7 +237,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: path: original From 679fbd9c7b6076b97528c51365d77394bd7da2c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Dec 2023 19:48:46 +0000 Subject: [PATCH 097/115] Bump actions/setup-java from 3 to 4 Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3 to 4. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- .github/workflows/canary-build.yml | 2 +- .github/workflows/canary-consume.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6705a59..923f8c3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,7 +46,7 @@ jobs: echo "target_version=$target_version" >> $GITHUB_ENV - name: Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: temurin java-version: ${{ matrix.jvm }} diff --git a/.github/workflows/canary-build.yml b/.github/workflows/canary-build.yml index e706c6e..1fd1c21 100644 --- a/.github/workflows/canary-build.yml +++ b/.github/workflows/canary-build.yml @@ -190,7 +190,7 @@ jobs: cat gradle.properties - name: Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: temurin java-version: ${{ matrix.jvm }} diff --git a/.github/workflows/canary-consume.yml b/.github/workflows/canary-consume.yml index fc9a177..60414cc 100644 --- a/.github/workflows/canary-consume.yml +++ b/.github/workflows/canary-consume.yml @@ -64,7 +64,7 @@ jobs: echo "target_version=$target_version" >> $GITHUB_ENV - name: Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: temurin java-version: ${{ env.GHA_INPUT_BUILD_JVM }} @@ -381,7 +381,7 @@ jobs: cat gradle.properties - name: Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: temurin java-version: ${{ matrix.jvm }} From 8a3d17a4d8266a38aef30e18cf4449ab9c16deaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Dec 2023 19:48:53 +0000 Subject: [PATCH 098/115] Bump actions/deploy-pages from 2 to 3 Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 2 to 3. - [Release notes](https://github.com/actions/deploy-pages/releases) - [Commits](https://github.com/actions/deploy-pages/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/deploy-pages dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 923f8c3..2d6e1ed 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -265,4 +265,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v2 + uses: actions/deploy-pages@v3 From 2ebb6df906b5ab289f1487d5d07cdec251dacebf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Dec 2023 19:49:14 +0000 Subject: [PATCH 099/115] Bump jayanta525/github-pages-directory-listing from 3.0.0 to 4.0.0 Bumps [jayanta525/github-pages-directory-listing](https://github.com/jayanta525/github-pages-directory-listing) from 3.0.0 to 4.0.0. - [Release notes](https://github.com/jayanta525/github-pages-directory-listing/releases) - [Commits](https://github.com/jayanta525/github-pages-directory-listing/compare/19ee734e017b656528749434335f75a1efb931bc...624ac8c4e56893256d3772f61a88e3b14d54314e) --- updated-dependencies: - dependency-name: jayanta525/github-pages-directory-listing dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2d6e1ed..880a401 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -227,17 +227,17 @@ jobs: ls -lR build - name: github-pages - artifacts/ Generate Directory Listings - uses: jayanta525/github-pages-directory-listing@19ee734e017b656528749434335f75a1efb931bc + uses: jayanta525/github-pages-directory-listing@624ac8c4e56893256d3772f61a88e3b14d54314e with: FOLDER: build/gh-pages/artifacts/ #directory to generate index - name: github-pages - java8/ Generate Directory Listings - uses: jayanta525/github-pages-directory-listing@19ee734e017b656528749434335f75a1efb931bc + uses: jayanta525/github-pages-directory-listing@624ac8c4e56893256d3772f61a88e3b14d54314e with: FOLDER: build/gh-pages/java8/ #directory to generate index - name: github-pages - java11/ Generate Directory Listings - uses: jayanta525/github-pages-directory-listing@19ee734e017b656528749434335f75a1efb931bc + uses: jayanta525/github-pages-directory-listing@624ac8c4e56893256d3772f61a88e3b14d54314e with: FOLDER: build/gh-pages/java11/ #directory to generate index From b26ea17489140c96e9382d557441599a511069dc Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 14 Dec 2023 08:49:46 +0000 Subject: [PATCH 100/115] Added: samples/wsdl/** + IT --- samples/groovy-dsl/wsdl/build.gradle | 29 +++++++++ samples/groovy-dsl/wsdl/settings.gradle | 8 +++ .../wsdl/src/main/schema/books.wsdl | 64 +++++++++++++++++++ .../groovy-dsl/wsdl/src/main/schema/books.xjb | 22 +++++++ .../wsdl/src/main/schema/lookup.xsd | 48 ++++++++++++++ .../wsdl/src/main/schema_other/books.xsd | 21 ++++++ .../wsdl/src/main/schema_other/common.xsd | 11 ++++ samples/kotlin-dsl/wsdl/build.gradle.kts | 29 +++++++++ samples/kotlin-dsl/wsdl/settings.gradle.kts | 8 +++ .../wsdl/src/main/schema/books.wsdl | 64 +++++++++++++++++++ .../kotlin-dsl/wsdl/src/main/schema/books.xjb | 22 +++++++ .../wsdl/src/main/schema/lookup.xsd | 48 ++++++++++++++ .../wsdl/src/main/schema_other/books.xsd | 21 ++++++ .../wsdl/src/main/schema_other/common.xsd | 11 ++++ .../gradle/plugins/xjc/WsdlIntegrationTest.kt | 43 +++++++++++++ 15 files changed, 449 insertions(+) create mode 100644 samples/groovy-dsl/wsdl/build.gradle create mode 100644 samples/groovy-dsl/wsdl/settings.gradle create mode 100644 samples/groovy-dsl/wsdl/src/main/schema/books.wsdl create mode 100644 samples/groovy-dsl/wsdl/src/main/schema/books.xjb create mode 100644 samples/groovy-dsl/wsdl/src/main/schema/lookup.xsd create mode 100644 samples/groovy-dsl/wsdl/src/main/schema_other/books.xsd create mode 100644 samples/groovy-dsl/wsdl/src/main/schema_other/common.xsd create mode 100644 samples/kotlin-dsl/wsdl/build.gradle.kts create mode 100644 samples/kotlin-dsl/wsdl/settings.gradle.kts create mode 100644 samples/kotlin-dsl/wsdl/src/main/schema/books.wsdl create mode 100644 samples/kotlin-dsl/wsdl/src/main/schema/books.xjb create mode 100644 samples/kotlin-dsl/wsdl/src/main/schema/lookup.xsd create mode 100644 samples/kotlin-dsl/wsdl/src/main/schema_other/books.xsd create mode 100644 samples/kotlin-dsl/wsdl/src/main/schema_other/common.xsd create mode 100644 src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/WsdlIntegrationTest.kt diff --git a/samples/groovy-dsl/wsdl/build.gradle b/samples/groovy-dsl/wsdl/build.gradle new file mode 100644 index 0000000..633e19f --- /dev/null +++ b/samples/groovy-dsl/wsdl/build.gradle @@ -0,0 +1,29 @@ +plugins { + id('java') + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' +} + + +repositories { + mavenCentral() +} + +xjc { + // This maybe inferred from the filename extension provided to XJC + extraArgs.addAll "-wsdl" +} + +// With wsimport there is: +// cd src/main/schema +// mkdir out +// wsimport -verbose -keep -extension -b books.xjb -d out -wsdllocation "http://localhost/book/lookup/service" -Xdebug -XdisableAuthenticator books.wsdl +// But this is outside the scope of XJB see other gradle plugins for wsimport support + +// XJC seems able to produce JAXB for *.wsdl and *.xsd but it includes all eligible +// file extensions from src/main/schema/** so when imports are used it appears to +// need those file to be relocated outside of src/main/schema so this is the reason +// for the schema_other directory + +dependencies { + implementation 'javax.xml.bind:jaxb-api:2.3.0' +} diff --git a/samples/groovy-dsl/wsdl/settings.gradle b/samples/groovy-dsl/wsdl/settings.gradle new file mode 100644 index 0000000..7ba1915 --- /dev/null +++ b/samples/groovy-dsl/wsdl/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = 'wsdl' diff --git a/samples/groovy-dsl/wsdl/src/main/schema/books.wsdl b/samples/groovy-dsl/wsdl/src/main/schema/books.wsdl new file mode 100644 index 0000000..0736325 --- /dev/null +++ b/samples/groovy-dsl/wsdl/src/main/schema/books.wsdl @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WSDL File Sample for Search_Service + + + + + + diff --git a/samples/groovy-dsl/wsdl/src/main/schema/books.xjb b/samples/groovy-dsl/wsdl/src/main/schema/books.xjb new file mode 100644 index 0000000..e0e6eb0 --- /dev/null +++ b/samples/groovy-dsl/wsdl/src/main/schema/books.xjb @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/samples/groovy-dsl/wsdl/src/main/schema/lookup.xsd b/samples/groovy-dsl/wsdl/src/main/schema/lookup.xsd new file mode 100644 index 0000000..6f4b791 --- /dev/null +++ b/samples/groovy-dsl/wsdl/src/main/schema/lookup.xsd @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/groovy-dsl/wsdl/src/main/schema_other/books.xsd b/samples/groovy-dsl/wsdl/src/main/schema_other/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/groovy-dsl/wsdl/src/main/schema_other/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/groovy-dsl/wsdl/src/main/schema_other/common.xsd b/samples/groovy-dsl/wsdl/src/main/schema_other/common.xsd new file mode 100644 index 0000000..c099e25 --- /dev/null +++ b/samples/groovy-dsl/wsdl/src/main/schema_other/common.xsd @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/samples/kotlin-dsl/wsdl/build.gradle.kts b/samples/kotlin-dsl/wsdl/build.gradle.kts new file mode 100644 index 0000000..786a6c0 --- /dev/null +++ b/samples/kotlin-dsl/wsdl/build.gradle.kts @@ -0,0 +1,29 @@ +plugins { + java + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" +} + + +repositories { + mavenCentral() +} + +xjc { + // This maybe inferred from the filename extension provided to XJC + extraArgs.addAll("-wsdl") +} + +// With wsimport there is: +// cd src/main/schema +// mkdir out +// wsimport -verbose -keep -extension -b books.xjb -d out -wsdllocation "http://localhost/book/lookup/service" -Xdebug -XdisableAuthenticator books.wsdl +// But this is outside the scope of XJB see other gradle plugins for wsimport support + +// XJC seems able to produce JAXB for *.wsdl and *.xsd but it includes all eligible +// file extensions from src/main/schema/** so when imports are used it appears to +// need those file to be relocated outside of src/main/schema so this is the reason +// for the schema_other directory + +dependencies { + implementation("javax.xml.bind:jaxb-api:2.3.0") +} diff --git a/samples/kotlin-dsl/wsdl/settings.gradle.kts b/samples/kotlin-dsl/wsdl/settings.gradle.kts new file mode 100644 index 0000000..c6d5d45 --- /dev/null +++ b/samples/kotlin-dsl/wsdl/settings.gradle.kts @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenLocal() + } +} + +rootProject.name = "wsdl" diff --git a/samples/kotlin-dsl/wsdl/src/main/schema/books.wsdl b/samples/kotlin-dsl/wsdl/src/main/schema/books.wsdl new file mode 100644 index 0000000..0736325 --- /dev/null +++ b/samples/kotlin-dsl/wsdl/src/main/schema/books.wsdl @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WSDL File Sample for Search_Service + + + + + + diff --git a/samples/kotlin-dsl/wsdl/src/main/schema/books.xjb b/samples/kotlin-dsl/wsdl/src/main/schema/books.xjb new file mode 100644 index 0000000..e0e6eb0 --- /dev/null +++ b/samples/kotlin-dsl/wsdl/src/main/schema/books.xjb @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/wsdl/src/main/schema/lookup.xsd b/samples/kotlin-dsl/wsdl/src/main/schema/lookup.xsd new file mode 100644 index 0000000..6f4b791 --- /dev/null +++ b/samples/kotlin-dsl/wsdl/src/main/schema/lookup.xsd @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/wsdl/src/main/schema_other/books.xsd b/samples/kotlin-dsl/wsdl/src/main/schema_other/books.xsd new file mode 100644 index 0000000..50b82f0 --- /dev/null +++ b/samples/kotlin-dsl/wsdl/src/main/schema_other/books.xsd @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/samples/kotlin-dsl/wsdl/src/main/schema_other/common.xsd b/samples/kotlin-dsl/wsdl/src/main/schema_other/common.xsd new file mode 100644 index 0000000..c099e25 --- /dev/null +++ b/samples/kotlin-dsl/wsdl/src/main/schema_other/common.xsd @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/WsdlIntegrationTest.kt b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/WsdlIntegrationTest.kt new file mode 100644 index 0000000..8e13cee --- /dev/null +++ b/src/integrationTest/kotlin/org/unbrokendome/gradle/plugins/xjc/WsdlIntegrationTest.kt @@ -0,0 +1,43 @@ +package org.unbrokendome.gradle.plugins.xjc + +import assertk.assertThat +import org.gradle.testkit.runner.GradleRunner +import org.junit.platform.commons.annotation.Testable +import org.unbrokendome.gradle.plugins.xjc.samples.TestEachDslFlavor +import org.unbrokendome.gradle.plugins.xjc.samples.UseSampleProject +import org.unbrokendome.gradle.plugins.xjc.testutil.GradleProjectDir +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.containsEntries +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.resolve +import org.unbrokendome.gradle.plugins.xjc.testutil.assertions.withJarFile +import java.io.File + + +@UseSampleProject("wsdl") +class WsdlIntegrationTest : AbstractBasicIntegrationTest() { + + @TestEachDslFlavor + @Testable + fun test(runner: GradleRunner, @GradleProjectDir projectDir: File) { + val projectName = "wsdl" + + super.test(runner, projectDir, projectName) + + assertThat(projectDir, "projectDir") + .resolve("build/libs/$projectName.jar") + .withJarFile { + containsEntries( + "org/unbroken_dome/gradle_xjc_plugin/samples/books/BookType.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/BooksType.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/ObjectFactory.class", + + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/common/BookId.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/common/ObjectFactory.class", + + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/lookup/ObjectFactory.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/lookup/SearchRequest.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/lookup/SearchResult.class", + "org/unbroken_dome/gradle_xjc_plugin/samples/books/alt/lookup/SearchResultItem.class" + ) + } + } +} From 61a3ce9e05a3ef84447ec363a11a3bce54d8000f Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 14 Dec 2023 08:52:08 +0000 Subject: [PATCH 101/115] ReflectionHelper.kt on JPMS enabled JDK>=9 was to noisy --- .../plugins/xjc/resolver/ReflectionHelper.kt | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ReflectionHelper.kt b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ReflectionHelper.kt index d2423e0..56115c1 100644 --- a/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ReflectionHelper.kt +++ b/src/main/kotlin/org/unbrokendome/gradle/plugins/xjc/resolver/ReflectionHelper.kt @@ -5,6 +5,7 @@ import java.io.IOException import java.io.InputStream import java.lang.reflect.InvocationTargetException import java.util.concurrent.ConcurrentLinkedQueue +import java.util.regex.Pattern class ReflectionHelper { @@ -67,7 +68,10 @@ class ReflectionHelper { } catch(e: Throwable) { // we catch this as the reflection approach is a best-effort and should not // cause a terminal failure due to an obscure JVM being different here - logger.warn("{}", "", e) + if(logger.isDebugEnabled) + logger.debug("{}", "", e) + else if(isJre8OrEarlier()) + logger.warn("{}: {}", e.javaClass.name, e.message) } return null } @@ -86,7 +90,10 @@ class ReflectionHelper { } catch(e: Throwable) { // we catch this as the reflection approach is a best-effort and should not // cause a terminal failure due to an obscure JVM being different here - logger.warn("{}", "", e) + if(logger.isDebugEnabled) + logger.debug("{}", "", e) + else if(isJre8OrEarlier()) + logger.warn("{}: {}", e.javaClass.name, e.message) } return null } @@ -105,10 +112,22 @@ class ReflectionHelper { } catch(e: Throwable) { // we catch this as the reflection approach is a best-effort and should not // cause a terminal failure due to an obscure JVM being different here - logger.warn("{}", "", e) + if(logger.isDebugEnabled) + logger.debug("{}", "", e) + else if(isJre8OrEarlier()) + logger.warn("{}: {}", e.javaClass.name, e.message) } return false } + + private fun isJre8OrEarlier(): Boolean { + val sysPropJavaVersion = System.getProperty("java.version") + val pattern = Pattern.compile("^\\s*(\\d+).*") + val versionMajor = pattern.matcher(sysPropJavaVersion).let { + if(it.matches()) Integer.valueOf(it.group(1)) else 0 + } + return versionMajor <= 8 + } } } From 439052654eff1c4782b57804e67baba92a5bafdd Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 14 Dec 2023 08:55:00 +0000 Subject: [PATCH 102/115] build.yml on.push.branch==master --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 880a401..cc06a1e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,6 +2,8 @@ name: CI-Gradle-build on: push: + branches: + - master release: workflow_dispatch: inputs: @@ -13,6 +15,7 @@ on: # FIXME we probably want this to work on the latest release tag only # * is a special character in YAML # setup monthly background build + # Hmm GH won't run schedule if no activity for 2 months - cron: '45 4 18 * *' jobs: From 7132a900c55e57569426a6f33d6dadb45b0ad69d Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 14 Dec 2023 08:55:54 +0000 Subject: [PATCH 103/115] publish.gradle.kts: GitHubPackages task added --- publish.gradle.kts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/publish.gradle.kts b/publish.gradle.kts index 5e780a6..bd29b83 100644 --- a/publish.gradle.kts +++ b/publish.gradle.kts @@ -22,6 +22,28 @@ allprojects { // Default is Maven buildDirectory publish only url = uri(layout.buildDirectory.dir("repo")) } + + + + if(findProperty("doGitHubPackagesPublish") == "true") { + val GITHUB_ACTOR = System.getenv("GITHUB_USERNAME") ?: System.getenv("GITHUB_ACTOR") ?: throw IllegalArgumentException() + val GITHUB_TOKEN = System.getenv("GITHUB_TOKEN") ?: System.getenv("GH_TOKEN") ?: throw IllegalArgumentException() + val GITHUB_REPOSITORY = System.getenv("GITHUB_REPOSITORY") + + assert(GITHUB_ACTOR.isNotEmpty() == true) + assert(GITHUB_TOKEN.isNotEmpty() == true) + assert(GITHUB_REPOSITORY.isNotEmpty() == true) + + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/${GITHUB_REPOSITORY}") + credentials { + username = GITHUB_ACTOR + password = GITHUB_TOKEN + } + } + } } } } + From 6cd73c58f888755b04cfc5a2dcc7281173559a42 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 14 Dec 2023 08:56:28 +0000 Subject: [PATCH 104/115] Bump org.spekframework.spek2:spek-dsl-jvm:2.0.15 (to match junit5) This now matched spek-runner-junit5 version already in use. --- build.gradle.kts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0dd3dad..9ec7748 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -103,7 +103,10 @@ dependencies { "testLibApi"(kotlin("stdlib-jdk8")) "testLibApi"("com.willowtreeapps.assertk:assertk-jvm:0.22") - "testImplementation"("org.spekframework.spek2:spek-dsl-jvm:2.0.9") + // Bumping these past 2.0.15 forces Gradle 7.x use for newer kotlin + "testImplementation"("org.spekframework.spek2:spek-dsl-jvm:2.0.15") + // 2.0.16 requires Java11 runtime, 2.0.17 reverted back to Java8 + // But needs Gradle 7.x kotlin "testRuntimeOnly"("org.spekframework.spek2:spek-runner-junit5:2.0.15") "integrationTestImplementation"(gradleTestKit()) From c4db909cefbca58cf574a71077a6ba29bc4bc929 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 14 Dec 2023 08:56:43 +0000 Subject: [PATCH 105/115] build.gradle.kts: com.willowtreeapps.assertk:assertk-jvm:0.22 commentry --- build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle.kts b/build.gradle.kts index 9ec7748..6df3cc1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -101,6 +101,7 @@ dependencies { "xjc40CompileOnly"("jakarta.xml.bind:jakarta.xml.bind-api:4.0.0") "testLibApi"(kotlin("stdlib-jdk8")) + // Bumping past 0.22 forces kotlin 1.4.x (Gradle 7+) "testLibApi"("com.willowtreeapps.assertk:assertk-jvm:0.22") // Bumping these past 2.0.15 forces Gradle 7.x use for newer kotlin From dd567829e5c4f20899f6738cc6cdba25966aa0f7 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 14 Dec 2023 08:59:30 +0000 Subject: [PATCH 106/115] publish.yml added --- .github/workflows/publish.yml | 210 ++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..e856b2e --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,210 @@ +name: publish + +on: + push: + branches: + - master + release: + workflow_dispatch: + inputs: + GITHUB_PACKAGES_PUBLISH: + description: 'Run publish Github Packages ?' + default: false + type: boolean + MAVEN_CENTRAL_PUBLISH: + description: 'Run publish Maven Central ?' + default: false + type: boolean + GAV_GROUP_ID: + description: 'GAV groupId ?' + default: org.darrylmiles.forked.org.unbroken-dome + type: string + GAV_VERSION: + description: 'GAV version ?' + default: + type: string + GRADLE_TARGET_integrationTest: + description: 'Run with integrationTest ?' + default: false + type: boolean + +jobs: + build: + runs-on: [ubuntu-latest] + + env: + GRADLE_EXTRA_ARGS: --no-daemon --warning-mode=all + JAVA_VERSION: 8 + GRADLE_TARGET_integrationTest: false + + permissions: + contents: read + packages: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate inputs + env: + GRADLE_TARGET_integrationTest: ${{ inputs.GRADLE_TARGET_integrationTest }} + GITHUB_PACKAGES_PUBLISH: ${{ inputs.GITHUB_PACKAGES_PUBLISH }} + MAVEN_CENTRAL_PUBLISH: ${{ inputs.MAVEN_CENTRAL_PUBLISH }} + GAV_GROUP_ID: ${{ inputs.GAV_GROUP_ID }} + GAV_VERSION: ${{ inputs.GAV_VERSION }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} + run: | + # apply defaults for on.schedule + if [ -z "${GRADLE_TARGET_integrationTest}" ] && [ -n "${{ github.event.schedule }}" ]; then + # force this on for schedule build + # "${{ github.event.schedule }}" == "45 4 18 * *" + # $GITHUB_EVENT_NAME == "schedule" + echo "GRADLE_TARGET_integrationTest=true" >> $GITHUB_ENV + fi + + # apply defaults for on.push + if [ -z "$GRADLE_TARGET_integrationTest" ] + then + GRADLE_TARGET_integrationTest=true + echo "GRADLE_TARGET_integrationTest=$GRADLE_TARGET_integrationTest (default)" + fi + if [ -z "$GITHUB_PACKAGES_PUBLISH" ] + then + GITHUB_PACKAGES_PUBLISH=false + echo "GITHUB_PACKAGES_PUBLISH=$GITHUB_PACKAGES_PUBLISH (default)" + fi + if [ -z "$MAVEN_CENTRAL_PUBLISH" ] + then + MAVEN_CENTRAL_PUBLISH=false + echo "MAVEN_CENTRAL_PUBLISH=$MAVEN_CENTRAL_PUBLISH (default)" + fi + + # copy to env (as currently they maybe from inputs.* and need to be propagated) + if [ -n "$GRADLE_TARGET_integrationTest" ] + then + echo "GRADLE_TARGET_integrationTest=$GRADLE_TARGET_integrationTest" >> $GITHUB_ENV + fi + if [ -n "$GITHUB_PACKAGES_PUBLISH" ] + then + echo "GITHUB_PACKAGES_PUBLISH=$GITHUB_PACKAGES_PUBLISH" >> $GITHUB_ENV + fi + if [ -n "$MAVEN_CENTRAL_PUBLISH" ] + then + echo "MAVEN_CENTRAL_PUBLISH=$MAVEN_CENTRAL_PUBLISH" >> $GITHUB_ENV + fi + + echo "GITHUB_PACKAGES_PUBLISH=$GITHUB_PACKAGES_PUBLISH" + echo "MAVEN_CENTRAL_PUBLISH=$MAVEN_CENTRAL_PUBLISH" + echo "GRADLE_TARGET_integrationTest=$GRADLE_TARGET_integrationTest" + + # token check + + # synchronize variable names with your build.gradle + if [ "$GITHUB_PACKAGES_PUBLISH" = "true" ] + then + if [ -z "$GITHUB_TOKEN" ] + then + echo "$0: GITHUB_TOKEN is not set" 1>&2 + exit 1 + fi + if [ -z "$GITHUB_ACTOR" ] + then + echo "$0: GITHUB_ACTOR is not set" 1>&2 + exit 1 + fi + fi + + # synchronize variable names with your build.gradle + if [ "$MAVEN_CENTRAL_PUBLISH" = "true" ] + then + if [ -z "$MAVEN_PASSWORD" ] + then + echo "$0: MAVEN_PASSWORD is not set" 1>&2 + exit 1 + fi + if [ -z "$MAVEN_USERNAME" ] + then + echo "$0: MAVEN_USERNAME is not set" 1>&2 + exit 1 + fi + fi + + if [ -n "$GAV_GROUP_ID" ] + then + sed -e 's/^\s*group\s*=\s*/#\0/' -i gradle.properties + echo "group=$GAV_GROUP_ID" >> gradle.properties + echo "GAV_GROUP_ID=$GAV_GROUP_ID" + fi + + if [ -n "$GAV_VERSION" ] + then + sed -e 's/^\s*version\s*=\s*/#\0/' -i gradle.properties + echo "version=$GAV_VERSION" >> gradle.properties + echo "GAV_VERSION=$GAV_VERSION" + fi + + git diff || true + + - name: Java + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: ${{ env.JAVA_VERSION }} + + - name: Gradle - wrapper-validation-action + uses: gradle/wrapper-validation-action@v1 + + - name: Gradle - setup + uses: gradle/gradle-build-action@v2 + + - name: Gradle - assemble + env: # to resolve artifacts from GH packages + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + ./gradlew $GRADLE_EXTRA_ARGS assemble + + - name: Gradle - check + run: | + ./gradlew $GRADLE_EXTRA_ARGS check + + - name: Gradle - integrationTest + if: ${{ env.GRADLE_TARGET_integrationTest != 'false' }} + run: | + ./gradlew $GRADLE_EXTRA_ARGS integrationTest + + - name: Gradle - asciidoctor + run: | + ./gradlew $GRADLE_EXTRA_ARGS asciidoctor + + - name: Gradle - dokka + run: | + ./gradlew $GRADLE_EXTRA_ARGS dokka + + - name: Gradle - publish local + run: | + ./gradlew $GRADLE_EXTRA_ARGS publish + find build/repo || true + + - name: Gradle - publish remote github packages + if: ${{ env.GITHUB_PACKAGES_PUBLISH == 'true' }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + ./gradlew -PdoGitHubPackagesPublish=true $GRADLE_EXTRA_ARGS publish + + - name: Gradle - publish remote maven central + if: ${{ env.MAVEN_CENTRAL_PUBLISH == 'true' }} + env: + MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }} + run: | + ./gradlew -PdoMavenCentralPublish=true $GRADLE_EXTRA_ARGS publish + + - name: Upload - publish repo + uses: actions/upload-artifact@v3 + with: + name: java${{ env.JAVA_VERSION }}-artifacts + path: build/repo/* + if-no-files-found: error From e64bdc68af4b671d2de04c7f6b242bbfee8b5b56 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Thu, 14 Dec 2023 08:59:45 +0000 Subject: [PATCH 107/115] README.adoc groupId for publish: org.darrylmiles.forked.org.unbroken-dome --- README.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.adoc b/README.adoc index 5ceac01..d07283c 100644 --- a/README.adoc +++ b/README.adoc @@ -8,7 +8,7 @@ endif::[] :github-pages-uri: https://dlmiles.github.io/gradle-xjc-plugin :github-uri: https://github.com/dlmiles/gradle-xjc-plugin :github-m2-uri: https://maven.pkg.github.com/dlmiles/gradle-xjc-plugin -:maven-groupId: io.github.dlmiles +:maven-groupId: org.darrylmiles.forked.org.unbroken-dome :uri-build-status: https://github.com/dlmiles/gradle-xjc-plugin/actions/workflows/build.yml :img-build-status: https://github.com/dlmiles/gradle-xjc-plugin/actions/workflows/build.yml/badge.svg From 7c303d3007ff1b973b8bb4bf777fc2e154b09920 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 23:42:25 +0000 Subject: [PATCH 108/115] Bump actions/download-artifact from 3 to 4 Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3 to 4. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 8 ++++---- .github/workflows/canary-consume.yml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cc06a1e..166cc6e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -152,25 +152,25 @@ jobs: echo "target_version=$target_version" >> $GITHUB_ENV - name: Download - java8-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: java8-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts path: build/java8-artifacts/ - name: Download - java8-github-pages - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: java8-github-pages path: build/java8-github-pages-artifacts/ - name: Download - java11-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: java11-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts path: build/java11-artifacts/ - name: Download - java11-github-pages - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: java11-github-pages path: build/java11-github-pages-artifacts/ diff --git a/.github/workflows/canary-consume.yml b/.github/workflows/canary-consume.yml index 60414cc..758b00f 100644 --- a/.github/workflows/canary-consume.yml +++ b/.github/workflows/canary-consume.yml @@ -266,7 +266,7 @@ jobs: echo "target_artifact=$target_artifact" >> $GITHUB_ENV echo "target_version=$target_version" >> $GITHUB_ENV - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: java${{ env.GHA_INPUT_BUILD_JVM }}-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-build-artifacts path: . From a3b9a09942f31ca6e39733876bcac6b74d9d653f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Dec 2023 23:42:17 +0000 Subject: [PATCH 109/115] Bump actions/upload-artifact from 3 to 4 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- .github/workflows/canary-build.yml | 2 +- .github/workflows/canary-consume.yml | 4 ++-- .github/workflows/publish.yml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 166cc6e..54d0473 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -115,7 +115,7 @@ jobs: retention-days: 1 - name: Upload - perform - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: ${{ matrix.os == 'ubuntu-latest' }} with: name: java${{ matrix.jvm }}-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts diff --git a/.github/workflows/canary-build.yml b/.github/workflows/canary-build.yml index 1fd1c21..226938d 100644 --- a/.github/workflows/canary-build.yml +++ b/.github/workflows/canary-build.yml @@ -311,7 +311,7 @@ jobs: retention-days: 1 - name: Upload - perform - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: ${{ matrix.os == 'ubuntu-latest' }} with: name: java${{ matrix.jvm }}-gradle${{ matrix.gradle }}-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts diff --git a/.github/workflows/canary-consume.yml b/.github/workflows/canary-consume.yml index 758b00f..9575c92 100644 --- a/.github/workflows/canary-consume.yml +++ b/.github/workflows/canary-consume.yml @@ -172,7 +172,7 @@ jobs: retention-days: 1 - name: Upload - perform - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: true # ${{ matrix.os == 'ubuntu-latest' }} with: name: java${{ env.GHA_INPUT_BUILD_JVM }}-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-build-artifacts @@ -483,7 +483,7 @@ jobs: retention-days: 1 - name: Upload - perform - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: ${{ matrix.os == 'ubuntu-latest' }} with: name: java${{ matrix.jvm }}-gradle${{ matrix.gradle }}-${{ env.target_version }}-consume-artifacts diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e856b2e..fa94918 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -203,7 +203,7 @@ jobs: ./gradlew -PdoMavenCentralPublish=true $GRADLE_EXTRA_ARGS publish - name: Upload - publish repo - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: java${{ env.JAVA_VERSION }}-artifacts path: build/repo/* From ef0a52f66d94721512d9d259f842e200ad0aa497 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 19 Dec 2023 08:55:27 +0000 Subject: [PATCH 110/115] Bump xjc40 com.sun.xml.bind:jaxb-xjc:4.0.4 --- build.gradle.kts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6df3cc1..c15adf5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -95,10 +95,10 @@ dependencies { "xjc30CompileOnly"("jakarta.xml.bind:jakarta.xml.bind-api:3.0.1") "xjc40CompileOnly"(xjcCommon.output) - "xjc40CompileOnly"("com.sun.xml.bind:jaxb-xjc:4.0.2") - "xjc40CompileOnly"("com.sun.xml.bind:jaxb-core:4.0.2") - "xjc40CompileOnly"("com.sun.xml.bind:jaxb-impl:4.0.2") - "xjc40CompileOnly"("jakarta.xml.bind:jakarta.xml.bind-api:4.0.0") + "xjc40CompileOnly"("com.sun.xml.bind:jaxb-xjc:4.0.4") + "xjc40CompileOnly"("com.sun.xml.bind:jaxb-core:4.0.4") + "xjc40CompileOnly"("com.sun.xml.bind:jaxb-impl:4.0.4") + "xjc40CompileOnly"("jakarta.xml.bind:jakarta.xml.bind-api:4.0.1") "testLibApi"(kotlin("stdlib-jdk8")) // Bumping past 0.22 forces kotlin 1.4.x (Gradle 7+) From 2b495529782a2c8a4064ab6194cc1af494d9db5b Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 19 Dec 2023 08:56:15 +0000 Subject: [PATCH 111/115] Bump xjc23 com.sun.xml.bind:jaxb-xjc:2.3.9 --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c15adf5..c209d66 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -78,9 +78,9 @@ dependencies { "xjc22CompileOnly"("javax.xml.bind:jaxb-api:2.2.11") "xjc23CompileOnly"(xjcCommon.output) - "xjc23CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.3.8") + "xjc23CompileOnly"("com.sun.xml.bind:jaxb-xjc:2.3.9") "xjc23CompileOnly"("com.sun.xml.bind:jaxb-core:2.3.0.1") - "xjc23CompileOnly"("com.sun.xml.bind:jaxb-impl:2.3.8") + "xjc23CompileOnly"("com.sun.xml.bind:jaxb-impl:2.3.9") "xjc23CompileOnly"("javax.xml.bind:jaxb-api:2.3.1") "xjc24CompileOnly"(xjcCommon.output) From 0c3bfa1f26f22da338e14b42ef8e6a29dbd8a1d2 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 19 Dec 2023 08:58:16 +0000 Subject: [PATCH 112/115] build.yml: Update actions/download-artifact@v4 with: github-token --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 54d0473..77a977f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -154,24 +154,28 @@ jobs: - name: Download - java8-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts uses: actions/download-artifact@v4 with: + github-token: ${{ secrets.GITHUB_TOKEN }} name: java8-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts path: build/java8-artifacts/ - name: Download - java8-github-pages uses: actions/download-artifact@v4 with: + github-token: ${{ secrets.GITHUB_TOKEN }} name: java8-github-pages path: build/java8-github-pages-artifacts/ - name: Download - java11-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts uses: actions/download-artifact@v4 with: + github-token: ${{ secrets.GITHUB_TOKEN }} name: java11-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-artifacts path: build/java11-artifacts/ - name: Download - java11-github-pages uses: actions/download-artifact@v4 with: + github-token: ${{ secrets.GITHUB_TOKEN }} name: java11-github-pages path: build/java11-github-pages-artifacts/ From c6ce86c5b953676dfc7509c566c7552381d7ac12 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Tue, 19 Dec 2023 08:59:34 +0000 Subject: [PATCH 113/115] canary-consume.yml: Update actions/download-artifact@v4 with: github-token --- .github/workflows/canary-consume.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/canary-consume.yml b/.github/workflows/canary-consume.yml index 9575c92..689dbea 100644 --- a/.github/workflows/canary-consume.yml +++ b/.github/workflows/canary-consume.yml @@ -268,6 +268,7 @@ jobs: - uses: actions/download-artifact@v4 with: + github-token: ${{ secrets.GITHUB_TOKEN }} name: java${{ env.GHA_INPUT_BUILD_JVM }}-${{ env.target_group }}-${{ env.target_artifact }}-${{ env.target_version }}-build-artifacts path: . From cc06963ea98ac9570e51de47015510273f3829ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Dec 2023 23:06:34 +0000 Subject: [PATCH 114/115] Bump actions/deploy-pages from 3 to 4 Bumps [actions/deploy-pages](https://github.com/actions/deploy-pages) from 3 to 4. - [Release notes](https://github.com/actions/deploy-pages/releases) - [Commits](https://github.com/actions/deploy-pages/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/deploy-pages dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 77a977f..c02ad3b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -272,4 +272,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v3 + uses: actions/deploy-pages@v4 From 8acbcda4517121d7329ae3aef777bccfc8c7dc67 Mon Sep 17 00:00:00 2001 From: "Darryl L. Miles" Date: Fri, 19 Jan 2024 06:51:41 +0000 Subject: [PATCH 115/115] 2.2.0-SNAPSHOT Main features: * JDK21 and Gradle 8.5 tested * Configuration Cache compatible (thanks Ryan Dens) --- README.adoc | 2 +- gradle.properties | 2 +- samples/groovy-dsl/basic/build.gradle | 2 +- samples/groovy-dsl/bindings/build.gradle | 2 +- samples/groovy-dsl/bindings_jakarta/build.gradle | 2 +- samples/groovy-dsl/catalogs/consumer/build.gradle | 2 +- samples/groovy-dsl/complete/consumer/build.gradle | 2 +- samples/groovy-dsl/complete/library/build.gradle | 2 +- samples/groovy-dsl/doclocale/build.gradle | 2 +- samples/groovy-dsl/episodes/episode-consumer/build.gradle | 2 +- samples/groovy-dsl/episodes/episode-producer/build.gradle | 2 +- samples/groovy-dsl/remote-schema/build.gradle | 2 +- samples/groovy-dsl/xjc-plugin/build.gradle | 2 +- samples/groovy-dsl/xjc-tool-2_1-legacy/build.gradle | 2 +- samples/groovy-dsl/xjc-tool-2_2-legacy/build.gradle | 2 +- samples/groovy-dsl/xjc-tool-2_2/build.gradle | 2 +- samples/groovy-dsl/xjc-tool-2_3/build.gradle | 2 +- samples/groovy-dsl/xjc-tool-2_4/build.gradle | 2 +- samples/groovy-dsl/xjc-tool-3_0-target-2_3/build.gradle | 2 +- samples/groovy-dsl/xjc-tool-3_0/build.gradle | 2 +- samples/groovy-dsl/xjc-tool-4_0/build.gradle | 2 +- samples/groovy-dsl/xjc-tool-future-latest/build.gradle | 2 +- samples/groovy-dsl/xjc-tool-future/build.gradle | 2 +- samples/groovy-dsl/xjc-version-2_1-legacy/build.gradle | 2 +- samples/groovy-dsl/xjc-version-2_2/build.gradle | 2 +- samples/groovy-dsl/xjc-version-2_3/build.gradle | 2 +- samples/groovy-dsl/xjc-version-2_4/build.gradle | 2 +- samples/groovy-dsl/xjc-version-3_0-target-2_3/build.gradle | 2 +- samples/groovy-dsl/xjc-version-3_0/build.gradle | 2 +- samples/groovy-dsl/xjc-version-4_0/build.gradle | 2 +- samples/groovy-dsl/xjc-version-default/build.gradle | 2 +- samples/groovy-dsl/xjc-version-ext-basics-annox/build.gradle | 2 +- samples/groovy-dsl/xjc-version-ext-mark-generated/build.gradle | 2 +- samples/groovy-dsl/xjc-version-extensions/build.gradle | 2 +- samples/kotlin-dsl/basic/build.gradle.kts | 2 +- samples/kotlin-dsl/bindings/build.gradle.kts | 2 +- samples/kotlin-dsl/bindings_jakarta/build.gradle.kts | 2 +- samples/kotlin-dsl/catalogs/consumer/build.gradle.kts | 2 +- samples/kotlin-dsl/complete/consumer/build.gradle.kts | 2 +- samples/kotlin-dsl/complete/library/build.gradle.kts | 2 +- samples/kotlin-dsl/doclocale/build.gradle.kts | 2 +- samples/kotlin-dsl/episodes/episode-consumer/build.gradle.kts | 2 +- samples/kotlin-dsl/episodes/episode-producer/build.gradle.kts | 2 +- samples/kotlin-dsl/remote-schema/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-plugin/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-tool-2_1-legacy/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-tool-2_2-legacy/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-tool-2_2/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-tool-2_3/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-tool-2_4/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-tool-3_0-target-2_3/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-tool-3_0/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-tool-4_0/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-tool-future-latest/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-tool-future/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-2_1-legacy/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-2_3/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-2_4/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-3_0-target-2_3/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-4_0/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-default/build.gradle.kts | 2 +- .../kotlin-dsl/xjc-version-ext-basics-annox/build.gradle.kts | 2 +- .../kotlin-dsl/xjc-version-ext-mark-generated/build.gradle.kts | 2 +- samples/kotlin-dsl/xjc-version-extensions/build.gradle.kts | 2 +- 66 files changed, 66 insertions(+), 66 deletions(-) diff --git a/README.adoc b/README.adoc index d07283c..4e00a20 100644 --- a/README.adoc +++ b/README.adoc @@ -108,7 +108,7 @@ endif::[] .build.gradle(.kts) ---- plugins { - id("{maven-groupId}.xjc") version "2.1.0-SNAPSHOT" + id("{maven-groupId}.xjc") version "2.2.0-SNAPSHOT" } dependencies { diff --git a/gradle.properties b/gradle.properties index b3ff9dc..7d2acfa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,4 +26,4 @@ testSetsVersion=3.0.1 # group=org.unbroken-dome.gradle-plugins -version=2.1.0-SNAPSHOT +version=2.2.0-SNAPSHOT diff --git a/samples/groovy-dsl/basic/build.gradle b/samples/groovy-dsl/basic/build.gradle index f3afd62..fcd1e9f 100644 --- a/samples/groovy-dsl/basic/build.gradle +++ b/samples/groovy-dsl/basic/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/bindings/build.gradle b/samples/groovy-dsl/bindings/build.gradle index 52da711..6fc8666 100644 --- a/samples/groovy-dsl/bindings/build.gradle +++ b/samples/groovy-dsl/bindings/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/bindings_jakarta/build.gradle b/samples/groovy-dsl/bindings_jakarta/build.gradle index 731b25c..f4d974c 100644 --- a/samples/groovy-dsl/bindings_jakarta/build.gradle +++ b/samples/groovy-dsl/bindings_jakarta/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/catalogs/consumer/build.gradle b/samples/groovy-dsl/catalogs/consumer/build.gradle index 7dffdb2..1672e21 100644 --- a/samples/groovy-dsl/catalogs/consumer/build.gradle +++ b/samples/groovy-dsl/catalogs/consumer/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/complete/consumer/build.gradle b/samples/groovy-dsl/complete/consumer/build.gradle index c408abe..a9c9cfa 100644 --- a/samples/groovy-dsl/complete/consumer/build.gradle +++ b/samples/groovy-dsl/complete/consumer/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/complete/library/build.gradle b/samples/groovy-dsl/complete/library/build.gradle index 4de8d3d..70170b4 100644 --- a/samples/groovy-dsl/complete/library/build.gradle +++ b/samples/groovy-dsl/complete/library/build.gradle @@ -1,6 +1,6 @@ plugins { id('java-library') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/doclocale/build.gradle b/samples/groovy-dsl/doclocale/build.gradle index 5fc7e5e..68a0ad0 100644 --- a/samples/groovy-dsl/doclocale/build.gradle +++ b/samples/groovy-dsl/doclocale/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } repositories { diff --git a/samples/groovy-dsl/episodes/episode-consumer/build.gradle b/samples/groovy-dsl/episodes/episode-consumer/build.gradle index 5c54fba..3ec404e 100644 --- a/samples/groovy-dsl/episodes/episode-consumer/build.gradle +++ b/samples/groovy-dsl/episodes/episode-consumer/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/episodes/episode-producer/build.gradle b/samples/groovy-dsl/episodes/episode-producer/build.gradle index 92af77e..63568ec 100644 --- a/samples/groovy-dsl/episodes/episode-producer/build.gradle +++ b/samples/groovy-dsl/episodes/episode-producer/build.gradle @@ -1,6 +1,6 @@ plugins { id('java-library') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/remote-schema/build.gradle b/samples/groovy-dsl/remote-schema/build.gradle index f3afd62..fcd1e9f 100644 --- a/samples/groovy-dsl/remote-schema/build.gradle +++ b/samples/groovy-dsl/remote-schema/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-plugin/build.gradle b/samples/groovy-dsl/xjc-plugin/build.gradle index eb65192..1b04cb6 100644 --- a/samples/groovy-dsl/xjc-plugin/build.gradle +++ b/samples/groovy-dsl/xjc-plugin/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-tool-2_1-legacy/build.gradle b/samples/groovy-dsl/xjc-tool-2_1-legacy/build.gradle index 3d9d20a..f9406e1 100644 --- a/samples/groovy-dsl/xjc-tool-2_1-legacy/build.gradle +++ b/samples/groovy-dsl/xjc-tool-2_1-legacy/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-tool-2_2-legacy/build.gradle b/samples/groovy-dsl/xjc-tool-2_2-legacy/build.gradle index 734af32..bd54b5d 100644 --- a/samples/groovy-dsl/xjc-tool-2_2-legacy/build.gradle +++ b/samples/groovy-dsl/xjc-tool-2_2-legacy/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-tool-2_2/build.gradle b/samples/groovy-dsl/xjc-tool-2_2/build.gradle index c97ecd9..f8bdd3b 100644 --- a/samples/groovy-dsl/xjc-tool-2_2/build.gradle +++ b/samples/groovy-dsl/xjc-tool-2_2/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-tool-2_3/build.gradle b/samples/groovy-dsl/xjc-tool-2_3/build.gradle index ec57147..d554f50 100644 --- a/samples/groovy-dsl/xjc-tool-2_3/build.gradle +++ b/samples/groovy-dsl/xjc-tool-2_3/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-tool-2_4/build.gradle b/samples/groovy-dsl/xjc-tool-2_4/build.gradle index d9334a3..cfdb705 100644 --- a/samples/groovy-dsl/xjc-tool-2_4/build.gradle +++ b/samples/groovy-dsl/xjc-tool-2_4/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-tool-3_0-target-2_3/build.gradle b/samples/groovy-dsl/xjc-tool-3_0-target-2_3/build.gradle index aa729a5..c73d3e7 100644 --- a/samples/groovy-dsl/xjc-tool-3_0-target-2_3/build.gradle +++ b/samples/groovy-dsl/xjc-tool-3_0-target-2_3/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-tool-3_0/build.gradle b/samples/groovy-dsl/xjc-tool-3_0/build.gradle index 532f682..59d1b2c 100644 --- a/samples/groovy-dsl/xjc-tool-3_0/build.gradle +++ b/samples/groovy-dsl/xjc-tool-3_0/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-tool-4_0/build.gradle b/samples/groovy-dsl/xjc-tool-4_0/build.gradle index 82949dc..f625afc 100644 --- a/samples/groovy-dsl/xjc-tool-4_0/build.gradle +++ b/samples/groovy-dsl/xjc-tool-4_0/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-tool-future-latest/build.gradle b/samples/groovy-dsl/xjc-tool-future-latest/build.gradle index ef5338e..ff6fd78 100644 --- a/samples/groovy-dsl/xjc-tool-future-latest/build.gradle +++ b/samples/groovy-dsl/xjc-tool-future-latest/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-tool-future/build.gradle b/samples/groovy-dsl/xjc-tool-future/build.gradle index 0bd96c1..bd2186a 100644 --- a/samples/groovy-dsl/xjc-tool-future/build.gradle +++ b/samples/groovy-dsl/xjc-tool-future/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-2_1-legacy/build.gradle b/samples/groovy-dsl/xjc-version-2_1-legacy/build.gradle index a2875d1..22d37f4 100644 --- a/samples/groovy-dsl/xjc-version-2_1-legacy/build.gradle +++ b/samples/groovy-dsl/xjc-version-2_1-legacy/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-2_2/build.gradle b/samples/groovy-dsl/xjc-version-2_2/build.gradle index 5ede3d0..348b2f4 100644 --- a/samples/groovy-dsl/xjc-version-2_2/build.gradle +++ b/samples/groovy-dsl/xjc-version-2_2/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-2_3/build.gradle b/samples/groovy-dsl/xjc-version-2_3/build.gradle index a5dc9ac..da36804 100644 --- a/samples/groovy-dsl/xjc-version-2_3/build.gradle +++ b/samples/groovy-dsl/xjc-version-2_3/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-2_4/build.gradle b/samples/groovy-dsl/xjc-version-2_4/build.gradle index 4094d20..4d17a95 100644 --- a/samples/groovy-dsl/xjc-version-2_4/build.gradle +++ b/samples/groovy-dsl/xjc-version-2_4/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-3_0-target-2_3/build.gradle b/samples/groovy-dsl/xjc-version-3_0-target-2_3/build.gradle index dc8f50e..348b580 100644 --- a/samples/groovy-dsl/xjc-version-3_0-target-2_3/build.gradle +++ b/samples/groovy-dsl/xjc-version-3_0-target-2_3/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-3_0/build.gradle b/samples/groovy-dsl/xjc-version-3_0/build.gradle index f94b59d..a4bac31 100644 --- a/samples/groovy-dsl/xjc-version-3_0/build.gradle +++ b/samples/groovy-dsl/xjc-version-3_0/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-4_0/build.gradle b/samples/groovy-dsl/xjc-version-4_0/build.gradle index dc69b57..fc2415f 100644 --- a/samples/groovy-dsl/xjc-version-4_0/build.gradle +++ b/samples/groovy-dsl/xjc-version-4_0/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-default/build.gradle b/samples/groovy-dsl/xjc-version-default/build.gradle index 2d77d3f..e09136e 100644 --- a/samples/groovy-dsl/xjc-version-default/build.gradle +++ b/samples/groovy-dsl/xjc-version-default/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-ext-basics-annox/build.gradle b/samples/groovy-dsl/xjc-version-ext-basics-annox/build.gradle index 5efb804..e4dade5 100644 --- a/samples/groovy-dsl/xjc-version-ext-basics-annox/build.gradle +++ b/samples/groovy-dsl/xjc-version-ext-basics-annox/build.gradle @@ -1,6 +1,6 @@ plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-ext-mark-generated/build.gradle b/samples/groovy-dsl/xjc-version-ext-mark-generated/build.gradle index edf08e5..a22c5a2 100644 --- a/samples/groovy-dsl/xjc-version-ext-mark-generated/build.gradle +++ b/samples/groovy-dsl/xjc-version-ext-mark-generated/build.gradle @@ -2,7 +2,7 @@ import org.gradle.util.VersionNumber plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/groovy-dsl/xjc-version-extensions/build.gradle b/samples/groovy-dsl/xjc-version-extensions/build.gradle index 6b54952..79cdf1c 100644 --- a/samples/groovy-dsl/xjc-version-extensions/build.gradle +++ b/samples/groovy-dsl/xjc-version-extensions/build.gradle @@ -2,7 +2,7 @@ import org.gradle.util.VersionNumber plugins { id('java') - id('org.unbroken-dome.xjc') version '2.1.0-SNAPSHOT' + id('org.unbroken-dome.xjc') version '2.2.0-SNAPSHOT' } diff --git a/samples/kotlin-dsl/basic/build.gradle.kts b/samples/kotlin-dsl/basic/build.gradle.kts index d28be5f..563a76e 100644 --- a/samples/kotlin-dsl/basic/build.gradle.kts +++ b/samples/kotlin-dsl/basic/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/bindings/build.gradle.kts b/samples/kotlin-dsl/bindings/build.gradle.kts index 8b85190..615f9d6 100644 --- a/samples/kotlin-dsl/bindings/build.gradle.kts +++ b/samples/kotlin-dsl/bindings/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/bindings_jakarta/build.gradle.kts b/samples/kotlin-dsl/bindings_jakarta/build.gradle.kts index d6599ff..028dd5b 100644 --- a/samples/kotlin-dsl/bindings_jakarta/build.gradle.kts +++ b/samples/kotlin-dsl/bindings_jakarta/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/catalogs/consumer/build.gradle.kts b/samples/kotlin-dsl/catalogs/consumer/build.gradle.kts index 5eda45b..818771c 100644 --- a/samples/kotlin-dsl/catalogs/consumer/build.gradle.kts +++ b/samples/kotlin-dsl/catalogs/consumer/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/complete/consumer/build.gradle.kts b/samples/kotlin-dsl/complete/consumer/build.gradle.kts index 1651ac4..dc91453 100644 --- a/samples/kotlin-dsl/complete/consumer/build.gradle.kts +++ b/samples/kotlin-dsl/complete/consumer/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/complete/library/build.gradle.kts b/samples/kotlin-dsl/complete/library/build.gradle.kts index b9f42c6..95e13e8 100644 --- a/samples/kotlin-dsl/complete/library/build.gradle.kts +++ b/samples/kotlin-dsl/complete/library/build.gradle.kts @@ -1,6 +1,6 @@ plugins { `java-library` - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/doclocale/build.gradle.kts b/samples/kotlin-dsl/doclocale/build.gradle.kts index 83a3e6e..1bd7c54 100644 --- a/samples/kotlin-dsl/doclocale/build.gradle.kts +++ b/samples/kotlin-dsl/doclocale/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/episodes/episode-consumer/build.gradle.kts b/samples/kotlin-dsl/episodes/episode-consumer/build.gradle.kts index a2046e0..ca5f453 100644 --- a/samples/kotlin-dsl/episodes/episode-consumer/build.gradle.kts +++ b/samples/kotlin-dsl/episodes/episode-consumer/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/episodes/episode-producer/build.gradle.kts b/samples/kotlin-dsl/episodes/episode-producer/build.gradle.kts index 40b3f76..beb6000 100644 --- a/samples/kotlin-dsl/episodes/episode-producer/build.gradle.kts +++ b/samples/kotlin-dsl/episodes/episode-producer/build.gradle.kts @@ -1,6 +1,6 @@ plugins { `java-library` - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/remote-schema/build.gradle.kts b/samples/kotlin-dsl/remote-schema/build.gradle.kts index d28be5f..563a76e 100644 --- a/samples/kotlin-dsl/remote-schema/build.gradle.kts +++ b/samples/kotlin-dsl/remote-schema/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-plugin/build.gradle.kts b/samples/kotlin-dsl/xjc-plugin/build.gradle.kts index 575cba8..eded6c7 100644 --- a/samples/kotlin-dsl/xjc-plugin/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-plugin/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-tool-2_1-legacy/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_1-legacy/build.gradle.kts index 127aaaa..238a41f 100644 --- a/samples/kotlin-dsl/xjc-tool-2_1-legacy/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-tool-2_1-legacy/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-tool-2_2-legacy/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_2-legacy/build.gradle.kts index e93dfe7..fc7f10d 100644 --- a/samples/kotlin-dsl/xjc-tool-2_2-legacy/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-tool-2_2-legacy/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-tool-2_2/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_2/build.gradle.kts index 4634f06..962f22b 100644 --- a/samples/kotlin-dsl/xjc-tool-2_2/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-tool-2_2/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-tool-2_3/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_3/build.gradle.kts index 095d608..43d22d8 100644 --- a/samples/kotlin-dsl/xjc-tool-2_3/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-tool-2_3/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-tool-2_4/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-2_4/build.gradle.kts index 763312a..f59d9b6 100644 --- a/samples/kotlin-dsl/xjc-tool-2_4/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-tool-2_4/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/build.gradle.kts index 1a3a1f3..7902f5c 100644 --- a/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-tool-3_0-target-2_3/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-tool-3_0/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-3_0/build.gradle.kts index dfbd596..dc6f4bd 100644 --- a/samples/kotlin-dsl/xjc-tool-3_0/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-tool-3_0/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-tool-4_0/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-4_0/build.gradle.kts index 95b5fb0..4bb6c82 100644 --- a/samples/kotlin-dsl/xjc-tool-4_0/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-tool-4_0/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-tool-future-latest/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-future-latest/build.gradle.kts index ea3efc6..7b2378f 100644 --- a/samples/kotlin-dsl/xjc-tool-future-latest/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-tool-future-latest/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-tool-future/build.gradle.kts b/samples/kotlin-dsl/xjc-tool-future/build.gradle.kts index 9fff7b0..7e1dc53 100644 --- a/samples/kotlin-dsl/xjc-tool-future/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-tool-future/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-2_1-legacy/build.gradle.kts b/samples/kotlin-dsl/xjc-version-2_1-legacy/build.gradle.kts index b8e2063..b031ae3 100644 --- a/samples/kotlin-dsl/xjc-version-2_1-legacy/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-2_1-legacy/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts b/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts index 80abc3c..5577551 100644 --- a/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-2_2/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-2_3/build.gradle.kts b/samples/kotlin-dsl/xjc-version-2_3/build.gradle.kts index bc8e3e7..494fb35 100644 --- a/samples/kotlin-dsl/xjc-version-2_3/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-2_3/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-2_4/build.gradle.kts b/samples/kotlin-dsl/xjc-version-2_4/build.gradle.kts index 0498a6c..c894fe4 100644 --- a/samples/kotlin-dsl/xjc-version-2_4/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-2_4/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-3_0-target-2_3/build.gradle.kts b/samples/kotlin-dsl/xjc-version-3_0-target-2_3/build.gradle.kts index aecd2fd..c253b69 100644 --- a/samples/kotlin-dsl/xjc-version-3_0-target-2_3/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-3_0-target-2_3/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts b/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts index c8ff9f8..0aea490 100644 --- a/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-3_0/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-4_0/build.gradle.kts b/samples/kotlin-dsl/xjc-version-4_0/build.gradle.kts index 57596ed..0efe80a 100644 --- a/samples/kotlin-dsl/xjc-version-4_0/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-4_0/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-default/build.gradle.kts b/samples/kotlin-dsl/xjc-version-default/build.gradle.kts index 5034fe5..52901e3 100644 --- a/samples/kotlin-dsl/xjc-version-default/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-default/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-ext-basics-annox/build.gradle.kts b/samples/kotlin-dsl/xjc-version-ext-basics-annox/build.gradle.kts index 2cd5fdd..6674ae4 100644 --- a/samples/kotlin-dsl/xjc-version-ext-basics-annox/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-ext-basics-annox/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-ext-mark-generated/build.gradle.kts b/samples/kotlin-dsl/xjc-version-ext-mark-generated/build.gradle.kts index 4019d7d..a01f31d 100644 --- a/samples/kotlin-dsl/xjc-version-ext-mark-generated/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-ext-mark-generated/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" } diff --git a/samples/kotlin-dsl/xjc-version-extensions/build.gradle.kts b/samples/kotlin-dsl/xjc-version-extensions/build.gradle.kts index ff92bcd..d404e0b 100644 --- a/samples/kotlin-dsl/xjc-version-extensions/build.gradle.kts +++ b/samples/kotlin-dsl/xjc-version-extensions/build.gradle.kts @@ -1,6 +1,6 @@ plugins { java - id("org.unbroken-dome.xjc") version "2.1.0-SNAPSHOT" + id("org.unbroken-dome.xjc") version "2.2.0-SNAPSHOT" }