From 2a81078f27c3762a3ff7ce9f3acff57fe7e75cae Mon Sep 17 00:00:00 2001
From: Abhinay Agarwal <abhinay.agarwal@gluonhq.com>
Date: Tue, 16 Apr 2024 10:57:16 +0530
Subject: [PATCH 1/4] build: use relative path for resuesable workflows in same
 repository (#687)

---
 .github/workflows/early-access.yml | 10 +++++-----
 .github/workflows/release.yml      | 10 +++++-----
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/.github/workflows/early-access.yml b/.github/workflows/early-access.yml
index eb413e9bf..85eeb3b61 100644
--- a/.github/workflows/early-access.yml
+++ b/.github/workflows/early-access.yml
@@ -46,7 +46,7 @@ jobs:
 
   linux-bundles:
     needs: [precheck]
-    uses: gluonhq/scenebuilder/.github/workflows/bundles-linux.yml@master
+    uses: ./.github/workflows/bundles-linux.yml
     with:
       javafx-version: ${{ needs.precheck.outputs.JAVAFX_VERSION }}
       java-version: ${{ needs.precheck.outputs.JAVA_VERSION }}
@@ -56,7 +56,7 @@ jobs:
 
   windows-bundles:
     needs: [precheck]
-    uses: gluonhq/scenebuilder/.github/workflows/bundles-windows.yml@master
+    uses: ./.github/workflows/bundles-windows.yml
     secrets:
       WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }}
       WINDOWS_PASSWORD: ${{ secrets.WINDOWS_PASSWORD }}
@@ -70,7 +70,7 @@ jobs:
 
   mac-bundles:
     needs: [precheck]
-    uses: gluonhq/scenebuilder/.github/workflows/bundles-mac.yml@master
+    uses: ./.github/workflows/bundles-mac.yml
     secrets:
       CERTIFICATES_FILE_BASE64: ${{ secrets.CERTIFICATES_FILE_BASE64 }}
       CERTIFICATES_PASSWORD: ${{ secrets.CERTIFICATES_PASSWORD }}
@@ -87,7 +87,7 @@ jobs:
 
   mac_aarch64-bundles:
     needs: [precheck]
-    uses: gluonhq/scenebuilder/.github/workflows/bundles-mac_aarch64.yml@master
+    uses: ./.github/workflows/bundles-mac_aarch64.yml
     secrets:
       CERTIFICATES_FILE_BASE64: ${{ secrets.CERTIFICATES_FILE_BASE64 }}
       CERTIFICATES_PASSWORD: ${{ secrets.CERTIFICATES_PASSWORD }}
@@ -104,7 +104,7 @@ jobs:
 
   kit-bundles:
     needs: [precheck]
-    uses: gluonhq/scenebuilder/.github/workflows/bundles-kit.yml@master
+    uses: ./.github/workflows/bundles-kit.yml
     with:
       java-version: ${{ needs.precheck.outputs.JAVA_VERSION }}
       project-version: ${{ needs.precheck.outputs.PROJECT_VERSION }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index ca95d84fb..4c4397c19 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -60,7 +60,7 @@ jobs:
 
   linux-bundles:
     needs: [precheck]
-    uses: gluonhq/scenebuilder/.github/workflows/bundles-linux.yml@master
+    uses: ./.github/workflows/bundles-linux.yml
     with:
       javafx-version: ${{ needs.precheck.outputs.JAVAFX_VERSION }}
       java-version: ${{ needs.precheck.outputs.JAVA_VERSION }}
@@ -70,7 +70,7 @@ jobs:
 
   windows-bundles:
     needs: [precheck]
-    uses: gluonhq/scenebuilder/.github/workflows/bundles-windows.yml@master
+    uses: ./.github/workflows/bundles-windows.yml
     secrets:
       WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }}
       WINDOWS_PASSWORD: ${{ secrets.WINDOWS_PASSWORD }}
@@ -84,7 +84,7 @@ jobs:
 
   mac-bundles:
     needs: [precheck]
