diff --git a/NOTICE.md b/NOTICE.md
index 862a799..1f66e07 100644
--- a/NOTICE.md
+++ b/NOTICE.md
@@ -95,7 +95,7 @@
 * Project: http://www.kineticjs.com, https://github.com/ericdrowell/KineticJS
 * Copyright: Eric Rowell
 
-org.objectweb.asm Version 9.6
+org.objectweb.asm Version 9.7
 * License: Modified BSD (https://asm.ow2.io/license.html)
 * Copyright (c) 2000-2011 INRIA, France Telecom. All rights reserved.
 
diff --git a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/AnnotationWriter.java b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/AnnotationWriter.java
index d1f86a6..23ea980 100644
--- a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/AnnotationWriter.java
+++ b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/AnnotationWriter.java
@@ -144,7 +144,7 @@
     // Write type_index and reserve space for num_element_value_pairs.
     annotation.putShort(symbolTable.addConstantUtf8(descriptor)).putShort(0);
     return new AnnotationWriter(
-        symbolTable, /* useNamedValues = */ true, annotation, previousAnnotation);
+        symbolTable, /* useNamedValues= */ true, annotation, previousAnnotation);
   }
 
   /**
@@ -179,7 +179,7 @@
     // Write type_index and reserve space for num_element_value_pairs.
     typeAnnotation.putShort(symbolTable.addConstantUtf8(descriptor)).putShort(0);
     return new AnnotationWriter(
-        symbolTable, /* useNamedValues = */ true, typeAnnotation, previousAnnotation);
+        symbolTable, /* useNamedValues= */ true, typeAnnotation, previousAnnotation);
   }
 
   // -----------------------------------------------------------------------------------------------
@@ -284,7 +284,7 @@
     }
     // Write tag and type_index, and reserve 2 bytes for num_element_value_pairs.
     annotation.put12('@', symbolTable.addConstantUtf8(descriptor)).putShort(0);
-    return new AnnotationWriter(symbolTable, /* useNamedValues = */ true, annotation, null);
+    return new AnnotationWriter(symbolTable, /* useNamedValues= */ true, annotation, null);
   }
 
   @Override
@@ -303,7 +303,7 @@
     // visit the array elements. Its num_element_value_pairs will correspond to the number of array
     // elements and will be stored in what is in fact num_values.
     annotation.put12('[', 0);
-    return new AnnotationWriter(symbolTable, /* useNamedValues = */ false, annotation, null);
+    return new AnnotationWriter(symbolTable, /* useNamedValues= */ false, annotation, null);
   }
 
   @Override
diff --git a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/ClassReader.java b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/ClassReader.java
index 820a3b8..a2bdae3 100644
--- a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/ClassReader.java
+++ b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/ClassReader.java
@@ -177,7 +177,7 @@
       final byte[] classFileBuffer,
       final int classFileOffset,
       final int classFileLength) { // NOPMD(UnusedFormalParameter) used for backward compatibility.
-    this(classFileBuffer, classFileOffset, /* checkClassVersion = */ true);
+    this(classFileBuffer, classFileOffset, /* checkClassVersion= */ true);
   }
 
   /**
@@ -195,7 +195,7 @@
     this.b = classFileBuffer;
     // Check the class' major_version. This field is after the magic and minor_version fields, which
     // use 4 and 2 bytes respectively.
-    if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V22) {
+    if (checkClassVersion && readShort(classFileOffset + 6) > Opcodes.V23) {
       throw new IllegalArgumentException(
           "Unsupported class file major version " + readShort(classFileOffset + 6));
     }
@@ -607,9 +607,9 @@
         // Parse num_element_value_pairs and element_value_pairs and visit these values.
         currentAnnotationOffset =
             readElementValues(
-                classVisitor.visitAnnotation(annotationDescriptor, /* visible = */ true),
+                classVisitor.visitAnnotation(annotationDescriptor, /* visible= */ true),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -625,9 +625,9 @@
         // Parse num_element_value_pairs and element_value_pairs and visit these values.
         currentAnnotationOffset =
             readElementValues(
-                classVisitor.visitAnnotation(annotationDescriptor, /* visible = */ false),
+                classVisitor.visitAnnotation(annotationDescriptor, /* visible= */ false),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -649,9 +649,9 @@
                     context.currentTypeAnnotationTarget,
                     context.currentTypeAnnotationTargetPath,
                     annotationDescriptor,
-                    /* visible = */ true),
+                    /* visible= */ true),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -673,9 +673,9 @@
                     context.currentTypeAnnotationTarget,
                     context.currentTypeAnnotationTargetPath,
                     annotationDescriptor,
-                    /* visible = */ false),
+                    /* visible= */ false),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -967,9 +967,9 @@
         // Parse num_element_value_pairs and element_value_pairs and visit these values.
         currentAnnotationOffset =
             readElementValues(
-                recordComponentVisitor.visitAnnotation(annotationDescriptor, /* visible = */ true),
+                recordComponentVisitor.visitAnnotation(annotationDescriptor, /* visible= */ true),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -985,9 +985,9 @@
         // Parse num_element_value_pairs and element_value_pairs and visit these values.
         currentAnnotationOffset =
             readElementValues(
-                recordComponentVisitor.visitAnnotation(annotationDescriptor, /* visible = */ false),
+                recordComponentVisitor.visitAnnotation(annotationDescriptor, /* visible= */ false),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1009,9 +1009,9 @@
                     context.currentTypeAnnotationTarget,
                     context.currentTypeAnnotationTargetPath,
                     annotationDescriptor,
-                    /* visible = */ true),
+                    /* visible= */ true),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1033,9 +1033,9 @@
                     context.currentTypeAnnotationTarget,
                     context.currentTypeAnnotationTargetPath,
                     annotationDescriptor,
-                    /* visible = */ false),
+                    /* visible= */ false),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1151,9 +1151,9 @@
         // Parse num_element_value_pairs and element_value_pairs and visit these values.
         currentAnnotationOffset =
             readElementValues(
-                fieldVisitor.visitAnnotation(annotationDescriptor, /* visible = */ true),
+                fieldVisitor.visitAnnotation(annotationDescriptor, /* visible= */ true),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1169,9 +1169,9 @@
         // Parse num_element_value_pairs and element_value_pairs and visit these values.
         currentAnnotationOffset =
             readElementValues(
-                fieldVisitor.visitAnnotation(annotationDescriptor, /* visible = */ false),
+                fieldVisitor.visitAnnotation(annotationDescriptor, /* visible= */ false),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1193,9 +1193,9 @@
                     context.currentTypeAnnotationTarget,
                     context.currentTypeAnnotationTargetPath,
                     annotationDescriptor,
-                    /* visible = */ true),
+                    /* visible= */ true),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1217,9 +1217,9 @@
                     context.currentTypeAnnotationTarget,
                     context.currentTypeAnnotationTargetPath,
                     annotationDescriptor,
-                    /* visible = */ false),
+                    /* visible= */ false),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1412,9 +1412,9 @@
         // Parse num_element_value_pairs and element_value_pairs and visit these values.
         currentAnnotationOffset =
             readElementValues(
-                methodVisitor.visitAnnotation(annotationDescriptor, /* visible = */ true),
+                methodVisitor.visitAnnotation(annotationDescriptor, /* visible= */ true),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1430,9 +1430,9 @@
         // Parse num_element_value_pairs and element_value_pairs and visit these values.
         currentAnnotationOffset =
             readElementValues(
-                methodVisitor.visitAnnotation(annotationDescriptor, /* visible = */ false),
+                methodVisitor.visitAnnotation(annotationDescriptor, /* visible= */ false),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1454,9 +1454,9 @@
                     context.currentTypeAnnotationTarget,
                     context.currentTypeAnnotationTargetPath,
                     annotationDescriptor,
-                    /* visible = */ true),
+                    /* visible= */ true),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1478,9 +1478,9 @@
                     context.currentTypeAnnotationTarget,
                     context.currentTypeAnnotationTargetPath,
                     annotationDescriptor,
-                    /* visible = */ false),
+                    /* visible= */ false),
                 currentAnnotationOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -1488,16 +1488,13 @@
     // Visit the RuntimeVisibleParameterAnnotations attribute.
     if (runtimeVisibleParameterAnnotationsOffset != 0) {
       readParameterAnnotations(
-          methodVisitor, context, runtimeVisibleParameterAnnotationsOffset, /* visible = */ true);
+          methodVisitor, context, runtimeVisibleParameterAnnotationsOffset, /* visible= */ true);
     }
 
     // Visit the RuntimeInvisibleParameterAnnotations attribute.
     if (runtimeInvisibleParameterAnnotationsOffset != 0) {
       readParameterAnnotations(
-          methodVisitor,
-          context,
-          runtimeInvisibleParameterAnnotationsOffset,
-          /* visible = */ false);
+          methodVisitor, context, runtimeInvisibleParameterAnnotationsOffset, /* visible= */ false);
     }
 
     // Visit the non standard attributes.
@@ -1926,7 +1923,7 @@
         }
       } else if (Constants.RUNTIME_VISIBLE_TYPE_ANNOTATIONS.equals(attributeName)) {
         visibleTypeAnnotationOffsets =
-            readTypeAnnotations(methodVisitor, context, currentOffset, /* visible = */ true);
+            readTypeAnnotations(methodVisitor, context, currentOffset, /* visible= */ true);
         // Here we do not extract the labels corresponding to the attribute content. This would
         // require a full parsing of the attribute, which would need to be repeated when parsing
         // the bytecode instructions (see below). Instead, the content of the attribute is read one
@@ -1935,7 +1932,7 @@
         // time. This assumes that type annotations are ordered by increasing bytecode offset.
       } else if (Constants.RUNTIME_INVISIBLE_TYPE_ANNOTATIONS.equals(attributeName)) {
         invisibleTypeAnnotationOffsets =
-            readTypeAnnotations(methodVisitor, context, currentOffset, /* visible = */ false);
+            readTypeAnnotations(methodVisitor, context, currentOffset, /* visible= */ false);
         // Same comment as above for the RuntimeVisibleTypeAnnotations attribute.
       } else if (Constants.STACK_MAP_TABLE.equals(attributeName)) {
         if ((context.parsingOptions & SKIP_FRAMES) == 0) {
@@ -2517,9 +2514,9 @@
                   context.currentTypeAnnotationTarget,
                   context.currentTypeAnnotationTargetPath,
                   annotationDescriptor,
-                  /* visible = */ true),
+                  /* visible= */ true),
               currentAnnotationOffset,
-              /* named = */ true,
+              /* named= */ true,
               charBuffer);
         }
         currentVisibleTypeAnnotationBytecodeOffset =
@@ -2545,9 +2542,9 @@
                   context.currentTypeAnnotationTarget,
                   context.currentTypeAnnotationTargetPath,
                   annotationDescriptor,
-                  /* visible = */ false),
+                  /* visible= */ false),
               currentAnnotationOffset,
-              /* named = */ true,
+              /* named= */ true,
               charBuffer);
         }
         currentInvisibleTypeAnnotationBytecodeOffset =
@@ -2618,9 +2615,9 @@
                   context.currentLocalVariableAnnotationRangeEnds,
                   context.currentLocalVariableAnnotationRangeIndices,
                   annotationDescriptor,
-                  /* visible = */ true),
+                  /* visible= */ true),
               currentOffset,
-              /* named = */ true,
+              /* named= */ true,
               charBuffer);
         }
       }
@@ -2646,9 +2643,9 @@
                   context.currentLocalVariableAnnotationRangeEnds,
                   context.currentLocalVariableAnnotationRangeIndices,
                   annotationDescriptor,
-                  /* visible = */ false),
+                  /* visible= */ false),
               currentOffset,
-              /* named = */ true,
+              /* named= */ true,
               charBuffer);
         }
       }
@@ -2821,7 +2818,7 @@
                 methodVisitor.visitTryCatchAnnotation(
                     targetType & 0xFFFFFF00, path, annotationDescriptor, visible),
                 currentOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       } else {
         // We don't want to visit the other target_type annotations, so we just skip them (which
@@ -2832,7 +2829,7 @@
         // with a null AnnotationVisitor).
         currentOffset =
             readElementValues(
-                /* annotationVisitor = */ null, currentOffset, /* named = */ true, charBuffer);
+                /* annotationVisitor= */ null, currentOffset, /* named= */ true, charBuffer);
       }
     }
     return typeAnnotationsOffsets;
@@ -2972,7 +2969,7 @@
             readElementValues(
                 methodVisitor.visitParameterAnnotation(i, annotationDescriptor, visible),
                 currentOffset,
-                /* named = */ true,
+                /* named= */ true,
                 charBuffer);
       }
     }
@@ -3042,9 +3039,9 @@
         case 'e': // enum_const_value
           return currentOffset + 5;
         case '@': // annotation_value
-          return readElementValues(null, currentOffset + 3, /* named = */ true, charBuffer);
+          return readElementValues(null, currentOffset + 3, /* named= */ true, charBuffer);
         case '[': // array_value
-          return readElementValues(null, currentOffset + 1, /* named = */ false, charBuffer);
+          return readElementValues(null, currentOffset + 1, /* named= */ false, charBuffer);
         default:
           return currentOffset + 3;
       }
@@ -3112,7 +3109,7 @@
           return readElementValues(
               annotationVisitor.visitArray(elementName),
               currentOffset - 2,
-              /* named = */ false,
+              /* named= */ false,
               charBuffer);
         }
         switch (classFileBuffer[currentOffset] & 0xFF) {
@@ -3189,7 +3186,7 @@
                 readElementValues(
                     annotationVisitor.visitArray(elementName),
                     currentOffset - 2,
-                    /* named = */ false,
+                    /* named= */ false,
                     charBuffer);
             break;
         }
diff --git a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/ClassWriter.java b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/ClassWriter.java
index 7588188..0af80ce 100644
--- a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/ClassWriter.java
+++ b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/ClassWriter.java
@@ -774,7 +774,7 @@
     lastRecordComponent = null;
     firstAttribute = null;
     compute = hasFrames ? MethodWriter.COMPUTE_INSERTED_FRAMES : MethodWriter.COMPUTE_NOTHING;