-    uses: gluonhq/scenebuilder/.github/workflows/bundles-mac.yml@master
+    uses: ./.github/workflows/bundles-mac.yml
     secrets:
       CERTIFICATES_FILE_BASE64: ${{ secrets.CERTIFICATES_FILE_BASE64 }}
       CERTIFICATES_PASSWORD: ${{ secrets.CERTIFICATES_PASSWORD }}
@@ -101,7 +101,7 @@ jobs:
 
   mac_aarch64-bundles:
     needs: [precheck]
-    uses: gluonhq/scenebuilder/.github/workflows/bundles-mac_aarch64.yml@master
+    uses: ./.github/workflows/bundles-mac_aarch64.yml
     secrets:
       CERTIFICATES_FILE_BASE64: ${{ secrets.CERTIFICATES_FILE_BASE64 }}
       CERTIFICATES_PASSWORD: ${{ secrets.CERTIFICATES_PASSWORD }}
@@ -118,7 +118,7 @@ jobs:
 
   kit-bundles:
     needs: [precheck]
-    uses: gluonhq/scenebuilder/.github/workflows/bundles-kit.yml@master
+    uses: ./.github/workflows/bundles-kit.yml
     with:
       java-version: ${{ needs.precheck.outputs.JAVA_VERSION }}
       project-version: ${{ needs.precheck.outputs.PROJECT_VERSION }}