-    new ClassReader(classFile, 0, /* checkClassVersion = */ false)
+    new ClassReader(classFile, 0, /* checkClassVersion= */ false)
         .accept(
             this,
             attributes,
diff --git a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/MethodWriter.java b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/MethodWriter.java
index 918bd71..bccc997 100644
--- a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/MethodWriter.java
+++ b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/MethodWriter.java
@@ -651,7 +651,7 @@
   @Override
   public AnnotationVisitor visitAnnotationDefault() {
     defaultValue = new ByteVector();
-    return new AnnotationWriter(symbolTable, /* useNamedValues = */ false, defaultValue, null);
+    return new AnnotationWriter(symbolTable, /* useNamedValues= */ false, defaultValue, null);
   }
 
   @Override
diff --git a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/Opcodes.java b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/Opcodes.java
index 4256afa..f796c94 100644
--- a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/Opcodes.java
+++ b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/Opcodes.java
@@ -288,6 +288,7 @@
   int V20 = 0 << 16 | 64;
   int V21 = 0 << 16 | 65;
   int V22 = 0 << 16 | 66;
+  int V23 = 0 << 16 | 67;
 
   /**
    * Version flag indicating that the class is using 'preview' features.
diff --git a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/SymbolTable.java b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/SymbolTable.java
index dc601a1..9ceffb1 100644
--- a/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/SymbolTable.java
+++ b/core-server/src/main/java/jersey/repackaged/org/objectweb/asm/SymbolTable.java
@@ -1414,23 +1414,23 @@
     }
 
     Entry(final int index, final int tag, final String value, final int hashCode) {
-      super(index, tag, /* owner = */ null, /* name = */ null, value, /* data = */ 0);
+      super(index, tag, /* owner= */ null, /* name= */ null, value, /* data= */ 0);
       this.hashCode = hashCode;
     }
 
     Entry(final int index, final int tag, final String value, final long data, final int hashCode) {
-      super(index, tag, /* owner = */ null, /* name = */ null, value, data);
+      super(index, tag, /* owner= */ null, /* name= */ null, value, data);
       this.hashCode = hashCode;
     }
 
     Entry(
         final int index, final int tag, final String name, final String value, final int hashCode) {
-      super(index, tag, /* owner = */ null, name, value, /* data = */ 0);
+      super(index, tag, /* owner= */ null, name, value, /* data= */ 0);
       this.hashCode = hashCode;
     }
 
     Entry(final int index, final int tag, final long data, final int hashCode) {
-      super(index, tag, /* owner = */ null, /* name = */ null, /* value = */ null, data);
+      super(index, tag, /* owner= */ null, /* name= */ null, /* value= */ null, data);
       this.hashCode = hashCode;
     }
   }
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/AnnotationAcceptingListener.java b/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/AnnotationAcceptingListener.java
index 7e9db27..f5384f8 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/AnnotationAcceptingListener.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/AnnotationAcceptingListener.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2023 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2024 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -309,7 +309,7 @@
 
     private static class ClassReaderWrapper {
         private static final Logger LOGGER = Logger.getLogger(ClassReader.class.getName());
-        private static final int WARN_VERSION = Opcodes.V22;
+        private static final int WARN_VERSION = Opcodes.V23;
         private static final int INPUT_STREAM_DATA_CHUNK_SIZE = 4096;
 
         private final byte[] b;
diff --git a/core-server/src/main/resources/META-INF/NOTICE.markdown b/core-server/src/main/resources/META-INF/NOTICE.markdown
index 92d64be..27c798d 100644
--- a/core-server/src/main/resources/META-INF/NOTICE.markdown
+++ b/core-server/src/main/resources/META-INF/NOTICE.markdown
@@ -36,7 +36,7 @@
 * Copyright (c) 2015-2018 Oracle and/or its affiliates. All rights reserved.
 * Copyright 2010-2013 Coda Hale and Yammer, Inc.
 
-org.objectweb.asm Version 9.6
+org.objectweb.asm Version 9.7
 * License: Modified BSD (https://asm.ow2.io/license.html)
 * Copyright: (c) 2000-2011 INRIA, France Telecom. All rights reserved.
 
diff --git a/etc/scripts/TCK/EE10/jakarta-ee10-tck.sh b/etc/scripts/TCK/EE10/jakarta-ee10-tck.sh
new file mode 100644
index 0000000..75dd07c
--- /dev/null
+++ b/etc/scripts/TCK/EE10/jakarta-ee10-tck.sh
@@ -0,0 +1,92 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for listing staging from the staging repo.
+#
+# Input Parameters:
+#     JERSEY_VERSION     - type: String
+#                        - example: 3.1.5
+#                        - description: version of Jersey (EE10) to be tested
+#     GLASSFISH_VERSION  - type: String
+#                        - example: 7.0.6
+#                        - description: version of GF (EE10) to be used within tests
+#     TCK_VERSION        - type: String
+#                        - example: 3.1.3
+#                        - description: version of a TCK bundle which will be downloaded from the staging/central
+# Configuration:
+#
+# JDK:
+#       openjdk-jdk11-latest
+# Git:
+#     https://github.com/eclipse-ee4j/jersey
+#  Branch:
+#     */3.1
+#
+#
+
+#
+# The first sh invocation
+#
+#!/bin/bash -xe
+
+MVN_HOME="/opt/tools/apache-maven/latest/"
+PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+
+mvn -f tests/jersey-tck/pom.xml clean install \
+    -Dtck.version=${TCK_VERSION} \
+    -Dglassfish.container.version=${GLASSFISH_VERSION} \
+    -Djersey.version=${JERSEY_VERSION} | tee tck.log
+
+
+#
+# The second sh invocation
+#
+#!/bin/bash -xe
+
+MVN_HOME="/opt/tools/apache-maven/latest/"
+PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+
+mvn -f tests/jersey-tck/pom.xml dependency:copy -Dartifact=jakarta.ws.rs:jakarta-restful-ws-tck:${TCK_VERSION} -Dtck.version=${TCK_VERSION} -Dtransitive=false
+export DOWNLOAD_PATH='tests/jersey-tck/target/dependency/'
+export NAME=`ls ${DOWNLOAD_PATH}`
+
+echo '***********************************************************************************' >> SUMMARY.TXT
+echo '***                        TCK bundle information                               ***' >> SUMMARY.TXT
+echo "*** Name:         ${NAME}                            ***" >> SUMMARY.TXT
+echo '*** Artifact ID:	   jakarta.ws.rs:jakarta-restful-ws-tck:'${TCK_VERSION}'         ***' >> SUMMARY.TXT
+echo '*** Date and size: '`stat -c "date: %y, size(b): %s" ${DOWNLOAD_PATH}/${NAME}`'  ***' >> SUMMARY.TXT
+echo '*** SHA256SUM: '`sha256sum ${DOWNLOAD_PATH}/${NAME} | awk '{print $1}'`' ***' >> SUMMARY.TXT
+echo '***                                                                             ***' >> SUMMARY.TXT
+echo '***********************************************************************************' >> SUMMARY.TXT
+echo '***                        TCK results summary                                  ***' >> SUMMARY.TXT
+export TESTS_RUN=`grep 'Skipped: [0-9]*$' tck.log | grep -o 'Tests run: [0-9]*' | awk '{  SUM += $3 } END { print SUM }'`
+export FAILURES=`grep 'Skipped: [0-9]*$' tck.log | grep -o 'Failures: [0-9]*' | awk '{  SUM += $2 } END { print SUM }'`
+export ERRORS=`grep 'Skipped: [0-9]*$' tck.log | grep -o 'Errors: [0-9]*' | awk '{  SUM += $2 } END { print SUM }'`
+export SKIPPED=`grep 'Skipped: [0-9]*$' tck.log | grep -o 'Skipped: [0-9]*' | awk '{  SUM += $2 } END { print SUM }'`
+echo '[INFO] Number of Tests Passed      = '${TESTS_RUN} >> SUMMARY.TXT
+echo '[INFO] Number of Tests Failed      = '${FAILURES} >> SUMMARY.TXT
+echo '[INFO] Number of Tests with Errors = '${ERRORS} >> SUMMARY.TXT
+echo '[INFO] Number of Skipped Tests     = '${SKIPPED} >> SUMMARY.TXT
+echo '[INFO] ****************************************************************************' >> SUMMARY.TXT
+grep 'Tests run:' tck.log | grep --invert-match 'Skipped: [0-9]*$' >> SUMMARY.TXT
+
+
+#
+# Archive the artifacts:
+#    tck.log,tests/jersey-tck/target/glassfish7/glassfish/domains/domain1/logs/server.log,tests/jersey-tck/pom.xml,SUMMARY.TXT
+#
\ No newline at end of file
diff --git a/etc/scripts/TCK/EE8/jersey-staging-GF-integration.sh b/etc/scripts/TCK/EE8/jersey-staging-GF-integration.sh
new file mode 100644
index 0000000..92c43c0
--- /dev/null
+++ b/etc/scripts/TCK/EE8/jersey-staging-GF-integration.sh
@@ -0,0 +1,106 @@
+#!/bin/bash -ex
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for Jersey EE8 integration into Glassfish 5.
+#
+# Input Parameters:
+#   GF_URL           - type: String
+#                    - value: http://central.maven.org/maven2/org/glassfish/main/distributions/glassfish/5.1.0/glassfish-5.1.0.zip
+#                    - description: actual URL of the Glassfish 5
+#   MAVEN_REPO_URL   - type: String
+#                    - value: https://jakarta.oss.sonatype.org/content/groups/staging/org/glassfish/jersey
+#                    - description: Jersey binaries location
+#   JERSEY_VERSION   - type: String
+#                    - value: 2.42
+#                    - description: the version of Jersey to be integrated into the GF
+#   JERSEY_JARS      - type: Multi-line String
+#                    - value: containers/glassfish/jersey-gf-ejb/${JERSEY_VERSION}/jersey-gf-ejb
+#                              containers/jersey-container-grizzly2-http/${JERSEY_VERSION}/jersey-container-grizzly2-http
+#                              containers/jersey-container-servlet/${JERSEY_VERSION}/jersey-container-servlet
+#                              containers/jersey-container-servlet-core/${JERSEY_VERSION}/jersey-container-servlet-core
+#                              core/jersey-client/${JERSEY_VERSION}/jersey-client
+#                              core/jersey-common/${JERSEY_VERSION}/jersey-common
+#                              core/jersey-server/${JERSEY_VERSION}/jersey-server
+#                              ext/jersey-bean-validation/${JERSEY_VERSION}/jersey-bean-validation
+#                              ext/cdi/jersey-cdi1x/${JERSEY_VERSION}/jersey-cdi1x
+#                              ext/cdi/jersey-cdi1x-servlet/${JERSEY_VERSION}/jersey-cdi1x-servlet
+#                              ext/cdi/jersey-cdi1x-transaction/${JERSEY_VERSION}/jersey-cdi1x-transaction
+#                              ext/jersey-entity-filtering/${JERSEY_VERSION}/jersey-entity-filtering
+#                              ext/jersey-mvc/${JERSEY_VERSION}/jersey-mvc
+#                              ext/jersey-mvc-jsp/${JERSEY_VERSION}/jersey-mvc-jsp
+#                              inject/jersey-hk2/${JERSEY_VERSION}/jersey-hk2
+#                              media/jersey-media-jaxb/${JERSEY_VERSION}/jersey-media-jaxb
+#                              media/jersey-media-json-binding/${JERSEY_VERSION}/jersey-media-json-binding
+#                              media/jersey-media-json-jackson/${JERSEY_VERSION}/jersey-media-json-jackson
+#                              media/jersey-media-json-jettison/${JERSEY_VERSION}/jersey-media-json-jettison
+#                              media/jersey-media-json-processing/${JERSEY_VERSION}/jersey-media-json-processing
+#                              media/jersey-media-moxy/${JERSEY_VERSION}/jersey-media-moxy
+#                              media/jersey-media-multipart/${JERSEY_VERSION}/jersey-media-multipart
+#                              media/jersey-media-sse/${JERSEY_VERSION}/jersey-media-sse
+#                    - description: List of binaries to be integrated into the GF 5
+#
+#
+# Configuration:
+#
+# JDK:
+#       (System)
+# Git:
+#     ------none------
+#
+#  Copy artifacts from another project:
+#       JAXRS_build
+#    Latest successful build
+#    Artifacts to copy:
+#       **/*.jar
+#    Target directory:
+#       download
+#    [X] Flatten directories [X] Fingerprint Artifacts
+#
+#
+#
+ls
+cd download
+wget -q ${GF_URL} -O glassfish.zip
+#wget -q ${JAX_RS_JAR} -O jakarta.ws.rs-api.jar
+
+while IFS= read -r line ; do wget -q ${MAVEN_REPO_URL}/$line-${JERSEY_VERSION}.jar; done <<< "${JERSEY_JARS}"
+
+echo Listing grabbed jars
+ls *.jar
+
+#unzip
+unzip -q glassfish.zip -d ${WORKSPACE}
+cd ${WORKSPACE}/glassfish5/glassfish/modules
+
+#replace API jar
+#cp -v ${WORKSPACE}/download/jakarta.ws.rs-api.jar .
+
+#replace Jersey Jar
+for jarfile in ${WORKSPACE}/download/*.jar; do
+   echo $(basename $jarfile) | sed -e 's/-RC[0-9][0-9]*//' | sed -e 's/-SNAPSHOT//' | sed -e 's/\.[0-9][0-9]*//' | sed -e 's/\.[0-9][0-9]*//' | sed -e 's/-[0-9][0-9]*//' | while IFS= read -r gfnamejar ; do if [ -f $gfnamejar ]; then rm -v $gfnamejar; cp -v $jarfile $gfnamejar; fi; done;
+done
+
+cd ${WORKSPACE}
+zip -r glassfish.zip glassfish5
+
+
+#
+#  Archive the artifacts:
+#    glassfish.zip
+#
+#
diff --git a/etc/scripts/TCK/EE8/tck-build.sh b/etc/scripts/TCK/EE8/tck-build.sh
new file mode 100644
index 0000000..40a9cb1
--- /dev/null
+++ b/etc/scripts/TCK/EE8/tck-build.sh
@@ -0,0 +1,163 @@
+#!/bin/bash -ex
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for building EE8 TCK bundle for Jersey.
+#
+# Input Parameters:
+#   GF_URL     - type: String
+#              - value: https://search.maven.org/remotecontent?filepath=org/glassfish/main/distributions/glassfish/5.1.0/glassfish-5.1.0.zip
+#              - description: actual URL of the Glassfish 5
+#
+# Configuration:
+#
+# JDK:
+#       oracle-jdk8-latest
+# Git:
+#     https://github.com/eclipse-ee4j/jakartaee-tck.git
+#  Branch:
+#     */master
+#  Check out to a sub-directory:
+#     CTS
+#
+#  [X] With Ant:
+#       apache-ant-latest
+#     JDK:
+#       oracle-jdk8-latest
+#
+#  Copy artifacts from another project:
+#       ts_jte_alter
+#    Latest successful build
+#    Artifacts to copy:
+#       ts.jte
+#    Target directory:
+#       download
+#    [X] Flatten directories [X] Fingerprint Artifacts
+#
+#
+#
+
+mkdir ${WORKSPACE}/CTS/tools
+mkdir ${WORKSPACE}/CTS/tools/ant
+
+#create zip command
+#mkdir batch
+#touch ${WORKSPACE}/batch/zip.sh
+#chmod +x ${WORKSPACE}/batch/zip.sh
+#touch ${WORKSPACE}/batch/zip
+#chmod +x ${WORKSPACE}/batch/zip
+#alias zip='${WORKSPACE}/batch/zip.sh'
+
+#echo "echo ARG1=\$1">batch/zip.sh
+#echo "echo ARG2=\$2">>batch/zip.sh
+#echo "echo ARG3=\$3">>batch/zip.sh
+#echo "if [ \$1='-T' ]; then">>batch/zip.sh
+#echo "	exit">>batch/zip.sh
+#echo "fi">>batch/zip.sh
+#echo "filename=\`echo \$2 | cut -d'.' -f 1,2\`">>batch/zip.sh
+#echo "echo filename=\$filename">>batch/zip.sh
+#echo "tar -zcvf '\${filename}'.tar.gz \$3">>batch/zip.sh
+#echo "mv \${filename}.tar.gz \${filename}.zip">>batch/zip.sh
+#echo "echo created \${filename}.zip">>batch/zip.sh
+
+#echo "${WORKSPACE}/batch/zip.sh \$*">batch/zip
+
+#cat batch/zip.sh
+#cat batch/zip
+
+
+#Set variables
+export ANT_OPTS=-Djavax.xml.accessExternalSchema=all
+
+cd download
+#wget -4 https://jenkins.eclipse.org/jersey/view/TCK/job/ts_jte_alter/lastSuccessfulBuild/artifact/ts.jte
+
+#wget -q https://ci.adoptopenjdk.net/view/Build%20Monitor/job/jtharness/lastSuccessfulBuild/artifact/jtharness.tar.gz -O jtharness.tar.gz
+#wget -q https://ci.adoptopenjdk.net/view/Build%20Monitor/job/sigtest/lastSuccessfulBuild/artifact/sigtest.tar.gz -O sigtest.tar.gz
+#wget -q http://central.maven.org/maven2/com/sun/xml/bind/jaxb-xjc/2.2.7/jaxb-xjc-2.2.7.jar -O jaxb-xjc.jar
+#wget -q http://central.maven.org/maven2/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar -O ant-contrib.jar
+#wget -q http://central.maven.org/maven2/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar
+#wget -q http://central.maven.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
+#wget -q http://central.maven.org/maven2/commons-codec/commons-codec/1.3/commons-codec-1.3.jar
+#tar xfz jtharness.tar.gz
+#tar xvfz sigtest.tar.gz
+#unzip -q sigtest-4.0
+#cp -av ${WORKSPACE}/download/sigtest-4.0/lib/. ${WORKSPACE}/CTS/lib/
+#cp -v ${WORKSPACE}/download/jtharness/lib/javatest.jar ${WORKSPACE}/CTS/lib/javatest.jar
+#cp -v ${WORKSPACE}/download/jaxb-xjc.jar ${WORKSPACE}/CTS/lib/
+#cp -v ${WORKSPACE}/download/ant-contrib.jar ${WORKSPACE}/CTS/lib/
+#cp -v ${WORKSPACE}/download/ant-contrib.jar ${WORKSPACE}/CTS/lib/ant-contrib-1.0b3.jar
+#cp -v ${WORKSPACE}/download/commons-httpclient-3.1.jar ${WORKSPACE}/CTS/lib/
+#cp -v ${WORKSPACE}/download/commons-logging-1.1.1.jar ${WORKSPACE}/CTS/lib/
+#cp -v ${WORKSPACE}/download/commons-codec-1.3.jar ${WORKSPACE}/CTS/lib/
+
+
+ls
+
+yes | cp -vr ${WORKSPACE}/download/ts.jte ${WORKSPACE}/CTS/install/jaxrs/bin/
+#cp -v ${WORKSPACE}/download/ts.jte ${WORKSPACE}/CTS/bin/ts.jte
+
+wget -q ${GF_URL} -O glassfish.zip
+unzip -q glassfish.zip -d ${WORKSPACE}
+
+#COMPILE TCK
+
+export TS_HOME=${WORKSPACE}/CTS
+export deliverabledir=jaxrs
+export javaee_home=${WORKSPACE}/glassfish5
+
+#touch ${WORKSPACE}/CTS/vehicle.properties
+#echo com/sun/ts/tests/jaxrs/api = servlet >> ${WORKSPACE}/CTS/vehicle.properties
+#echo com/sun/ts/tests/jaxrs/api/rs/ext/interceptor = standalone >> ${WORKSPACE}/CTS/vehicle.properties
+#echo com/sun/ts/tests/jaxrs/ee = standalone >> ${WORKSPACE}/CTS/vehicle.properties
+#echo com/sun/ts/tests/jaxrs/jaxrs21 = standalone >> ${WORKSPACE}/CTS/vehicle.properties
+#echo com/sun/ts/tests/jaxrs/jaxrs21/api = servlet >> ${WORKSPACE}/CTS/vehicle.properties
+#echo com/sun/ts/tests/jaxrs/spec = standalone >> ${WORKSPACE}/CTS/vehicle.properties
+#echo com/sun/ts/tests/jaxrs/servlet3 = standalone >> ${WORKSPACE}/CTS/vehicle.properties
+#echo com/sun/ts/tests/jaxrs/platform  = standalone >> ${WORKSPACE}/CTS/vehicle.properties
+
+#cat ${WORKSPACE}/CTS/vehicle.properties
+
+#fix the test
+cd ${WORKSPACE}/CTS/src/com/sun/ts/tests/jaxrs/jaxrs21/ee/sse/sseeventsink
+sed -i '314s/open()/register(holder::add)/' JAXRSClient.java
+sed -i '315s/register(holder::add)/open()/' JAXRSClient.java
+#end of fix
+
+cd ${WORKSPACE}/CTS/install/${deliverabledir}/bin
+ant build.all
+ant update.jaxrs.wars
+
+# BUNDLE TCK
+
+cd ${WORKSPACE}/CTS/release/tools/
+ant jakartaee-jaxrs
+#ls ${WORKSPACE}/CTS/release/JAXRS_BUILD/
+cd ${WORKSPACE}/CTS/release/JAXRS_BUILD/latest
+for fn in `ls *.zip`; do cp -v "${fn}" `echo ${fn} | cut -d'_' -f 1`_latest.zip; done
+
+#zip -s 10m jaxrstck_split_latest.zip jaxrstck-2.1_latest.zip
+#ls
+
+
+
+#
+#  Archive the artifacts:
+#    CTS/release/JAXRS_BUILD/latest/*.z*
+#
+#
+
diff --git a/etc/scripts/TCK/EE8/tck-run-pipeline.groovy b/etc/scripts/TCK/EE8/tck-run-pipeline.groovy
new file mode 100644
index 0000000..95936f1
--- /dev/null
+++ b/etc/scripts/TCK/EE8/tck-run-pipeline.groovy
@@ -0,0 +1,150 @@
+#!/usr/bin/env groovy
+
+/*
+ * Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/**
+ * Runs TCK for Jersey EE8 on GlassFish 5
+ *
+ * Input Parameters:
+ *
+ *   GF_INTEGRATION_JOB_NAME    - type: String
+ *                              - value: Jersey_Staging_GF_Integration
+ *                              - description: name of a job from which the prepared archive of the Glassfish 5 is taken
+ *                              - possible values: Jersey_binaries_GF_integration
+ *                                                 Jersey_Staging_GF_Integration
+ *                                                 GF5_Jersey2_Archive_Integration
+ *   TS_JTE_JOB_NAME            - type: String
+ *                              - value: ts_jte_alter
+ *                              - description: name of a job from which prepared ts.jte is taken
+ *  TCK_BUNDLE_JOB_OR_URL       - type: String
+ *                              - value: tck_build
+ *                              - description: name of a job from which prepared TCK bundle is taken
+ */
+
+node {
+
+    // Job that created the API artifact
+    def GF_BUILD_JOB = "${env.GF_INTEGRATION_JOB_NAME}"
+    def TS_JTE_BUILD_JOB = "${env.TS_JTE_JOB_NAME}"
+    def TCK_BUNDLE_URL = "${env.TCK_BUNDLE_JOB_OR_URL}"
+    def API_JAR_NAME="jakarta.ws.rs-api.jar"
+
+    echo "GF_BUILD_JOB=${GF_BUILD_JOB}"
+    echo "TS_JTE_BUILD_JOB=${TS_JTE_BUILD_JOB}"
+    echo "TCK_BUNDLE_URL=${TCK_BUNDLE_URL}"
+
+    //TCK properties
+    env.deliverabledir="jaxrs"
+    env.tck_root="restful-ws-tck"
+    env.TS_HOME="${env.WORKSPACE}/${env.tck_root}"
+    env.javaee_home="${env.WORKSPACE}/glassfish5"
+
+    env.JAVA_HOME= tool name: 'oracle-jdk8-latest', type: 'jdk'
+    env.ANT_HOME= tool name: 'apache-ant-latest', type: 'ant'
+    env.PATH="${ANT_HOME}/bin:${JAVA_HOME}/bin:${PATH}"
+    env.ANT_OPTS="-Djavax.xml.accessExternalSchema=all"
+
+    stage("Grab GF and ts.jte artifacts") {
+        //https://go.cloudbees.com/docs/cloudbees-documentation/cjoc-user-guide/index.html#cluster-copy-artifacts
+        dir ("download") {
+            copyArtifacts(projectName: "${GF_BUILD_JOB}")
+            copyArtifacts(projectName: "${TS_JTE_BUILD_JOB}")
+        }
+    }
+
+    stage("Grab TCK bundle") {
+        env.TCK_BUNDLE_URL = "${TCK_BUNDLE_URL}"
+        if (!(env.TCK_BUNDLE_URL).startsWith("http")) {
+            dir ("download") {
+                copyArtifacts(projectName: "${TCK_BUNDLE_URL}", filter: "**/*_latest.zip")
+                //flatten - could be done by copyRemoteArtifacts but mapper arg expects java class
+                sh "find . -mindepth 2 -type f -print -exec mv {} . \\;"
+
+                //sh "rm *doc*.zip"
+                sh "mv ${deliverabledir}-tck*.zip ${deliverabledir}-tck.zip"
+            }
+        } else {
+            sh '''#!/bin/bash -ex
+                cd ${WORKSPACE}/download 
+                wget -q ${TCK_BUNDLE_URL} -O ${deliverabledir}-tck.zip
+               '''
+        }
+    }
+
+    stage("Unzip TCK and GF") {
+        sh '''#!/bin/bash -ex
+            cd ${WORKSPACE}
+            unzip ${WORKSPACE}/download/glassfish.zip
+            unzip -q ${WORKSPACE}/download/${deliverabledir}-tck.zip
+            ls
+            ls ${tck_root}
+            
+            cd ${WORKSPACE}/glassfish5/glassfish/modules
+            jar xf jersey-common.jar META-INF/MANIFEST.MF
+            cat  META-INF/MANIFEST.MF | grep Bundle-Version
+           '''
+    }
+
+    stage ("Replace ts.jte") {
+        sh '''#!/bin/bash -ex
+            ls ${TS_HOME}
+            ls ${TS_HOME}/bin
+            yes | cp -rfv ${WORKSPACE}/download/ts.jte ${TS_HOME}/bin/ts.jte
+           '''
+    }
+
+    stage("Configure TCK") {
+        sh '''#!/bin/bash -ex
+            cd ${TS_HOME}/bin
+            ant config.vi
+           '''
+    }
+
+    stage ("Deploy TCK tests") {
+         sh '''#!/bin/bash -ex
+            cd ${TS_HOME}/bin
+            ant deploy.all
+           '''
+    }
+
+    stage ("Run TCK tests") {
+         sh '''#!/bin/bash -ex
+            cd ${TS_HOME}/bin
+            ant run.all | tee run.log
+           '''
+    }
+
+    stage ("Create summary.txt, API, and run.log artifacts") {
+        sh '''#!/bin/bash -ex
+            cd ${TS_HOME}/bin
+            cat run.log | sed -e '1,/Completed running/d' > summary.txt
+            PASSED_COUNT=`head -1 summary.txt | tail -1 | sed 's/.*=\\s\\(.*\\)/\\1/'`
+            FAILED_COUNT=`head -2 summary.txt | tail -1 | sed 's/.*=\\s\\(.*\\)/\\1/'`
+            ERROR_COUNT=`head -3 summary.txt | tail -1 | sed 's/.*=\\s\\(.*\\)/\\1/'`
+            
+            echo ERROR_COUNT=${ERROR_COUNT}
+            echo FAILED_COUNT=${FAILED_COUNT}
+            echo PASSED_COUNT=${PASSED_COUNT}            
+           '''
+
+        archiveArtifacts artifacts: "${env.tck_root}/bin/summary.txt", fingerprint: true
+        archiveArtifacts artifacts: "${env.tck_root}/bin/run.log", fingerprint: true
+        archiveArtifacts artifacts: "glassfish5/glassfish/modules/${API_JAR_NAME}", fingerprint: true
+        archiveArtifacts artifacts: "glassfish5/glassfish/modules/META-INF/MANIFEST.MF", fingerprint: true
+        archiveArtifacts artifacts: "glassfish5/glassfish/domains/domain1/logs/server.log", fingerprint: true
+    }
+}
\ No newline at end of file
diff --git a/etc/scripts/TCK/EE8/ts-jte-alter.sh b/etc/scripts/TCK/EE8/ts-jte-alter.sh
new file mode 100644
index 0000000..27d908a
--- /dev/null
+++ b/etc/scripts/TCK/EE8/ts-jte-alter.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for generating ts.jte for EE8 Jersey TCK.
+#
+# Input Parameters:
+#
+#   SERVER_HOME         - type: String
+#                       - value: ${ts.home}/../glassfish5/glassfish
+#  JAXRS_API_JAR_NAME   - type: String
+#                       - value: jakarta.ws.rs-api.jar
+#  HARNESS_REPORT_DIR   - type: String
+#                       - value: ${ts.home}/../JTreport
+#  HARNESS_WORK_DIR     - type: String
+#                       - value: ${ts.home}/../JTwork
+#
+# Configuration:
+#
+# JDK:
+#       (System)
+# Git:
+#     ----none----
+#
+#
+
+wget https://raw.githubusercontent.com/eclipse-ee4j/jakartaee-tck/master/install/jaxrs/bin/ts.jte
+
+JARS_ON_CP="\
+\${web.home}/modules/jersey-client.jar:\
+\${web.home}/modules/jersey-common.jar:\
+\${web.home}/modules/jersey-container-servlet.jar:\
+\${web.home}/modules/jersey-container-servlet-core.jar:\
+\${web.home}/modules/jersey-hk2.jar:\
+\${web.home}/modules/jersey-media-jaxb.jar:\
+\${web.home}/modules/jersey-media-json-binding.jar:\
+\${web.home}/modules/jersey-media-json-processing.jar:\
+\${web.home}/modules/jersey-media-sse.jar:\
+\${web.home}/modules/jersey-server.jar:\
+\${web.home}/modules/jsonp-jaxrs.jar:\
+\${web.home}/modules/asm-all-repackaged.jar:\
+\${web.home}/modules/bean-validator.jar:\
+\${web.home}/modules/endorsed/jakarta.annotation-api.jar:\
+\${web.home}/modules/cdi-api.jar:\
+\${web.home}/modules/cglib.jar:\
+\${web.home}/modules/hk2-api.jar:\
+\${web.home}/modules/hk2-locator.jar:\
+\${web.home}/modules/hk2-utils.jar:\
+\${web.home}/modules/javassist.jar:\
+\${web.home}/modules/jakarta.ejb-api.jar:\
+\${web.home}/modules/jakarta.inject.jar:\
+\${web.home}/modules/jakarta.json.jar:\
+\${web.home}/modules/jakarta.json-api.jar:\
+\${web.home}/modules/jakarta.json.bind-api.jar:\
+\${web.home}/modules/jakarta.interceptor-api.jar:\
+\${web.home}/modules/jakarta.servlet-api.jar:\
+\${web.home}/modules/osgi-resource-locator.jar:\
+\${web.home}/modules/weld-osgi-bundle.jar:\
+\${web.home}/modules/yasson.jar"
+
+sed -i 's/^impl\.vi=/impl\.vi=glassfish/g' ts.jte
+sed -i "s/^web\.home=/$(echo web\.home=${SERVER_HOME} | sed -e 's/\\/\\\\/g; s/\//\\\//g;')/g" ts.jte
+sed -i "s/^impl\.vi\.deploy\.dir=/$(echo impl\.vi\.deploy\.dir=\${web.home}/domains/domain1/autodeploy | sed -e 's/\\/\\\\/g; s/\//\\\//g;')/g" ts.jte
+sed -i 's/^jaxrs_impl_name=/jaxrs_impl_name=jersey/g' ts.jte
+sed -i 's/^harness\.log\.traceflag=/harness\.log\.traceflag=true/g' ts.jte
+sed -i 's/^webServerHost=/webServerHost=localhost/g' ts.jte
+sed -i 's/^webServerPort=/webServerPort=8080/g' ts.jte
+sed -i "s/^work\.dir=\/tmp\/JTwork/$(echo work\.dir=${HARNESS_WORK_DIR} | sed -e 's/\\/\\\\/g; s/\//\\\//g;')/g" ts.jte
+sed -i "s/^report\.dir=\/tmp\/JTreport/$(echo report\.dir=${HARNESS_REPORT_DIR} | sed -e 's/\\/\\\\/g; s/\//\\\//g;')/g" ts.jte
+sed -i "s/^jaxrs_impl\.classes=/$(echo jaxrs_impl\.classes=${JARS_ON_CP} | sed -e 's/\\/\\\\/g; s/\//\\\//g;')/g" ts.jte
+sed -i "s/^jaxrs\.classes=/$(echo jaxrs\.classes=\${web.home}/modules/${JAXRS_API_JAR_NAME} | sed -e 's/\\/\\\\/g; s/\//\\\//g;')/g" ts.jte
+sed -i "s/^jaxrs_impl_lib=/$(echo jaxrs_impl_lib=\${web.home}/modules/jersey-container-servlet-core.jar | sed -e 's/\\/\\\\/g; s/\//\\\//g;')/g" ts.jte
+sed -i "s/^servlet_adaptor=/servlet_adaptor=org\/glassfish\/jersey\/servlet\/ServletContainer.class/g" ts.jte
+
+sed -i "s/-Dcts.tmp=\.*/-Djavax.xml.accessExternalSchema=all -Dcts.tmp=/g" ts.jte
+
+
+#
+# Archive the artifacts:
+#     ts.jte
\ No newline at end of file
diff --git a/etc/scripts/release/EE10/bundle-apidocs.sh b/etc/scripts/release/EE10/bundle-apidocs.sh
new file mode 100644
index 0000000..089a1a9
--- /dev/null
+++ b/etc/scripts/release/EE10/bundle-apidocs.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for releasing api docs bundle by release tag.
+#
+# Input Parameters:
+#
+# VERSION - type: String
+#         - example: 3.1.6
+#         - description: Name of the existing version tag in the Git repo.
+#
+# Configuration:
+#
+# JDK:
+#       oracle-jdk17-latest
+# Git:
+#          git@github.com:eclipse-ee4j/jersey.git
+#    Branches to build:
+#          tags/${VERSION}
+#
+# Bindings:
+#    Secret file:
+#         Variable:
+#              KEYRING
+#         Credentials:
+#              secret-subkeys.asc
+#
+#
+
+
+ gpg --batch --import ${KEYRING}
+ for fpr in $(gpg --list-keys --with-colons  | awk -F: '/fpr:/ {print $10}' | sort -u);
+ do
+   echo -e "5\ny\n" |  gpg --batch --command-fd 0 --expert --edit-key $fpr trust;
+ done
+
+#!/bin/bash -xe
+
+# Execution environment
+MVN_HOME="/opt/tools/apache-maven/latest/"
+PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+
+echo '-[ Run maven release plugin ]---------------------------------------------------'
+
+mvn -q -V -C -DstagingDescription="org.glassfish.jersey.bundles.apidocs:${VERSION}" \
+    -Pstaging,oss-release,pre-release -DskipTests -pl :apidocs \
+    -Djersey.version=${VERSION} -Dsource.mvn.plugin.version=3.2.0 install javadoc:jar gpg:sign deploy
\ No newline at end of file
diff --git a/etc/scripts/release/EE10/bundle-examples.sh b/etc/scripts/release/EE10/bundle-examples.sh
new file mode 100644
index 0000000..c49fa1c
--- /dev/null
+++ b/etc/scripts/release/EE10/bundle-examples.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for releasing examples bundle by release tag.
+#
+# Input Parameters:
+#
+# VERSION - type: String
+#         - example: 3.1.6
+#         - description: Name of the existing version tag in the Git repo.
+#
+# Configuration:
+#
+# JDK:
+#       oracle-jdk11-latest
+# Git:
+#          git@github.com:eclipse-ee4j/jersey.git
+#    Branches to build:
+#          tags/${VERSION}
+#
+# Bindings:
+#    Secret file:
+#         Variable:
+#              KEYRING
+#         Credentials:
+#              secret-subkeys.asc
+#
+#
+
+
+ gpg --batch --import ${KEYRING}
+ for fpr in $(gpg --list-keys --with-colons  | awk -F: '/fpr:/ {print $10}' | sort -u);
+ do
+   echo -e "5\ny\n" |  gpg --batch --command-fd 0 --expert --edit-key $fpr trust;
+ done
+
+
+ # Execution environment
+ MVN_HOME="/opt/tools/apache-maven/latest/"
+ PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+
+ mvn clean install -C -B -Djersey.version=${VERSION} -DskipTests -Ppre-release,staging -pl org.glassfish.jersey.examples:project -amd
+
+ mvn -C -B -DstagingDescription="org.glassfish.jersey.examples:${VERSION}" \
+     -Pstaging,oss-release,pre-release \
+     -Djersey.version=${VERSION} -DskipTests -pl :jersey-examples \
+     deploy
\ No newline at end of file
diff --git a/etc/scripts/release/EE10/bundle-user-guide.sh b/etc/scripts/release/EE10/bundle-user-guide.sh
new file mode 100644
index 0000000..8890a79
--- /dev/null
+++ b/etc/scripts/release/EE10/bundle-user-guide.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for releasing User Guide bundle by release tag.
+#
+# Input Parameters:
+#
+# VERSION - type: String
+#         - example: 3.1.6
+#         - description: Name of the existing version tag in the Git repo.
+#
+# Configuration:
+#
+# JDK:
+#       oracle-jdk11-latest
+# Git:
+#          git@github.com:eclipse-ee4j/jersey.git
+#    Credentials:
+#          GitHub bot SSH
+#    Branches to build:
+#          refs/tags/${VERSION}
+#
+# Bindings:
+#    Secret file:
+#         Variable:
+#              KEYRING
+#         Credentials:
+#              secret-subkeys.asc
+#
+#
+
+
+ gpg --batch --import ${KEYRING}
+ for fpr in $(gpg --list-keys --with-colons  | awk -F: '/fpr:/ {print $10}' | sort -u);
+ do
+   echo -e "5\ny\n" |  gpg --batch --command-fd 0 --expert --edit-key $fpr trust;
+ done
+
+#!/bin/bash -xe
+
+# Execution environment
+MVN_HOME="/opt/tools/apache-maven/latest/"
+PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+
+cd docs
+
+echo '-[ Run maven release plugin ]---------------------------------------------------'
+
+mvn -q -C -DstagingDescription="org.glassfish.jersey.jersey-documentation:${VERSION}" \
+    -Pstaging,oss-release,pre-release \
+    -DskipTests \
+    install javadoc:jar gpg:sign deploy
\ No newline at end of file
diff --git a/etc/scripts/release/EE10/release.groovy b/etc/scripts/release/EE10/release.groovy
new file mode 100644
index 0000000..ad2f167
--- /dev/null
+++ b/etc/scripts/release/EE10/release.groovy
@@ -0,0 +1,333 @@
+#!/usr/bin/env groovy
+
+/*
+ * Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/**
+ * Release script for Jakarta EE10 Jersey versions
+ * Release branch is 3.1
+ *
+ * Input Parameters:
+ * RELEASE_VERSION - type: String
+ *                 - example:  3.1.6
+ *                 - Description: mandatory release version. Later is being published to staging/central.
+ * NEXT_VERSION    - type: String
+ *                 - example:  3.1.99-SNAPSHOT
+ *                 - Description: mandatory next developing version will be committed in to the release branch and later
+ *                               merged into the original release branch for further developing.
+ * BRANCH          - type: Choice Parameter
+ *                 - values: 3.1
+ *                 - Description: Original release branch from which the codebase is being checked out
+ * DRY_RUN         - type: Boolean
+ *                 - Description: if checked nothing is really committed to Git nor published to the staging
+ * OVERWRITE       - type: Boolean
+ *                 - Description: if checked allows replacing of the previously published RELEASE_VERSION of Jersey
+ *
+ */
+
+#!/usr/bin/env groovy
+
+node {
+
+    def MVN_HOME = tool name: 'apache-maven-latest', type: 'maven'
+    def HELP_PLUGIN = 'org.apache.maven.plugins:maven-help-plugin:2.1.1'
+    def TARGET = 'package javadoc:jar gpg:sign install:install'
+    def DEPLOY_TARGET = ''
+    def RELEASE_VERSION = RELEASE_VERSION
+    def NEXT_VERSION = NEXT_VERSION
+    def RELEASE_TAG = ''
+    def NEW_RELEASE_BRANCH = ''
+    def OVERWRITE = OVERWRITE
+    def PROJECT_NAME = 'Jersey'
+    def LOGIN = 'jersey-bot'
+    def EMAIL = 'jersey-bot@eclipse.org'
+    def REPO = 'git@github.com:eclipse-ee4j/jersey.git'
+    def SECRET_FILE_ID = 'secret-subkeys.asc'
+    def CREDENTIALS_ID = 'github-bot-ssh'
+    def GIT_ORIGIN = 'origin'
+    def RELEASE_FOLDER = env.WORKSPACE
+    def RELEASE_BRANCH = BRANCH
+
+    def STAGING_NAME_PATTERN = 'orgglassfishjersey-[0-9]+'
+    def STAGING_NAME = ''
+    def STAGING_PREV_NAME = ''
+    def STAGING_OPEN_NAME = ''
+    def STAGING_DESC = 'org.glassfish.jersey:' + RELEASE_VERSION
+    def STAGING_BOM_DESC = 'org.glassfish.jersey.bom:' + RELEASE_VERSION
+    def STAGING_PROFILE_ID = '70fa3a107a8918'
+
+    def MULTIRELEASE_MODULES = ':jersey-wadl-doclet,:jersey-spring6,:jersey-helidon-connector,:jersey-jetty-connector,:jersey-jetty-http2-connector,:jersey-container-jetty-http,:jersey-container-jetty-http2,:jersey-test-framework-provider-jetty,:jersey-test-framework-provider-jetty-http2'
+
+    def JDK_11_HOME = tool name: 'openjdk-jdk11-latest', type: 'jdk'
+    //def JDK_12_HOME = tool name: 'openjdk-jdk12-latest', type: 'jdk'
+    def JDK_21_HOME = tool name: 'openjdk-jdk21-latest', type: 'jdk'
+    //def JDK_8_HOME = tool name: 'oracle-jdk8-latest', type: 'jdk'
+
+    env.JAVA_HOME = JDK_11_HOME
+    env.PATH = "${env.JAVA_HOME}/bin:${env.PATH}:${MVN_HOME}/bin"
+
+    sh 'java -version'
+
+    stage('Fetch from git') {
+        git(branch: RELEASE_BRANCH, credentialsId: CREDENTIALS_ID, url: REPO)
+    }
+    stage('Prepare environment') {
+
+        dir(RELEASE_FOLDER) {
+            //# Check whether top level pom.xml contains SNAPSHOT version
+            if (!sh(returnStdout: true, script: "grep '<version>' pom.xml | grep 'SNAPSHOT'")?.trim()) {
+                error('-[ Missing SNAPSHOT version in POM! ]-------------------------------------------')
+            }
+
+            //# Compute release versions
+            def SNAPSHOT_VERSION = sh(returnStdout: true, script: 'mvn -q -Dexec.executable="echo" -Dexec.args=\'${project.version}\' --non-recursive exec:exec -Pstaging').trim()
+
+            if (!RELEASE_VERSION?.trim()) {
+                if (!SNAPSHOT_VERSION?.trim()) {
+                    error('-[ Missing required snapshot version number! ]----------------------------------')
+                } else {
+                    def versionTokens = SNAPSHOT_VERSION.split('-')
+                    RELEASE_VERSION = versionTokens[0]
+                }
+            }
+
+            if (!NEXT_VERSION?.trim()) {
+                def (MAJOR_VERSION, MINOR_VERSION) = RELEASE_VERSION.tokenize('.')
+                def NEXT_MINOR_VERSION = (MINOR_VERSION as Integer) + 1
+                NEXT_VERSION = MAJOR_VERSION + '.' + NEXT_MINOR_VERSION + '-SNAPSHOT'
+            }
+
+            RELEASE_TAG = RELEASE_VERSION
+            NEW_RELEASE_BRANCH = RELEASE_VERSION+'-BRANCH'
+
+            echo "Current version: ${SNAPSHOT_VERSION}"
+            echo "Release version: ${RELEASE_VERSION}"
+            echo "Next version:    ${NEXT_VERSION}"
+            echo "Release tag:     ${RELEASE_TAG}"
+            echo "Release branch:  ${NEW_RELEASE_BRANCH}"
+
+            if (!SNAPSHOT_VERSION?.trim() || !RELEASE_VERSION?.trim() || !NEXT_VERSION?.trim()) {
+                error '-[ Missing required version numbers! ]------------------------------------------'
+            }
+
+            if (DRY_RUN == 'true') {
+                echo '-[ Dry run turned on ]----------------------------------------------------------'
+                //TARGET = 'install'
+            } else {
+                DEPLOY_TARGET = ' deploy:deploy'
+            }
+            echo '-[ Configure git user ]--------------------------------------------------------'
+            sh "git config --local user.email \"${EMAIL}\""
+            sh "git config --local user.name \"$LOGIN\""
+
+        }
+
+    }
+    stage('Prepare GPG') {
+        withCredentials([file(credentialsId: SECRET_FILE_ID, variable: 'KEYRING')]) {
+            //# Workaround: GPG initialization
+            sh("gpg --batch --import ${KEYRING}")
+            sh '''
+                for fpr in $(gpg --list-keys --with-colons  | awk -F: '/fpr:/ {print $10}' | sort -u);
+                do
+                    echo -e "5\ny\n" |  gpg --batch --command-fd 0 --expert --edit-key $fpr trust;
+                done
+                '''
+        }
+    }
+    stage('Prepare branch') {
+        echo '-[ Prepare branch ]-------------------------------------------------------------'
+
+        echo '-[ Switching to release branch ]-------------------------------------------------'
+        sh """
+        git checkout ${GIT_ORIGIN}/${RELEASE_BRANCH} && true
+        git reset --hard ${GIT_ORIGIN}/${RELEASE_BRANCH} && true
+        git checkout -B ${NEW_RELEASE_BRANCH}
+        """
+        echo '-[ Release tag cleanup ]--------------------------------------------------------'
+        def TAG_NAME = sh(returnStdout: true, script: "git tag | grep ${RELEASE_TAG}\$ || true").trim()
+        if (RELEASE_TAG == TAG_NAME) {
+            if (OVERWRITE == 'true') {
+                echo "${RELEASE_TAG} tag already exists, deleting"
+                sshagent([CREDENTIALS_ID]) {
+                    sh "git push --delete origin ${RELEASE_TAG} && true"
+                }
+            } else {
+                error "${RELEASE_TAG} tag already exists"
+            }
+            //# Always delete local tag if exists
+            sh """
+            git tag --delete ${RELEASE_TAG} && true
+            """
+        }
+        sh '''
+        sed -i 's|<suppress files="generated" checks=".*"/>|<suppress files="generated" checks=".*"/><suppress files="unpacked-src" checks=".*"/>|g' etc/config/checkstyle-suppressions.xml
+        '''
+    }
+    stage('Check previous stagings') {
+        if (DRY_RUN == 'true') {
+            echo DRY_RUN + ' ------'
+        } else {
+            if (OVERWRITE == 'true') {
+                STAGING_PREV_NAME = sh(returnStdout: true,
+                        script: "mvn -B --non-recursive -Pstaging nexus-staging:rc-list | awk '/\\[INFO] $STAGING_NAME_PATTERN[ ]+CLOSED[ ]+$STAGING_DESC[ ]*\$/ {if(a){a = \$2\",\"a} else{a = \$2}}END{print a}'").trim()
+                echo 'Previously closed staging name: ' + STAGING_PREV_NAME
+            }
+
+            STAGING_OPEN_NAME = sh(returnStdout: true,
+                    script: "mvn -B --non-recursive -Pstaging nexus-staging:rc-list | awk  '/$STAGING_NAME_PATTERN OPEN / {if(a){a = \$2\",\"a} else{a = \$2}}END{print a}'").trim()
+
+            if (!STAGING_OPEN_NAME?.trim()) {
+                echo 'No currently open stagings'
+            } else {
+                echo 'Currently open redundand staging: ' + STAGING_OPEN_NAME + ', immediately closing'
+                sh """
+                    OPEN_STAGINGS=${STAGING_OPEN_NAME}
+                    mvn -B -q -Pstaging nexus-staging:rc-drop -DstagingRepositoryId=\${OPEN_STAGINGS}  
+                """
+            }
+        }
+    }
+    /*
+    stage('Open new staging') {
+        if (DRY_RUN == 'true') {
+            echo DRY_RUN + ' ------'
+        } else {
+            STAGING_NAME = sh(returnStdout: true,
+                script: "mvn -B --non-recursive -Pstaging -DstagingProfileId=${STAGING_PROFILE_ID} -DstagingDescription=${STAGING_DESC} nexus-staging:rc-open | awk  '/\\[INFO] Opened / {print \$3}'").trim()
+            echo 'New staging name: '+STAGING_NAME
+        }
+    }*/
+    stage("Build ${PROJECT_NAME}") {
+        echo env.JAVA_HOME
+        echo '-[ Run maven release ]---------------------------------------------------------'
+        echo '-[ Set Release version ]-------------------------------------------------------'
+        sh """
+        cd ${RELEASE_FOLDER}
+        mvn -q -B -V -Pstaging versions:set -DnewVersion=${RELEASE_VERSION} -DgenerateBackupPoms=false
+        mvn -q -B -V -Pstaging versions:set -DnewVersion=${RELEASE_VERSION} -DgenerateBackupPoms=false -f bom/pom.xml
+        """
+        echo '-[ Update Copyright years ]----------------------------------------------------'
+        sh '''#!/bin/bash -e
+        
+            export CURRENT_YEAR=`date '+%Y'`
+            export SED_CMD_LINE='sed -i "s#, 20.. Oracle and/or its affiliates#, ${CURRENT_YEAR} Oracle and/or its affiliates#g"'
+
+            git status --porcelain --untracked-files=no > modified_pom.log
+            cp modified_pom.log list_of_poms.txt
+            sed -i "s| M |$SED_CMD_LINE |g" modified_pom.log
+            sed -i "s| M ||g" list_of_poms.txt
+
+            bash modified_pom.log
+
+            echo ${CURRENT_YEAR} current year
+
+            while IFS= read -r path_to_pom
+            do
+              export CP_YEAR=`grep -o 'Copyright (c) 20.. Oracle and/or its affiliates' ${path_to_pom} | awk '{print $3}'`
+              [[ -z ${CP_YEAR} ]] && CP_YEAR=${CURRENT_YEAR} || echo ${CP_YEAR}
+              [[ ${CP_YEAR} == ${CURRENT_YEAR} ]] || ( sed -i "s#Copyright (c) ${CP_YEAR} Oracle and/or its affiliates#Copyright (c) ${CP_YEAR}, ${CURRENT_YEAR} Oracle and/or its affiliates#g" ${path_to_pom} ; echo ${path_to_pom} )
+              unset CP_YEAR
+            done < "list_of_poms.txt"
+        '''
+        echo '-[ Run release build ]---------------------------------------------------------'
+        dir(RELEASE_FOLDER) {
+            //env.JAVA_HOME = JDK_12_HOME
+            //sh 'mvn clean install -am -Pstaging -pl :jersey-wadl-doclet -DskipTests -B -q -V -Djersey.version=${RELEASE_VERSION}'
+            env.JAVA_HOME = JDK_21_HOME
+            sh "mvn clean install -B -q -V -DskipTests -am -Pstaging -Djersey.version=${RELEASE_VERSION} --projects ${MULTIRELEASE_MODULES}"
+            env.JAVA_HOME = JDK_11_HOME
+            //
+            sh "mvn -q -B -V -Djersey.version=${RELEASE_VERSION} -DskipTests -Ddoclint=none -Dadditionalparam='-Xdoclint:none' " +
+                    " -Poss-release,staging -U -C ${TARGET} ${DEPLOY_TARGET}"
+            //sh "mvn -Poss-release,staging -pl :jersey-wadl-doclet -am install gpg:sign ${DEPLOY_TARGET} -B -q -V -DskipTests -Djersey.version=${RELEASE_VERSION}"
+
+        }
+    }
+    stage('Prepare release') {
+        sh '''
+        git checkout -- etc/config/checkstyle-suppressions.xml
+        '''
+        echo '-[ Perform release commit to git ]---------------------------------------------'
+        sh "git commit -a -m ${RELEASE_VERSION}"
+        sh "git tag -m ${RELEASE_TAG} -a ${RELEASE_TAG}"
+        echo '-[ Set next snapshot version ]-------------------------------------------------'
+        dir(RELEASE_FOLDER) {
+            sh """
+                mvn -q -B -Pstaging -Djersey.version=${RELEASE_VERSION} versions:set -DnewVersion=${NEXT_VERSION} -DgenerateBackupPoms=false 
+                mvn -q -B -Pstaging -Djersey.version=${RELEASE_VERSION} versions:set -DnewVersion=${NEXT_VERSION} -DgenerateBackupPoms=false -f bom/pom.xml
+            """
+        }
+        echo '-[ Perform commit to git ]-----------------------------------------------------'
+        sh "git commit -a -m ${NEXT_VERSION}"
+    }
+    stage('Publish release') {
+        if (DRY_RUN == 'true') {
+            echo '-[ Prepared branch ]----------------------------------------------------------'
+            sh "git branch --list ${NEW_RELEASE_BRANCH}"
+            echo '-[ Prepared tag ]-------------------------------------------------------------'
+            sh "git tag --list ${NEW_RELEASE_BRANCH}"
+            echo '-[ Prepared commits ]---------------------------------------------------------'
+            sh 'git log -n 5'
+            sshagent([CREDENTIALS_ID]) {
+                sh "git push ${GIT_ORIGIN} ${NEW_RELEASE_BRANCH} --dry-run"
+            }
+            return
+        } else {
+            sshagent([CREDENTIALS_ID]) {
+                sh "git push -f ${GIT_ORIGIN} ${NEW_RELEASE_BRANCH} --follow-tags"
+            }
+        }
+    }
+    stage('Find related staging') {
+        if (DRY_RUN != 'true') {
+            if (!STAGING_NAME?.trim()) {
+                try {
+                    STAGING_NAME =
+                            sh(returnStdout: true,
+                                    script: "mvn -Djersey.version=${RELEASE_VERSION} -B --non-recursive -Pstaging nexus-staging:rc-list | awk  '/$STAGING_NAME_PATTERN OPEN / {if(a){a = \$2\",\"a} else{a = \$2}}END{print a}'"
+                            ).trim()
+                } catch (Error err) {
+                    currentBuild.result = 'UNSTABLE'
+                }
+            }
+            echo 'Staging name: ' + STAGING_NAME
+        } else {
+            echo 'DRY_RUN'
+        }
+    }
+    stage('Close released staging') {
+        if (!STAGING_NAME?.trim()) {
+            echo 'Nothing to be closed'
+        } else {
+            sh("mvn -B -q -Pstaging -Djersey.version=${RELEASE_VERSION} nexus-staging:rc-close -DstagingRepositoryId=${STAGING_NAME} -DstagingDescription='${STAGING_DESC}'")
+        }
+    }
+    stage('Drop redundant staging') {
+        if (!STAGING_PREV_NAME?.trim()) {
+            echo 'Nothing to be dropped'
+        } else {
+            try {
+                sh("""
+                OPEN_STAGINGS=${STAGING_PREV_NAME}
+                mvn -Djersey.version=${RELEASE_VERSION} -B -q -Pstaging nexus-staging:rc-drop -DstagingRepositoryId=\${OPEN_STAGINGS}
+                """)
+            } catch (Error err) {
+                currentBuild.result = 'UNSTABLE'
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/etc/scripts/release/EE8/bundle-apidocs.sh b/etc/scripts/release/EE8/bundle-apidocs.sh
new file mode 100644
index 0000000..dc360cc
--- /dev/null
+++ b/etc/scripts/release/EE8/bundle-apidocs.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for releasing api docs bundle by release tag.
+#
+# Input Parameters:
+#
+# VERSION - type: String
+#         - example: 2.42
+#         - description: Name of the existing version tag in the Git repo.
+#
+# Configuration:
+#
+# JDK:
+#       oracle-jdk8-latest
+# Git:
+#          git@github.com:eclipse-ee4j/jersey.git
+#    Branches to build:
+#          tags/${VERSION}
+#
+# Bindings:
+#    Secret file:
+#         Variable:
+#              KEYRING
+#         Credentials:
+#              secret-subkeys.asc
+#
+#
+
+
+ gpg --batch --import ${KEYRING}
+ for fpr in $(gpg --list-keys --with-colons  | awk -F: '/fpr:/ {print $10}' | sort -u);
+ do
+   echo -e "5\ny\n" |  gpg --batch --command-fd 0 --expert --edit-key $fpr trust;
+ done
+
+ # Execution environment
+ MVN_HOME="/opt/tools/apache-maven/latest/"
+ PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+
+ if [[ $VERSION == 2* ]] ;
+ then
+ 	export PROFILE_BUNDLE=',jetty2x'
+ fi
+
+ sed -i "s|org.glassfish.jersey.ext.micrometer|org.glassfish.jersey.ext|g" bundles/apidocs/pom.xml
+
+ echo '-[ Run maven release plugin ]---------------------------------------------------'
+
+ mvn -q -C -DstagingDescription="org.glassfish.jersey.bundles.apidocs:${VERSION}" \
+     -Pstaging,oss-release,pre-release${PROFILE_BUNDLE} -DskipTests -Denforcer.skip -pl bundles/apidocs \
+     install javadoc:jar gpg:sign deploy -Dsource.mvn.plugin.version=3.2.0
\ No newline at end of file
diff --git a/etc/scripts/release/EE8/bundle-examples.sh b/etc/scripts/release/EE8/bundle-examples.sh
new file mode 100644
index 0000000..61afc00
--- /dev/null
+++ b/etc/scripts/release/EE8/bundle-examples.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for releasing examples bundle by release tag.
+#
+# Input Parameters:
+#
+# VERSION - type: String
+#         - example: 2.42
+#         - description: Name of the existing version tag in the Git repo.
+#
+# Configuration:
+#
+# JDK:
+#       oracle-jdk8-latest
+# Git:
+#          git@github.com:eclipse-ee4j/jersey.git
+#    Branches to build:
+#          tags/${VERSION}
+#
+# Bindings:
+#    Secret file:
+#         Variable:
+#              KEYRING
+#         Credentials:
+#              secret-subkeys.asc
+#
+#
+
+
+ gpg --batch --import ${KEYRING}
+ for fpr in $(gpg --list-keys --with-colons  | awk -F: '/fpr:/ {print $10}' | sort -u);
+ do
+   echo -e "5\ny\n" |  gpg --batch --command-fd 0 --expert --edit-key $fpr trust;
+ done
+
+ # Execution environment
+ MVN_HOME="/opt/tools/apache-maven/latest/"
+ PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+
+ mvn clean install -C -B -DskipTests -Denforcer.skip -Ppre-release,staging -pl org.glassfish.jersey.examples:project -amd
+
+ mvn -C -B -DstagingDescription="org.glassfish.jersey.examples:${VERSION}" \
+     -Pstaging,oss-release,pre-release -Denforcer.skip=true \
+     -DskipTests -pl :jersey-examples \
+     deploy
\ No newline at end of file
diff --git a/etc/scripts/release/EE8/bundle-user-guide.sh b/etc/scripts/release/EE8/bundle-user-guide.sh
new file mode 100644
index 0000000..f6a121d
--- /dev/null
+++ b/etc/scripts/release/EE8/bundle-user-guide.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for releasing User Guide bundle by release tag.
+#
+# Input Parameters:
+#
+# VERSION - type: String
+#         - example: 2.42
+#         - description: Name of the existing version tag in the Git repo.
+#
+# Configuration:
+#
+# JDK:
+#       oracle-jdk11-latest
+# Git:
+#          git@github.com:eclipse-ee4j/jersey.git
+#    Credentials:
+#          GitHub bot SSH
+#    Branches to build:
+#          refs/tags/${VERSION}
+#
+# Bindings:
+#    Secret file:
+#         Variable:
+#              KEYRING
+#         Credentials:
+#              secret-subkeys.asc
+#
+#
+
+
+ gpg --batch --import ${KEYRING}
+ for fpr in $(gpg --list-keys --with-colons  | awk -F: '/fpr:/ {print $10}' | sort -u);
+ do
+   echo -e "5\ny\n" |  gpg --batch --command-fd 0 --expert --edit-key $fpr trust;
+ done
+
+ # Execution environment
+ MVN_HOME="/opt/tools/apache-maven/latest/"
+ PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+
+ echo '-[ Set version to ]-'${VERSION}
+
+ mvn -q -Pstaging versions:set -DnewVersion=${VERSION} -DgenerateBackupPoms=false -Djersey.version=${VERSION}
+
+ cd docs
+
+ echo '-[ Run maven release plugin ]---------------------------------------------------'
+
+ mvn -q -C -DstagingDescription="org.glassfish.jersey.jersey-documentation:${VERSION}" \
+     -Pstaging,oss-release,pre-release \
+     -DskipTests \
+     -Djersey.version=${VERSION} \
+     install javadoc:jar gpg:sign deploy
\ No newline at end of file
diff --git a/etc/scripts/release/EE8/release.groovy b/etc/scripts/release/EE8/release.groovy
new file mode 100644
index 0000000..3a88d31
--- /dev/null
+++ b/etc/scripts/release/EE8/release.groovy
@@ -0,0 +1,347 @@
+#!/usr/bin/env groovy
+
+/*
+ * Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+/**
+ * Release script for Jakarta EE8/9 Jersey versions
+ * Release branches are 2.x or 3.0
+ *
+ * Input Parameters:
+ * RELEASE_VERSION - type: String
+ *                 - example:  2.42
+ *                 - Description: mandatory release version. Later is being published to staging/central.
+ * NEXT_VERSION    - type: String
+ *                 - example:  2.43-SNAPSHOT
+ *                 - Description: mandatory next developing version will be committed in to the release branch and later
+ *                               merged into the original release branch for further developing.
+ * BRANCH          - type: Choice Parameter
+ *                 - values: 2.x
+ *                           3.0
+ *                 - Description: Original release branch from which the codebase is being checked out
+ * DRY_RUN         - type: Boolean
+ *                 - Description: if checked nothing is really committed to Git nor published to the staging
+ * OVERWRITE       - type: Boolean
+ *                 - Description: if checked allows replacing of the previously published RELEASE_VERSION of Jersey
+ *
+ */
+
+node {
+
+    def MVN_HOME = tool name: 'apache-maven-latest', type: 'maven'
+    def HELP_PLUGIN = 'org.apache.maven.plugins:maven-help-plugin:2.1.1'
+    def TARGET = 'package javadoc:jar gpg:sign install:install'
+    def DEPLOY_TARGET = ''
+    def RELEASE_VERSION = RELEASE_VERSION
+    def NEXT_VERSION = NEXT_VERSION
+    def RELEASE_TAG = ''
+    def NEW_RELEASE_BRANCH = ''
+    def OVERWRITE = OVERWRITE
+    def PROJECT_NAME = 'Jersey'
+    def LOGIN = 'jersey-bot'
+    def EMAIL = 'jersey-bot@eclipse.org'
+    def REPO = 'git@github.com:eclipse-ee4j/jersey.git'
+    def SECRET_FILE_ID = 'secret-subkeys.asc'
+    def CREDENTIALS_ID = 'github-bot-ssh'
+    def GIT_ORIGIN = 'origin'
+    def RELEASE_FOLDER = env.WORKSPACE
+    def RELEASE_BRANCH = BRANCH
+
+    def STAGING_NAME_PATTERN = 'orgglassfishjersey-[0-9]+'
+    def STAGING_NAME = ''
+    def STAGING_PREV_NAME = ''
+    def STAGING_OPEN_NAME = ''
+    def STAGING_DESC = 'org.glassfish.jersey:' + RELEASE_VERSION
+    def STAGING_BOM_DESC = 'org.glassfish.jersey.bom:' + RELEASE_VERSION
+    def STAGING_PROFILE_ID = '70fa3a107a8918'
+
+    def JDK_11_HOME = tool name: 'openjdk-jdk11-latest', type: 'jdk'
+    def JDK_12_HOME = tool name: 'openjdk-jdk12-latest', type: 'jdk'
+    def JDK_17_HOME = tool name: 'openjdk-jdk17-latest', type: 'jdk'
+    def JDK_8_HOME = tool name: 'oracle-jdk8-latest', type: 'jdk'
+
+    def ZX_BRANCH_MODULES = ',:jersey-jetty-connector,:jersey-container-jetty-http,:jersey-container-jetty-servlet,:jersey-test-framework-provider-jetty,:jersey-test-framework-core,:jersey-container-servlet-core'
+
+    env.JAVA_HOME = JDK_8_HOME
+    env.PATH = "${env.JAVA_HOME}/bin:${env.PATH}:${MVN_HOME}/bin"
+
+    if (RELEASE_BRANCH == '2.x') {
+        ZX_BRANCH_MODULES = ''
+    }
+
+    sh 'java -version'
+
+    stage('Fetch from git') {
+        git(branch: RELEASE_BRANCH, credentialsId: CREDENTIALS_ID, url: REPO)
+    }
+    stage('Prepare environment') {
+
+        dir(RELEASE_FOLDER) {
+            //# Check whether top level pom.xml contains SNAPSHOT version
+            if (!sh(returnStdout: true, script: "grep '<version>' pom.xml | grep 'SNAPSHOT'")?.trim()) {
+                error('-[ Missing SNAPSHOT version in POM! ]-------------------------------------------')
+            }
+
+            //# Compute release versions
+            def SNAPSHOT_VERSION = sh(returnStdout: true, script: 'mvn -q -Dexec.executable="echo" -Dexec.args=\'${project.version}\' --non-recursive exec:exec -Pstaging').trim()
+
+            if (!RELEASE_VERSION?.trim()) {
+                if (!SNAPSHOT_VERSION?.trim()) {
+                    error('-[ Missing required snapshot version number! ]----------------------------------')
+                } else {
+                    def versionTokens = SNAPSHOT_VERSION.split('-')
+                    RELEASE_VERSION = versionTokens[0]
+                }
+            }
+
+            if (!NEXT_VERSION?.trim()) {
+                def (MAJOR_VERSION, MINOR_VERSION) = RELEASE_VERSION.tokenize('.')
+                def NEXT_MINOR_VERSION = (MINOR_VERSION as Integer) + 1
+                NEXT_VERSION = MAJOR_VERSION + '.' + NEXT_MINOR_VERSION + '-SNAPSHOT'
+            }
+
+            RELEASE_TAG = RELEASE_VERSION
+            NEW_RELEASE_BRANCH = RELEASE_VERSION+'-BRANCH'
+
+            echo "Current version: ${SNAPSHOT_VERSION}"
+            echo "Release version: ${RELEASE_VERSION}"
+            echo "Next version:    ${NEXT_VERSION}"
+            echo "Release tag:     ${RELEASE_TAG}"
+            echo "Release branch:  ${NEW_RELEASE_BRANCH}"
+
+            if (!SNAPSHOT_VERSION?.trim() || !RELEASE_VERSION?.trim() || !NEXT_VERSION?.trim()) {
+                error '-[ Missing required version numbers! ]------------------------------------------'
+            }
+
+            if (DRY_RUN == 'true') {
+                echo '-[ Dry run turned on ]----------------------------------------------------------'
+                //TARGET = 'install'
+            } else {
+                DEPLOY_TARGET = ' deploy:deploy'
+            }
+            echo '-[ Configure git user ]--------------------------------------------------------'
+            sh "git config --local user.email \"${EMAIL}\""
+            sh "git config --local user.name \"$LOGIN\""
+
+        }
+
+    }
+    stage('Prepare GPG') {
+        withCredentials([file(credentialsId: SECRET_FILE_ID, variable: 'KEYRING')]) {
+            //# Workaround: GPG initialization
+            sh("gpg --batch --import ${KEYRING}")
+            sh '''
+                for fpr in $(gpg --list-keys --with-colons  | awk -F: '/fpr:/ {print $10}' | sort -u);
+                do
+                    echo -e "5\ny\n" |  gpg --batch --command-fd 0 --expert --edit-key $fpr trust;
+                done
+                '''
+        }
+    }
+    stage('Prepare branch') {
+        echo '-[ Prepare branch ]-------------------------------------------------------------'
+
+        echo '-[ Switching to release branch ]-------------------------------------------------'
+        sh """
+        git checkout ${GIT_ORIGIN}/${RELEASE_BRANCH} && true
+        git reset --hard ${GIT_ORIGIN}/${RELEASE_BRANCH} && true
+        git checkout -B ${NEW_RELEASE_BRANCH}
+        """
+        echo '-[ Release tag cleanup ]--------------------------------------------------------'
+        def TAG_NAME = sh(returnStdout: true, script: "git tag | grep ${RELEASE_TAG} || true").trim()
+        if (RELEASE_TAG == TAG_NAME) {
+            if (OVERWRITE == 'true') {
+                echo "${RELEASE_TAG} tag already exists, deleting"
+                sshagent([CREDENTIALS_ID]) {
+                    sh "git push --delete origin ${RELEASE_TAG} && true"
+                }
+            } else {
+                error "${RELEASE_TAG} tag already exists"
+            }
+            //# Always delete local tag if exists
+            sh """
+            git tag --delete ${RELEASE_TAG} && true
+            """
+        }
+        sh '''
+        sed -i 's|<suppress files="generated" checks=".*"/>|<suppress files="generated" checks=".*"/><suppress files="unpacked-src" checks=".*"/>|g' etc/config/checkstyle-suppressions.xml
+        '''
+    }
+    stage('Check previous stagings') {
+        if (DRY_RUN == 'true') {
+            echo DRY_RUN + ' ------'
+        } else {
+            if (OVERWRITE == 'true') {
+                STAGING_PREV_NAME = sh(returnStdout: true,
+                        script: "mvn -B --non-recursive -Pstaging nexus-staging:rc-list | awk '/\\[INFO] $STAGING_NAME_PATTERN[ ]+CLOSED[ ]+$STAGING_DESC[ ]*\$/ {if(a){a = \$2\",\"a} else{a = \$2}}END{print a}'").trim()
+                echo 'Previously closed staging name: ' + STAGING_PREV_NAME
+            }
+
+            STAGING_OPEN_NAME = sh(returnStdout: true,
+                    script: "mvn -B --non-recursive -Pstaging nexus-staging:rc-list | awk  '/$STAGING_NAME_PATTERN OPEN / {if(a){a = \$2\",\"a} else{a = \$2}}END{print a}'").trim()
+
+            if (!STAGING_OPEN_NAME?.trim()) {
+                echo 'No currently open stagings'
+            } else {
+                echo 'Currently open redundand staging: ' + STAGING_OPEN_NAME + ', immediately closing'
+                sh """
+                    OPEN_STAGINGS=${STAGING_OPEN_NAME}
+                    mvn -B -q -Pstaging nexus-staging:rc-drop -DstagingRepositoryId=\${OPEN_STAGINGS}  
+                """
+            }
+        }
+    }
+    /*
+    stage('Open new staging') {
+        if (DRY_RUN == 'true') {
+            echo DRY_RUN + ' ------'
+        } else {
+            STAGING_NAME = sh(returnStdout: true,
+                script: "mvn -B --non-recursive -Pstaging -DstagingProfileId=${STAGING_PROFILE_ID} -DstagingDescription=${STAGING_DESC} nexus-staging:rc-open | awk  '/\\[INFO] Opened / {print \$3}'").trim()
+            echo 'New staging name: '+STAGING_NAME
+        }
+    }*/
+    stage("Build ${PROJECT_NAME}") {
+        echo env.JAVA_HOME
+        echo '-[ Run maven release ]---------------------------------------------------------'
+        echo '-[ Set Release version ]-------------------------------------------------------'
+        sh """
+        cd ${RELEASE_FOLDER}
+        mvn -B -V -Pstaging versions:set -DnewVersion=${RELEASE_VERSION} -DgenerateBackupPoms=false
+        cd bom
+        mvn -B -V -Pstaging versions:set -DnewVersion=${RELEASE_VERSION} -DgenerateBackupPoms=false
+        cd ..
+        """
+        echo '-[ Update Copyright years ]----------------------------------------------------'
+        sh '''#!/bin/bash -e
+        
+            export CURRENT_YEAR=`date '+%Y'`
+            export SED_CMD_LINE='sed -i "s#, 20.. Oracle and/or its affiliates#, ${CURRENT_YEAR} Oracle and/or its affiliates#g"'
+
+            git status --porcelain --untracked-files=no > modified_pom.log
+            cp modified_pom.log list_of_poms.txt
+            sed -i "s| M |$SED_CMD_LINE |g" modified_pom.log
+            sed -i "s| M ||g" list_of_poms.txt
+
+            bash modified_pom.log
+
+            echo ${CURRENT_YEAR} current year
+
+            while IFS= read -r path_to_pom
+            do
+              export CP_YEAR=`grep -o 'Copyright (c) 20.. Oracle and/or its affiliates' ${path_to_pom} | awk '{print $3}'`
+              [[ -z ${CP_YEAR} ]] && CP_YEAR=${CURRENT_YEAR} || echo ${CP_YEAR}
+              [[ ${CP_YEAR} == ${CURRENT_YEAR} ]] || ( sed -i "s#Copyright (c) ${CP_YEAR} Oracle and/or its affiliates#Copyright (c) ${CP_YEAR}, ${CURRENT_YEAR} Oracle and/or its affiliates#g" ${path_to_pom} ; echo ${path_to_pom} )
+              unset CP_YEAR
+            done < "list_of_poms.txt"
+        '''
+        echo '-[ Run release build ]---------------------------------------------------------'
+        dir(RELEASE_FOLDER) {
+            env.JAVA_HOME = JDK_12_HOME
+            //
+            sh "mvn -am -Pstaging --projects  core-server,core-client,media/jaxb,inject/hk2,ext/wadl-doclet,core-common${ZX_BRANCH_MODULES} clean install -B -q -V -DskipTests"
+            if (RELEASE_BRANCH == '3.0') {
+                env.JAVA_HOME = JDK_17_HOME
+                sh "mvn clean install -B -q -V -DskipTests -am -Pstaging --projects :jersey-spring6,connectors/helidon-connector"
+            }
+            env.JAVA_HOME = JDK_8_HOME
+            sh "mvn -q -B -V -DskipTests -Ddoclint=none -Dadditionalparam='-Xdoclint:none' -Dcheckstyle.skip " +
+                    //" -DstagingDescription='${STAGING_DESC}' -DstagingRepositoryId='${STAGING_NAME}' "+
+                    " -Poss-release,staging -U -C ${TARGET} ${DEPLOY_TARGET}"
+
+            sh "mvn -Poss-release,staging --projects core-server,core-client,media/jaxb,inject/hk2,ext/wadl-doclet,core-common install gpg:sign ${DEPLOY_TARGET} -B -q -V -DskipTests"
+            if (RELEASE_BRANCH == '2.x') {
+                env.JAVA_HOME = JDK_11_HOME
+                sh "mvn -Poss-release,staging --projects connectors/helidon-connector install gpg:sign ${DEPLOY_TARGET} -B -q -V -DskipTests"
+            }
+        }
+    }
+    stage('Prepare release') {
+        sh '''
+        git checkout -- etc/config/checkstyle-suppressions.xml
+        '''
+        echo '-[ Perform release commit to git ]---------------------------------------------'
+        sh "git commit -a -m ${RELEASE_VERSION}"
+        sh "git tag -m ${RELEASE_TAG} -a ${RELEASE_TAG}"
+        echo '-[ Set next snapshot version ]-------------------------------------------------'
+        dir(RELEASE_FOLDER) {
+            sh """
+                mvn -B -Pstaging versions:set -DnewVersion=${NEXT_VERSION} -DgenerateBackupPoms=false 
+                cd bom
+                mvn -B -Pstaging versions:set -DnewVersion=${NEXT_VERSION} -DgenerateBackupPoms=false
+                cd ..
+            """
+        }
+        echo '-[ Perform commit to git ]-----------------------------------------------------'
+        sh "git commit -a -m ${NEXT_VERSION}"
+    }
+    stage('Publish release') {
+        if (DRY_RUN == 'true') {
+            echo '-[ Prepared branch ]----------------------------------------------------------'
+            sh "git branch --list ${NEW_RELEASE_BRANCH}"
+            echo '-[ Prepared tag ]-------------------------------------------------------------'
+            sh "git tag --list ${NEW_RELEASE_BRANCH}"
+            echo '-[ Prepared commits ]---------------------------------------------------------'
+            sh 'git log -n 5'
+            sshagent([CREDENTIALS_ID]) {
+                sh "git push ${GIT_ORIGIN} ${NEW_RELEASE_BRANCH} --dry-run"
+            }
+            return
+        } else {
+            sshagent([CREDENTIALS_ID]) {
+                sh "git push -f ${GIT_ORIGIN} ${NEW_RELEASE_BRANCH} --follow-tags"
+            }
+        }
+    }
+    stage('Find related staging') {
+        if (DRY_RUN != 'true') {
+            if (!STAGING_NAME?.trim()) {
+                try {
+                    STAGING_NAME =
+                            sh(returnStdout: true,
+                                    script: "mvn -B --non-recursive -Pstaging nexus-staging:rc-list | awk  '/$STAGING_NAME_PATTERN OPEN / {if(a){a = \$2\",\"a} else{a = \$2}}END{print a}'"
+                            ).trim()
+                } catch (Error err) {
+                    currentBuild.result = 'UNSTABLE'
+                }
+            }
+            echo 'Staging name: ' + STAGING_NAME
+        } else {
+            echo 'DRY_RUN'
+        }
+    }
+    stage('Close released staging') {
+        if (!STAGING_NAME?.trim()) {
+            echo 'Nothing to be closed'
+        } else {
+            sh("mvn -B -q -Pstaging nexus-staging:rc-close -DstagingRepositoryId=${STAGING_NAME} -DstagingDescription='${STAGING_DESC}'")
+        }
+    }
+    stage('Drop redundant staging') {
+        if (!STAGING_PREV_NAME?.trim()) {
+            echo 'Nothing to be dropped'
+        } else {
+            try {
+                sh("""
+                OPEN_STAGINGS=${STAGING_PREV_NAME}
+                mvn -B -q -Pstaging nexus-staging:rc-drop -DstagingRepositoryId=\${OPEN_STAGINGS}
+                """)
+            } catch (Error err) {
+                currentBuild.result = 'UNSTABLE'
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/etc/scripts/release/Release-After/list-closed-stagings.sh b/etc/scripts/release/Release-After/list-closed-stagings.sh
new file mode 100644
index 0000000..d5f32ca
--- /dev/null
+++ b/etc/scripts/release/Release-After/list-closed-stagings.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for listing staging from the staging repo.
+#
+# Input Parameters:
+#     ----none----
+# Configuration:
+#
+# JDK:
+#       (System)
+# Git:
+#     ----none----
+#
+#
+
+cat <<EOT >> pom.xml
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available at
+    https://www.gnu.org/software/classpath/license.html.
+
+    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.eclipse.ee4j</groupId>
+        <artifactId>project</artifactId>
+        <version>1.0.9</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.glassfish.jersey</groupId>
+    <artifactId>release-helper-util</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <name>Jersey Release Helper</name>
+
+    <description>Generated POM for Jersey Release Helper utils</description>
+    <url>https://projects.eclipse.org/projects/ee4j.jersey</url>
+
+    <scm>
+      <connection>scm:git:git://github.com/eclipse-ee4j/jersey</connection>
+      <developerConnection>scm:git:git://github.com/eclipse-ee4j/jersey</developerConnection>
+      <url>https://github.com/eclipse-ee4j/jersey</url>
+    </scm>
+
+</project>
+EOT
+
+MVN_HOME="/opt/tools/apache-maven/latest/"
+PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+
+export STAGING_PARAMS='-DnexusUrl=https://jakarta.oss.sonatype.org/ -DserverId=ossrh'
+export STAGING_PLUGIN='org.sonatype.plugins:nexus-staging-maven-plugin:1.6.7'
+
+
+mvn -B ${STAGING_PARAMS} ${STAGING_PLUGIN}:rc-list | grep orgglassfishjersey > closed_stagings.txt || true
+
+
+#
+#
+# Archive the artifacts:
+#      closed_stagings.txt
+#
diff --git a/etc/scripts/release/Release-After/populate-documentation.sh b/etc/scripts/release/Release-After/populate-documentation.sh
new file mode 100644
index 0000000..025e512
--- /dev/null
+++ b/etc/scripts/release/Release-After/populate-documentation.sh
@@ -0,0 +1,166 @@
+#!/bin/bash -lex
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for api docs publishing. Publishes api docs from the bundle in the Maven Central to the project's site.
+#
+# Input Parameters:
+#   RELEASE_VERSION    - type: String
+#                      - example: 3.1.6
+#                      - description: version for which project info is being published
+#   DRY_RUN            - type: Boolean
+#                      - description: If checked nothing is being published/generated
+#   WEBSITE_URL        - type: String
+#                      - value: git@github.com:eclipse-ee4j/jersey.github.io.git
+#                      - description: GitHub url for the project info/apidocs repository.
+#                        Mandatory and changes only in exceptional cases
+#  BRANCH_SPECIFIER    - type: String
+#                      - example: 2.x
+#                      - description: Branch for which the api docs are being published. Used only in Git commit message
+#  UPDATE_LATEST       - type: Boolean
+#                      - description: If checked updates the latest api docs (distinguishes for EE8/EE9/EE10) along
+#                        with publication into the RELEASE_VERSION folder.
+# Configuration:
+#
+# JDK:
+#       oracle-jdk8-latest
+# Git:
+#       ----none----
+#
+# SSH agent:
+#    GitHub bot SSH
+#
+#
+#
+
+
+#
+# The first shell execution
+#
+
+
+TOOLS_PREFIX=/opt/tools
+#JAVA_PREFIX=/opt/tools/java/oracle
+MVN_HOME=/opt/tools/apache-maven/latest
+#JAVA_HOME=/opt/tools/java/oracle/jdk-8/latest
+PATH=/opt/tools/apache-maven/latest/bin:${JAVA_HOME}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+
+export CENTRAL_URL='https://repo1.maven.org/maven2'
+export STAGING_URL='https://jakarta.oss.sonatype.org/content/repositories/staging'
+
+# !!! if build docbook it's essentially important to turn the pre-release profile ON !!!
+#mvn clean install -Pstaging,pre-release -DskipTests  -V -q -e -U -B -f docs/pom.xml -Djersey.version=$RELEASE_VERSION
+# however we download already published docbook from staging/central:
+mkdir -p $WORKSPACE/docs/target/docbook/index
+cd $WORKSPACE/docs/target/docbook/index
+wget -nv ${STAGING_URL}/org/glassfish/jersey/jersey-documentation/${RELEASE_VERSION}/jersey-documentation-${RELEASE_VERSION}-docbook.zip
+unzip -o jersey-documentation-${RELEASE_VERSION}-docbook.zip
+rm jersey-documentation-${RELEASE_VERSION}-docbook.zip
+
+mkdir -p $WORKSPACE/target/site/apidocs
+cd $WORKSPACE/target/site/apidocs
+wget -nv ${STAGING_URL}/org/glassfish/jersey/bundles/apidocs/${RELEASE_VERSION}/apidocs-${RELEASE_VERSION}-javadoc.jar -O apidocs-javadoc.jar
+jar -xf apidocs-javadoc.jar
+rm apidocs-javadoc.jar
+rm -rf META-INF
+
+
+#
+# The second shell execution
+#
+
+
+#!/bin/bash -lex
+
+TOOLS_PREFIX=/opt/tools
+#JAVA_PREFIX=/opt/tools/java/oracle
+MVN_HOME=/opt/tools/apache-maven/latest
+#JAVA_HOME=/opt/tools/java/oracle/jdk-8/latest
+PATH=/opt/tools/apache-maven/latest/bin:${JAVA_HOME}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+
+DIRS="$RELEASE_VERSION"
+if $UPDATE_LATEST;
+then
+	if [[ $RELEASE_VERSION == 2* ]] ;
+    then
+    	export DIRS="latest $DIRS"
+    elif [[ $RELEASE_VERSION == 3.1* ]] ;
+    then
+    	export DIRS="latest31x $DIRS"
+    else
+    	export DIRS="latest30x $DIRS"
+    fi
+    echo ${DIRS} for ${RELEASE_VERSION} release
+fi
+
+#export PATH=/opt/csw/bin:$PATH
+WEB_DIR=$WORKSPACE/target/jersey-web
+
+
+function copyDocs {
+    APIDOCS_DIR=$WEB_DIR/apidocs/$1
+    DOCS_DIR=$WEB_DIR/documentation/$1
+
+    #
+    # API docs
+    #
+    if test ! -e $APIDOCS_DIR ; then
+        mkdir -p $APIDOCS_DIR
+    fi
+    cd $APIDOCS_DIR
+
+    rm -rf jersey || true
+    cp -R $WORKSPACE/target/site/apidocs ./jersey
+
+    #
+    # user guide
+    #
+    rm -rf $DOCS_DIR || true
+    mkdir -p $DOCS_DIR
+    cp -r $WORKSPACE/docs/target/docbook/index/* $DOCS_DIR
+    rm $DOCS_DIR/*.fo || true
+}
+
+if test -e $WEB_DIR ; then
+    rm -rf $WEB_DIR
+fi
+
+# would couse shallow reject: git clone --depth 1 $WEBSITE_URL $WEB_DIR
+git clone $WEBSITE_URL $WEB_DIR
+
+cd $WEB_DIR
+
+for dir in $DIRS; do
+    copyDocs $dir
+done
+
+cd $WEB_DIR
+
+git config --local user.email "jersey-bot@eclipse.org"
+git config --local user.name "jersey-bot"
+git add -A .
+git diff --cached --exit-code || git commit -m "[jenkins] automatic javadoc and documentation update [$RELEASE_VERSION @ $BRANCH_SPECIFIER]"
+
+if [ "$DRY_RUN" = "false" ]; then
+  echo "Pushing Web sources to $WEBSITE_URL"
+  git push origin master
+else
+  echo "Dry run .. not pushing to the master"
+  git push origin master --dry-run
+fi
+
+
diff --git a/etc/scripts/release/Release-After/publish-release-notes.sh b/etc/scripts/release/Release-After/publish-release-notes.sh
new file mode 100644
index 0000000..d547134
--- /dev/null
+++ b/etc/scripts/release/Release-After/publish-release-notes.sh
@@ -0,0 +1,109 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for publishing listed stagings from the staging repo into the Maven Central.
+#
+# Input Parameters:
+#   VERSION            - type: String
+#                      - example: 3.1.6
+#                      - description: version for which release notes are being published
+#   DRY_RUN            - type: Boolean
+#                      - description: If checked nothing is being published/generated
+#   PUBLISH_TO_GITHUB  - type: Boolean
+#                      - description: If checked generated notes are propagated to GitHub
+# Configuration:
+#
+# JDK:
+#       oracle-jdk8-latest
+# Git:
+#     https://github.com/eclipse-ee4j/jersey
+#
+# Bindings:
+#    Username and password (separated):
+#       Username Variable:
+#          BOT_NAME
+#       Password Variable:
+#          BOT_PASSWORD
+#       Credentials:
+#          GitHub bot (username/token)
+#
+#
+#
+
+
+cat <<EOT >> pom.xml
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available at
+    https://www.gnu.org/software/classpath/license.html.
+
+    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.eclipse.ee4j</groupId>
+        <artifactId>project</artifactId>
+        <version>1.0.9</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.glassfish.jersey</groupId>
+    <artifactId>release-helper-util</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <name>Jersey Release Helper</name>
+
+    <description>Generated POM for Jersey Release Helper utils</description>
+    <url>https://projects.eclipse.org/projects/ee4j.jersey</url>
+
+    <scm>
+      <connection>scm:git:git://github.com/eclipse-ee4j/jersey</connection>
+      <developerConnection>scm:git:git://github.com/eclipse-ee4j/jersey</developerConnection>
+      <url>https://github.com/eclipse-ee4j/jersey</url>
+    </scm>
+
+</project>
+EOT
+
+# Execution environment
+readonly MVN_HOME="/opt/tools/apache-maven/latest/"
+PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+readonly RELEASE_DATE=`date -I`
+
+mkdir -p target
+
+mvn -B -V org.glassfish.jersey.tools.plugins:jersey-release-notes-maven-plugin:1.0.1:release-notes -DskipTests \
+-DreleaseVersion=${VERSION} -DgithubLogin=${BOT_NAME} -DgithubPassword=${BOT_PASSWORD} \
+-DtemplateFilePath=release-note.html -DreleaseDate=${RELEASE_DATE} \
+-DdryRun=${DRY_RUN} -DpublishToGithub=${PUBLISH_TO_GITHUB}
+
+cp -a `pwd`/target/release-notes ${WORKSPACE}
\ No newline at end of file
diff --git a/etc/scripts/release/Release-After/release-note.html b/etc/scripts/release/Release-After/release-note.html
new file mode 100644
index 0000000..f0e5996
--- /dev/null
+++ b/etc/scripts/release/Release-After/release-note.html
@@ -0,0 +1,78 @@
+<html>
+<!--
+
+    Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available at
+    https://www.gnu.org/software/classpath/license.html.
+
+    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+-->
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
+    <meta name="google-site-verification" content="OiKukTHVW4bdQqx8Fq0zA2EZ_hI6-yYL-MvkCxBxaFs" />
+    <title>Release Notes - Jersey @LATEST_VERSION@</title>
+</head>
+
+<body>
+
+<h1>Release Notes - <a href="/">Jersey</a> @LATEST_VERSION@</h1>
+
+Release date: <strong>@RELEASE_DATE@</strong>
+
+<h2>Previous releases</h2>
+
+<ul>
+    <li><a href="2.29.1.html">Jersey 2.29.1 Release Notes</a></li>
+    <li><a href="2.29.html">Jersey 2.29 Release Notes</a></li>
+    <li><a href="2.28.html">Jersey 2.28 Release Notes</a></li>
+    <li><a href="2.25.1.html">Jersey 2.25.1 Release Notes</a></li>
+    <li><a href="2.25.html">Jersey 2.25 Release Notes</a></li>
+    <li><a href="2.24.1.html">Jersey 2.24.1 Release Notes</a></li>
+    <li><a href="2.24.html">Jersey 2.24 Release Notes</a></li>
+    <li><a href="2.23.2.html">Jersey 2.23.2 Release Notes</a></li>
+    <li><a href="2.23.1.html">Jersey 2.23.1 Release Notes</a></li>
+    <li><a href="2.23.html">Jersey 2.23 Release Notes</a></li>
+    <li><a href="2.22.2.html">Jersey 2.22.2 Release Notes</a></li>
+    <li><a href="2.22.1.html">Jersey 2.22.1 Release Notes</a></li>
+    <li><a href="2.22.html">Jersey 2.22 Release Notes</a></li>
+    <li><a href="2.21.1.html">Jersey 2.21.1 Release Notes</a></li>
+    <li><a href="2.21.html">Jersey 2.21 Release Notes</a></li>
+    <li><a href="2.20.html">Jersey 2.20 Release Notes</a></li>
+    <li><a href="2.19.html">Jersey 2.19 Release Notes</a></li>
+    <li><a href="2.18.html">Jersey 2.18 Release Notes</a></li>
+    <li><a href="2.17.html">Jersey 2.17 Release Notes</a></li>
+    <li><a href="2.16.html">Jersey 2.16 Release Notes</a></li>
+    <li><a href="2.14.html">Jersey 2.14 Release Notes</a></li>
+    <li><a href="2.13.html">Jersey 2.13 Release Notes</a></li>
+    <li><a href="2.12.html">Jersey 2.12 Release Notes</a></li>
+    <li><a href="2.11.html">Jersey 2.11 Release Notes</a></li>
+    <li><a href="2.10.1.html">Jersey 2.10.1 Release Notes</a></li>
+    <li><a href="2.10.html">Jersey 2.10 Release Notes</a></li>
+    <li><a href="2.9.1.html">Jersey 2.9.1 Release Notes</a></li>
+    <li><a href="2.9.html">Jersey 2.9 Release Notes</a></li>
+    <li><a href="2.8.html">Jersey 2.8 Release Notes</a></li>
+    <li><a href="2.7.html">Jersey 2.7 Release Notes</a></li>
+    <li><a href="2.6.html">Jersey 2.6 Release Notes</a></li>
+    <li><a href="2.5.1.html">Jersey 2.5.1 Release Notes</a></li>
+    <li><a href="2.5.html">Jersey 2.5 Release Notes</a></li>
+    <li><a href="2.4.1.html">Jersey 2.4.1 Release Notes</a></li>
+    <li><a href="2.4.html">Jersey 2.4 Release Notes</a></li>
+    <li><a href="2.3.1.html">Jersey 2.3.1 Release Notes</a></li>
+    <li><a href="2.3.html">Jersey 2.3 Release Notes</a></li>
+    <li><a href="2.2.html">Jersey 2.2 Release Notes</a></li>
+    <li><a href="2.1.html">Jersey 2.1 Release Notes</a></li>
+    <li><a href="2.0.html">Jersey 2.0 Release Notes</a></li>
+</ul>
+
+</body>
+</html>
diff --git a/etc/scripts/release/Release-After/release-project-info.sh b/etc/scripts/release/Release-After/release-project-info.sh
new file mode 100644
index 0000000..ebfe9b1
--- /dev/null
+++ b/etc/scripts/release/Release-After/release-project-info.sh
@@ -0,0 +1,103 @@
+#!/bin/bash -lex
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for project info publishing. MUST BE RUN ONLY AFTER THE APIDOCS PUBLISHING.
+#
+# Input Parameters:
+#   RELEASE_VERSION    - type: String
+#                      - example: 3.1.6
+#                      - description: version for which project info is being published
+#   DRY_RUN            - type: Boolean
+#                      - description: If checked nothing is being published/generated
+#   WEBSITE_URL        - type: String
+#                      - value: git@github.com:eclipse-ee4j/jersey.github.io.git
+#                      - description: GitHub url for the project info/apidocs repository.
+#                        Mandatory and changes only in exceptional cases
+# Configuration:
+#
+# JDK:
+#       openjdk-jdk11-latest
+# Git:
+#       https://github.com/eclipse-ee4j/jersey
+#
+#   Branches to build:
+#       tags/${RELEASE_VERSION}
+#
+# SSH agent:
+#    GitHub bot SSH
+#
+#
+#
+
+
+#
+# The first shell execution
+#
+
+MVN_HOME=/opt/tools/apache-maven/latest
+PATH=${PATH}:${MVN_HOME}/bin:${JAVA_HOME}/bin
+
+mvn clean install -B -V -q -PtestsSkip,checkstyleSkip -Dtests.excluded -DskipTests '-Dmaven.test.skip=true'
+
+mvn -B -V -q -Pproject-info,checkstyleSkip,testsSkip,findbugsSkip,staging site site:stage \
+     -DgenerateProjectInfo=true -Dtests.excluded -Ddependency.locations.enabled=false \
+     -Dmaven.jxr.skip=true -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -DskipTests \
+     -Dfindbugs.skip=true
+
+#
+# The second shell execution
+#
+
+#!/bin/bash -lex
+
+export PATH=/opt/csw/bin:$PATH
+WEB_DIR=$WORKSPACE/target/jersey-web
+PROJECT_INFO_DIR=$WEB_DIR/project-info/$RELEASE_VERSION
+
+if test -e $WEB_DIR ; then
+    rm -rf $WEB_DIR
+fi
+
+# would couse shallow reject: git clone --depth 1 $WEBSITE_SOURCE_URL $WEB_DIR
+git clone $WEBSITE_URL $WEB_DIR
+cd $WEB_DIR
+
+if test ! -e $PROJECT_INFO_DIR ; then
+    mkdir -p $PROJECT_INFO_DIR
+fi
+
+cd $PROJECT_INFO_DIR
+
+rm -rf jersey || true
+cp -R $WORKSPACE/target/staging ./jersey
+
+cd $WEB_DIR
+
+git config --local user.email "jersey-bot@eclipse.org"
+git config --local user.name "jersey-bot"
+git add -A .
+#git diff --cached --exit-code ||
+git commit -m "[jenkins] automatic project-info update [$RELEASE_VERSION]"
+
+if [ "$DRY_RUN" = "false" ]; then
+  echo Pushing Web sources to $WEBSITE_URL
+  git push origin master
+else
+  echo "Dry run .. not pushing to the master"
+  git push origin master --dry-run
+fi
\ No newline at end of file
diff --git a/etc/scripts/release/Release-After/release-staging-to-central.sh b/etc/scripts/release/Release-After/release-staging-to-central.sh
new file mode 100644
index 0000000..b470730
--- /dev/null
+++ b/etc/scripts/release/Release-After/release-staging-to-central.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+#
+# Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License v. 2.0, which is available at
+# http://www.eclipse.org/legal/epl-2.0.
+#
+# This Source Code may also be made available under the following Secondary
+# Licenses when the conditions for such availability set forth in the
+# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+# version 2 with the GNU Classpath Exception, which is available at
+# https://www.gnu.org/software/classpath/license.html.
+#
+# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+#
+
+#
+# script for publishing listed stagings from the staging repo into the Maven Central.
+#
+# Input Parameters:
+#     STAGING_REPO_ID  - type: String
+#                      - example: orgglassfishjersey-1226,orgglassfishjersey-1227,orgglassfishjersey-1228,orgglassfishjersey-1229,orgglassfishjersey-1230
+#                      - description: list all staggings (comma separated) to be published to the Maven Central
+#     STAGING_DESC     - type: String
+#                      - example:org.glassfish.jersey:2.42
+#                      - description: description of what is published. Usually <group.id>:<version>
+# Configuration:
+#
+# JDK:
+#       (System)
+# Git:
+#     ----none----
+#
+#
+
+cat <<EOT >> pom.xml
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright (c) 2024 Oracle and/or its affiliates. All rights reserved.
+
+    This program and the accompanying materials are made available under the
+    terms of the Eclipse Public License v. 2.0, which is available at
+    http://www.eclipse.org/legal/epl-2.0.
+
+    This Source Code may also be made available under the following Secondary
+    Licenses when the conditions for such availability set forth in the
+    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+    version 2 with the GNU Classpath Exception, which is available at
+    https://www.gnu.org/software/classpath/license.html.
+
+    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.eclipse.ee4j</groupId>
+        <artifactId>project</artifactId>
+        <version>1.0.9</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.glassfish.jersey</groupId>
+    <artifactId>release-helper-util</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <name>Jersey Release Helper</name>
+
+    <description>Generated POM for Jersey Release Helper utils</description>
+    <url>https://projects.eclipse.org/projects/ee4j.jersey</url>
+
+    <scm>
+      <connection>scm:git:git://github.com/eclipse-ee4j/jersey</connection>
+      <developerConnection>scm:git:git://github.com/eclipse-ee4j/jersey</developerConnection>
+      <url>https://github.com/eclipse-ee4j/jersey</url>
+    </scm>
+
+</project>
+EOT
+
+MVN_HOME="/opt/tools/apache-maven/latest/"
+PATH="${MVN_HOME}/bin:${JAVA_HOME}:/bin:${PATH}"
+
+export STAGING_PARAMS='-DnexusUrl=https://jakarta.oss.sonatype.org/ -DserverId=ossrh'
+export STAGING_PLUGIN='org.sonatype.plugins:nexus-staging-maven-plugin:1.6.7'
+
+
+mvn ${STAGING_PARAMS} -B -C -V ${STAGING_PLUGIN}:rc-release -DstagingRepositoryId="${STAGING_REPO_ID}" -DstagingDescription="${STAGING_DESC}"
+
diff --git a/examples/NOTICE.md b/examples/NOTICE.md
index c68ea53..b14ed9d 100644
--- a/examples/NOTICE.md
+++ b/examples/NOTICE.md
@@ -96,7 +96,7 @@
 * Project: http://www.kineticjs.com, https://github.com/ericdrowell/KineticJS
 * Copyright: Eric Rowell
 
-org.objectweb.asm Version 9.6
+org.objectweb.asm Version 9.7
 * License: Modified BSD (https://asm.ow2.io/license.html)
 * Copyright (c) 2000-2011 INRIA, France Telecom. All rights reserved.
 
diff --git a/pom.xml b/pom.xml
index 8069240..dca426b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2240,7 +2240,7 @@
         <arquillian.weld.version>3.0.1.Final</arquillian.weld.version> <!-- 3.0.2.Final fails microprofile TCK tests -->
         <!-- asm is now source integrated - keeping this property to see the version -->
         <!-- see core-server/src/main/java/jersey/repackaged/asm/.. -->
-        <asm.version>9.6</asm.version>
+        <asm.version>9.7</asm.version>
         <!--required for spring (ext) modules integration -->
         <aspectj.weaver.version>1.9.21.1</aspectj.weaver.version>
 <!--        <bnd.plugin.version>2.3.6</bnd.plugin.version>-->