From df782b079dddda466e8b7af387062fb44a9886c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Pereda?= <jose.pereda@gluonhq.com>
Date: Tue, 20 Aug 2024 20:00:16 +0200
Subject: [PATCH 2/4] fix: Ignore private and package-private classes when
 importing custom components (#702)

---
 .../scenebuilder/kit/library/util/ExplorerBase.java       | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/library/util/ExplorerBase.java b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/library/util/ExplorerBase.java
index 6b711d4a4..1ddf56ebd 100644
--- a/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/library/util/ExplorerBase.java
+++ b/kit/src/main/java/com/oracle/javafx/scenebuilder/kit/library/util/ExplorerBase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020, Gluon and/or its affiliates.
+ * Copyright (c) 2020, 2024, Gluon and/or its affiliates.
  * Copyright (c) 2012, 2014, Oracle and/or its affiliates.
  * All rights reserved. Use is subject to license terms.
  *
@@ -102,8 +102,10 @@ JarReportEntry exploreEntry(String entryName, ClassLoader classLoader, String cl
                 // http://stackoverflow.com/questions/8100376/class-forname-vs-classloader-loadclass-which-to-use-for-dynamic-loading
                 entryClass = classLoader.loadClass(className); // Note: static intializers of entryClass are not run, this doesn't seem to be an issue
 
-                if (Modifier.isAbstract(entryClass.getModifiers())
-                        || !Node.class.isAssignableFrom(entryClass)) {
+                final int modifiers = entryClass.getModifiers();
+                if (Modifier.isAbstract(modifiers)
+                        || !Node.class.isAssignableFrom(entryClass)
+                        || !(Modifier.isPublic(modifiers) || Modifier.isProtected(modifiers))) {
                     status = JarReportEntry.Status.IGNORED;
                     entryClass = null;
                     entryException = null;

From 37aeb21dbc0ecc07f5052e7c81d8ecde80f69688 Mon Sep 17 00:00:00 2001
From: Abhinay Agarwal <abhinay.agarwal@gluonhq.com>
Date: Fri, 23 Aug 2024 11:33:56 +0530
Subject: [PATCH 3/4] build: increment version to 23.0.0-SNAPSHOT (#704)

---
 app/pom.xml | 2 +-
 kit/pom.xml | 2 +-
 pom.xml     | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/app/pom.xml b/app/pom.xml
index daec5e6bd..22288a872 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>com.gluonhq.scenebuilder</groupId>
         <artifactId>parent</artifactId>
-        <version>22.0.1-SNAPSHOT</version>
+        <version>23.0.0-SNAPSHOT</version>
     </parent>
 
     <properties>
diff --git a/kit/pom.xml b/kit/pom.xml
index c205135b6..174e821f7 100644
--- a/kit/pom.xml
+++ b/kit/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <groupId>com.gluonhq.scenebuilder</groupId>
         <artifactId>parent</artifactId>
-        <version>22.0.1-SNAPSHOT</version>
+        <version>23.0.0-SNAPSHOT</version>
     </parent>
 
     <dependencies>
diff --git a/pom.xml b/pom.xml
index b50ac0059..cb8132aa6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
     <groupId>com.gluonhq.scenebuilder</groupId>
     <artifactId>parent</artifactId>
     <packaging>pom</packaging>
-    <version>22.0.1-SNAPSHOT</version>
+    <version>23.0.0-SNAPSHOT</version>
     <name>Scene Builder</name>
     <description>Scene Builder is a visual, drag n drop, layout tool for designing JavaFX application user interfaces</description>
     <inceptionYear>2012</inceptionYear>

From d36d9f62e902682cf5d734f4b7d8379b4f3acfae Mon Sep 17 00:00:00 2001
From: Abhinay Agarwal <abhinay.agarwal@gluonhq.com>
Date: Mon, 26 Aug 2024 12:04:41 +0530
Subject: [PATCH 4/4] build: Use Java and JavaFX 23-ea (#707)

---
 .github/workflows/build.yml               |  2 +-
 .github/workflows/bundles-kit.yml         |  2 +-
 .github/workflows/bundles-linux.yml       | 11 +++++++----
 .github/workflows/bundles-mac.yml         | 13 ++++++++-----
 .github/workflows/bundles-mac_aarch64.yml | 13 ++++++++-----
 .github/workflows/bundles-windows.yml     | 11 +++++++----
 .github/workflows/early-access.yml        |  8 ++++----
 .github/workflows/release.yml             | 10 +++++-----
 pom.xml                                   |  4 ++--
 9 files changed, 43 insertions(+), 31 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 0caf31844..e9b314064 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -3,7 +3,7 @@ on:
   pull_request:
 
 env:
-  JAVA_VERSION: '22'
+  JAVA_VERSION: '23'
 
 jobs:
   verify:
diff --git a/.github/workflows/bundles-kit.yml b/.github/workflows/bundles-kit.yml
index ced47d5d2..a0ba1638e 100644
--- a/.github/workflows/bundles-kit.yml
+++ b/.github/workflows/bundles-kit.yml
@@ -7,7 +7,7 @@ on:
         required: true
         type: string
       java-version:
-        default: '22'
+        default: '23'
         required: false
         type: string
 
diff --git a/.github/workflows/bundles-linux.yml b/.github/workflows/bundles-linux.yml
index 09bdc6ac5..837b4aa32 100644
--- a/.github/workflows/bundles-linux.yml
+++ b/.github/workflows/bundles-linux.yml
@@ -10,11 +10,11 @@ on:
         required: true
         type: string
       java-version:
-        default: '22'
+        default: '23'
         required: false
         type: string
       javafx-version:
-        default: '22'
+        default: '23'
         required: false
         type: string
       test:
@@ -38,8 +38,11 @@ jobs:
           release: ${{ inputs.java-version }}
 
       - name: Setup JavaFX
+        id: javafx
         run: |
-          wget -P /tmp https://download2.gluonhq.com/openjfx/${{ inputs.javafx-version }}/openjfx-${{ inputs.javafx-version }}_linux-x64_bin-jmods.zip
+          JAVAFX_MAJOR_VERSION=$(echo ${{ inputs.javafx-version }} | cut -d- -f1)
+          echo JAVAFX_MAJOR_VERSION=$JAVAFX_MAJOR_VERSION >> $GITHUB_OUTPUT
+          wget -P /tmp https://download2.gluonhq.com/openjfx/$JAVAFX_MAJOR_VERSION/openjfx-${{ inputs.javafx-version }}_linux-x64_bin-jmods.zip
           unzip /tmp/openjfx-${{ inputs.javafx-version }}_linux-x64_bin-jmods.zip -d /tmp
 
       - name: Cache Maven packages
@@ -89,7 +92,7 @@ jobs:
           ls ${{ env.INSTALL_DIR }}
         env:
           MAIN_CLASS: com.oracle.javafx.scenebuilder.app.SceneBuilderApp
-          JAVAFX_HOME: /tmp/javafx-jmods-${{ inputs.javafx-version }}/
+          JAVAFX_HOME: /tmp/javafx-jmods-${{ steps.javafx.outputs.JAVAFX_MAJOR_VERSION }}/
           JPACKAGE_HOME: ${{ env.JAVA_HOME }}
           PROJECT_VERSION: ${{ inputs.project-version }}
           APP_VERSION: ${{ inputs.app-version }}
diff --git a/.github/workflows/bundles-mac.yml b/.github/workflows/bundles-mac.yml
index 53631d237..feade7064 100644
--- a/.github/workflows/bundles-mac.yml
+++ b/.github/workflows/bundles-mac.yml
@@ -10,11 +10,11 @@ on:
         required: true
         type: string
       java-version:
-        default: '22'
+        default: '23'
         required: false
         type: string
       javafx-version:
-        default: '22'
+        default: '23'
         required: false
         type: string
       test:
@@ -52,8 +52,11 @@ jobs:
           p12-password: ${{ secrets.CERTIFICATES_PASSWORD }}
 
       - name: Setup JavaFX
+        id: javafx
         run: |
-          wget -P /tmp https://download2.gluonhq.com/openjfx/${{ inputs.javafx-version }}/openjfx-${{ inputs.javafx-version }}_osx-x64_bin-jmods.zip
+          JAVAFX_MAJOR_VERSION=$(echo ${{ inputs.javafx-version }} | cut -d- -f1)
+          echo JAVAFX_MAJOR_VERSION=$JAVAFX_MAJOR_VERSION >> $GITHUB_OUTPUT
+          wget -P /tmp https://download2.gluonhq.com/openjfx/$JAVAFX_MAJOR_VERSION/openjfx-${{ inputs.javafx-version }}_osx-x64_bin-jmods.zip
           unzip /tmp/openjfx-${{ inputs.javafx-version }}_osx-x64_bin-jmods.zip -d /tmp
 
       - name: Cache Maven packages
@@ -89,10 +92,10 @@ jobs:
             --mac-sign
           mv ${{ env.INSTALL_DIR }}/SceneBuilder-${{ env.APP_VERSION }}.dmg ${{ env.INSTALL_DIR }}/SceneBuilder-${{ env.PROJECT_VERSION }}-amd64.dmg
           ls ${{ env.INSTALL_DIR }}
-          echo ::set-output name=path::${{ env.INSTALL_DIR }}/SceneBuilder-${{ env.PROJECT_VERSION }}-amd64.dmg
+          echo path=${{ env.INSTALL_DIR }}/SceneBuilder-${{ env.PROJECT_VERSION }}-amd64.dmg >> $GITHUB_OUTPUT
         env:
           MAIN_CLASS: com.oracle.javafx.scenebuilder.app.SceneBuilderApp
-          JAVAFX_HOME: /tmp/javafx-jmods-${{ inputs.javafx-version }}/
+          JAVAFX_HOME: /tmp/javafx-jmods-${{ steps.javafx.outputs.JAVAFX_MAJOR_VERSION }}/
           JPACKAGE_HOME: ${{ env.JAVA_HOME }}
           MACSIGN_PREFIX: ${{ secrets.MACSIGN_PREFIX }}
           MACSIGN_USER: ${{ secrets.MACSIGN_USER }}
diff --git a/.github/workflows/bundles-mac_aarch64.yml b/.github/workflows/bundles-mac_aarch64.yml
index 1918ac8ab..cf319b69b 100644
--- a/.github/workflows/bundles-mac_aarch64.yml
+++ b/.github/workflows/bundles-mac_aarch64.yml
@@ -10,11 +10,11 @@ on:
         required: true
         type: string
       java-version:
-        default: '22'
+        default: '23'
         required: false
         type: string
       javafx-version:
-        default: '22'
+        default: '23'
         required: false
         type: string
       test:
@@ -53,8 +53,11 @@ jobs:
           p12-password: ${{ secrets.CERTIFICATES_PASSWORD }}
 
       - name: Setup JavaFX
+        id: javafx
         run: |
-          wget -P /tmp https://download2.gluonhq.com/openjfx/${{ inputs.javafx-version }}/openjfx-${{ inputs.javafx-version }}_osx-aarch64_bin-jmods.zip
+          JAVAFX_MAJOR_VERSION=$(echo ${{ inputs.javafx-version }} | cut -d- -f1)
+          echo JAVAFX_MAJOR_VERSION=$JAVAFX_MAJOR_VERSION >> $GITHUB_OUTPUT
+          wget -P /tmp https://download2.gluonhq.com/openjfx/$JAVAFX_MAJOR_VERSION/openjfx-${{ inputs.javafx-version }}_osx-aarch64_bin-jmods.zip
           unzip /tmp/openjfx-${{ inputs.javafx-version }}_osx-aarch64_bin-jmods.zip -d /tmp
 
       - name: Cache Maven packages
@@ -90,10 +93,10 @@ jobs:
             --mac-sign
           mv ${{ env.INSTALL_DIR }}/SceneBuilder-${{ env.APP_VERSION }}.dmg ${{ env.INSTALL_DIR }}/SceneBuilder-${{ env.PROJECT_VERSION }}-aarch64.dmg
           ls ${{ env.INSTALL_DIR }}
-          echo ::set-output name=path::${{ env.INSTALL_DIR }}/SceneBuilder-${{ env.PROJECT_VERSION }}-aarch64.dmg
+          echo path=${{ env.INSTALL_DIR }}/SceneBuilder-${{ env.PROJECT_VERSION }}-aarch64.dmg >> $GITHUB_OUTPUT
         env:
           MAIN_CLASS: com.oracle.javafx.scenebuilder.app.SceneBuilderApp
-          JAVAFX_HOME: /tmp/javafx-jmods-${{ inputs.javafx-version }}/
+          JAVAFX_HOME: /tmp/javafx-jmods-${{ steps.javafx.outputs.JAVAFX_MAJOR_VERSION }}/
           JPACKAGE_HOME: ${{ env.JAVA_HOME }}
           MACSIGN_PREFIX: ${{ secrets.MACSIGN_PREFIX }}
           MACSIGN_USER: ${{ secrets.MACSIGN_USER }}
diff --git a/.github/workflows/bundles-windows.yml b/.github/workflows/bundles-windows.yml
index cc1c72bbe..75b537119 100644
--- a/.github/workflows/bundles-windows.yml
+++ b/.github/workflows/bundles-windows.yml
@@ -10,11 +10,11 @@ on:
         required: true
         type: string
       java-version:
-        default: '22'
+        default: '23'
         required: false
         type: string
       javafx-version:
-        default: '22'
+        default: '23'
         required: false
         type: string
       test:
@@ -42,9 +42,12 @@ jobs:
           release: ${{ inputs.java-version }}
 
       - name: Setup JavaFX
+        id: javafx
         shell: pwsh
         run: |
-          Invoke-WebRequest -Uri https://download2.gluonhq.com/openjfx/${{ inputs.javafx-version }}/openjfx-${{ inputs.javafx-version }}_windows-x64_bin-jmods.zip -OutFile D:\openjfx-${{ inputs.javafx-version }}_windows-x64_bin-jmods.zip
+          $JAVAFX_MAJOR_VERSION = '${{ inputs.javafx-version }}' -split '-' | Select-Object -Index 0
+          echo "JAVAFX_MAJOR_VERSION=$JAVAFX_MAJOR_VERSION" >> $env:GITHUB_OUTPUT
+          Invoke-WebRequest -Uri https://download2.gluonhq.com/openjfx/$JAVAFX_MAJOR_VERSION/openjfx-${{ inputs.javafx-version }}_windows-x64_bin-jmods.zip -OutFile D:\openjfx-${{ inputs.javafx-version }}_windows-x64_bin-jmods.zip
           Expand-Archive -Force D:\openjfx-${{ inputs.javafx-version }}_windows-x64_bin-jmods.zip D:\
 
       - name: Cache Maven packages
@@ -75,7 +78,7 @@ jobs:
           call dir ${{ env.INSTALL_DIR }}
         env:
           MAIN_CLASS: com.oracle.javafx.scenebuilder.app.SceneBuilderApp
-          JAVAFX_HOME: D:\javafx-jmods-${{ inputs.javafx-version }}
+          JAVAFX_HOME: D:\javafx-jmods-${{ steps.javafx.outputs.JAVAFX_MAJOR_VERSION }}
           JPACKAGE_HOME: ${{ env.JAVA_HOME }}
           PROJECT_VERSION: ${{ inputs.project-version }}
           APP_VERSION: ${{ inputs.app-version }}
diff --git a/.github/workflows/early-access.yml b/.github/workflows/early-access.yml
index 85eeb3b61..3b0c59b3b 100644
--- a/.github/workflows/early-access.yml
+++ b/.github/workflows/early-access.yml
@@ -5,8 +5,8 @@ on:
     branches: [ master ]
 
 env:
-  JAVAFX_VERSION: '22'
-  JAVA_VERSION: '22'
+  JAVA_VERSION: '23'
+  JAVAFX_VERSION: '23-ea+27'
 
 jobs:
   precheck:
@@ -41,8 +41,8 @@ jobs:
           PROJECT_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
           APP_VERSION=$PROJECT_VERSION
           APP_VERSION=${APP_VERSION%-*}
-          echo ::set-output name=APP_VERSION::$APP_VERSION
-          echo ::set-output name=PROJECT_VERSION::$PROJECT_VERSION
+          echo APP_VERSION=$APP_VERSION >> $GITHUB_OUTPUT
+          echo PROJECT_VERSION=$PROJECT_VERSION >> $GITHUB_OUTPUT
 
   linux-bundles:
     needs: [precheck]
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 4c4397c19..fad68a505 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -11,8 +11,8 @@ on:
           - GA
 
 env:
-  JAVAFX_VERSION: '22'
-  JAVA_VERSION: '22'
+  JAVAFX_VERSION: '23'
+  JAVA_VERSION: '23'
 
 jobs:
   precheck:
@@ -54,9 +54,9 @@ jobs:
               S3_PATH=RC/$PROJECT_VERSION
           fi
           echo "Releasing.. "$PROJECT_VERSION
-          echo ::set-output name=APP_VERSION::$APP_VERSION
-          echo ::set-output name=PROJECT_VERSION::$PROJECT_VERSION
-          echo ::set-output name=S3_PATH::$S3_PATH
+          echo APP_VERSION=$APP_VERSION >> $GITHUB_OUTPUT
+          echo PROJECT_VERSION=$PROJECT_VERSION >> $GITHUB_OUTPUT
+          echo S3_PATH=$S3_PATH >> $GITHUB_OUTPUT
 
   linux-bundles:
     needs: [precheck]
diff --git a/pom.xml b/pom.xml
index cb8132aa6..1dbbbc06f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,11 +16,11 @@
     </modules>
 
     <properties>
-        <java.version>22</java.version>
+        <java.version>23</java.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
         <maven.compiler.release>${java.version}</maven.compiler.release>
-        <javafx.version>22</javafx.version>
+        <javafx.version>23-ea+27</javafx.version>
         <aether.version>1.1.0</aether.version>
         <charm.glisten.version>6.2.2</charm.glisten.version>
         <gluon.attach.version>4.0.19</gluon.attach.version>