diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml
index 486ee6ccb3..9e952b1c2e 100644
--- a/.github/workflows/build-test.yml
+++ b/.github/workflows/build-test.yml
@@ -2,7 +2,7 @@ name: Pull Requests
on:
push:
- pull_request:
+ #pull_request:
concurrency:
# Only run once for latest commit per ref and cancel other (previous) runs.
@@ -24,13 +24,13 @@ jobs:
name: Check / Tests -> JDK-${{ matrix.jdk }}/${{ matrix.os }}
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
with:
# we don't know what commit the last tag was it's safer to get entire repo so previousStableVersion resolves
fetch-depth: 0
- name: Set up python 3
- uses: actions/setup-python@v3
+ uses: actions/setup-python@v4
with:
python-version: '3.x'
architecture: 'x64'
@@ -39,7 +39,7 @@ jobs:
- run: pip install -r python/requirements.txt
- name: Set up JDK ${{ matrix.jdk }}
- uses: actions/setup-java@v2
+ uses: actions/setup-java@v3
with:
java-version: ${{ matrix.jdk }}
distribution: 'adopt'
@@ -55,19 +55,19 @@ jobs:
name: BUILD ${{ github.sha }}
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
with:
# we don't know what commit the last tag was it's safer to get entire repo so previousStableVersion resolves
fetch-depth: 0
- - name: Set up python 2
- uses: actions/setup-python@v2
+ - name: Set up python 3
+ uses: actions/setup-python@v4
with:
- python-version: '2.x'
+ python-version: '3.x'
architecture: 'x64'
- name: Set up JDK 17
- uses: actions/setup-java@v2
+ uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'adopt'
@@ -77,7 +77,7 @@ jobs:
run: ant artifact
- name: ziping artifact
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v4
with:
name: play-${{ github.sha }}
if-no-files-found: error
diff --git a/documentation/manual/configuration.textile b/documentation/manual/configuration.textile
index 3c4bd74b13..a1c70f6e0c 100644
--- a/documentation/manual/configuration.textile
+++ b/documentation/manual/configuration.textile
@@ -758,7 +758,7 @@ Java source level, which overrides the @java.version@ system property. For examp
bc. java.source=11
-Values: @1.7@ (No longer supported since 1.5.0), @1.8@ (No longer supported since 1.7.0), @9@ (No longer supported since 1.7.0), @10@ (No longer supported since 1.7.0), @11@, @12@, @13@, @14@, @15@, @17@, @18@.
+Values: @1.7@ (No longer supported since 1.5.0), @1.8@ (No longer supported since 1.7.0), @9@ (No longer supported since 1.7.0), @10@ (No longer supported since 1.7.0), @11@, @12@, @13@, @14@, @15@, @17@, @18@, @19@.
Default: @11@
diff --git a/documentation/manual/home.textile b/documentation/manual/home.textile
index 5c2be8b276..3ed0415926 100644
--- a/documentation/manual/home.textile
+++ b/documentation/manual/home.textile
@@ -189,6 +189,7 @@ h2. Version notes
New versions of Play include certain changes. Check older release notes for:
# "About Play releases":releases/releases
+# "Play 1.8.0":releases/release1.8.x/releasenotes-1.8.0
# "Play 1.7.1":releases/release1.7.x/releasenotes-1.7.1
# "Play 1.7.0":releases/release1.7.x/releasenotes-1.7.0
# "Play 1.6.0":releases/release1.6.x/releasenotes-1.6.0
diff --git a/documentation/manual/releases/release1.8.x/releasenotes-1.8.0.textile b/documentation/manual/releases/release1.8.x/releasenotes-1.8.0.textile
new file mode 100644
index 0000000000..527637736f
--- /dev/null
+++ b/documentation/manual/releases/release1.8.x/releasenotes-1.8.0.textile
@@ -0,0 +1,35 @@
+h1. Play 1.8.0 -- Release notes
+
+Play 1.8.0 has been released of the master branch.
+
+The changes in this release are listed in [1.8.0 on github](https://github.com/playframework/play1/issues?q=milestone%3A1.8.0+) including 22 resolved tickets.
+
+
+h2. What's new in Play 1.8.0
+
+* [#1428](https://github.com/playframework/play1/issues/1428): add support for java 18, 19.
+
+h2. What's fixed in Play 1.8.0
+
+* [#1407](https://github.com/playframework/play1/issues/1407): Cleanup code
+* [#1417](https://github.com/playframework/play1/issues/1417): Updated dependencies as of 20220618
+* [#1425](https://github.com/playframework/play1/issues/1425): Updated dependencies
+* [#1430](https://github.com/playframework/play1/issues/1430): NullPointer in JPABase.cascadeOrphans() caused by unused lines
+* [#1431](https://github.com/playframework/play1/issues/1431): Bugfix/1430 do not get unused value
+* [#1432](https://github.com/playframework/play1/issues/1432): Better compatibility with Hibernate Envers
+* [#1433](https://github.com/playframework/play1/issues/1433): about play 1.7.1 log problem
+* [#1437](https://github.com/playframework/play1/issues/1437): "play auto-test" can return a exit code zero when the tests don't run
+* [#1435](https://github.com/playframework/play1/issues/1435): #1437: play auto-test can return an exit code of zero when the teà
+* [#1438](https://github.com/playframework/play1/issues/1438): Upgrade Commons Lang
+* [#1440](https://github.com/playframework/play1/issues/1440): Fix warnings with generics
+* [#1441](https://github.com/playframework/play1/issues/1441): Dependency update 20230106
+* [#1444](https://github.com/playframework/play1/issues/1444): Fix missing HTTPMessage.getHeader()
+* [#1446](https://github.com/playframework/play1/issues/1446): Removed support for python 2.x in github action
+* [#1447](https://github.com/playframework/play1/issues/1447): [#1146] test(python): use python 3 for build instead of deprecated python2
+* [#1448](https://github.com/playframework/play1/issues/1448): Updated 3rd party dependencies
+* [#1459](https://github.com/playframework/play1/issues/1459): Updated 3rd party dependencies
+* [#1460](https://github.com/playframework/play1/issues/1460): Removed Python imp dependency
+* [#1465](https://github.com/playframework/play1/issues/1465): #1457 python imp module
+* [#1466](https://github.com/playframework/play1/issues/1466): Python AttributeError: module 'time' has no attribute 'clock'
+* [#1467](https://github.com/playframework/play1/issues/1467): #1466 The clock function was removed from time module in Python 3.8
+* [#1469](https://github.com/playframework/play1/issues/1469): feat(YamlParser): add SafeConstructor to enforce security
diff --git a/documentation/manual/releases/releases.textile b/documentation/manual/releases/releases.textile
index ea327f932a..90d795b38f 100644
--- a/documentation/manual/releases/releases.textile
+++ b/documentation/manual/releases/releases.textile
@@ -2,6 +2,10 @@ h1. About Play releases
You can download Play releases "here":https://www.playframework.com/download. Each release has a Migration Guide that explains how to upgrade from the previous release.
+h2. Play 1.8.x
+
+# "Play 1.8.0":release1.8.x/releasenotes-1.8.0
+
h2. Play 1.7.x
# "Play 1.7.1":release1.7.x/releasenotes-1.7.1
@@ -52,4 +56,4 @@ h2. Play 1.0.x
# "Play 1.0.3":release1.0.x/releasenotes-1.0.3
# "Play 1.0.2":release1.0.x/releasenotes-1.0.2
-# "Play 1.0.1":release1.0.x/releasenotes-1.0.1
\ No newline at end of file
+# "Play 1.0.1":release1.0.x/releasenotes-1.0.1
diff --git a/framework/.gitignore b/framework/.gitignore
new file mode 100644
index 0000000000..abc78ba75a
--- /dev/null
+++ b/framework/.gitignore
@@ -0,0 +1,2 @@
+/.gradle/
+/build/
diff --git a/framework/build.gradle b/framework/build.gradle
new file mode 100644
index 0000000000..04ea3c6421
--- /dev/null
+++ b/framework/build.gradle
@@ -0,0 +1,135 @@
+import org.yaml.snakeyaml.Yaml
+
+buildscript {
+ repositories {
+ mavenLocal()
+ maven {
+ url "https://repo.nos.to/content/repositories/central/"
+ credentials {
+ username = "$mavenUser"
+ password = "$mavenPassword"
+ }
+ }
+ }
+ dependencies {
+ classpath group: 'org.yaml', name: 'snakeyaml', version: '2.2'
+ }
+}
+
+plugins {
+ id 'java'
+ id 'maven-publish'
+}
+
+group 'com.nosto.play'
+version '1.7.1-nosto-GA5-SNAPSHOT'
+
+sourceSets {
+ main {
+ java {
+ srcDirs = ['src']
+ }
+ resources {
+ srcDirs = ['src']
+ }
+ }
+ test {
+ java {
+ srcDirs = ['test-src']
+ }
+ resources {
+ srcDirs = ['test-src']
+ }
+
+ output.resourcesDir = "build/classes/java/test"
+ }
+}
+
+def deps = new Yaml().load(file("dependencies.yml").text)
+
+
+repositories {
+ mavenLocal()
+ maven {
+ url "https://repo.nos.to/content/repositories/central/"
+ credentials {
+ username = "$mavenUser"
+ password = "$mavenPassword"
+ }
+ }
+}
+
+dependencies {
+ deps.require.each {
+ def lv = it.split(" ")
+ def version = lv[lv.size() - 1]
+ def lib = it.substring(0, it.length() - version.length()).split("->")
+ def group = lib[0]
+ def name = lib.size() > 1 ? lib[1] : group
+ implementation(group: group.trim(), name: name.trim(), version: version.trim(), {
+ transitive = false
+ })
+ }
+
+ // libs not listed in dependencies.yml, but required for compilation
+ compileOnly(group: 'org.apache.ant', name: 'ant', version: '1.10.14')
+ compileOnly(group: 'org.apache.ant', name: 'ant-junit', version: '1.10.14')
+ compileOnly group: 'com.google.code.maven-play-plugin.org.playframework', name: 'jj-simplecaptcha', version: '1.1'
+
+ testImplementation(group: 'org.apache.ant', name: 'ant', version: '1.10.14')
+ testImplementation(group: 'org.easytesting', name: 'fest-assert', version: '1.4')
+ testImplementation(group: 'org.easytesting', name: 'fest-util', version: '1.1.6')
+ testImplementation(group: 'org.mockito', name: 'mockito-core', version: '2.21.0')
+ testImplementation(group: 'org.objenesis', name: 'objenesis', version: '2.6')
+}
+
+jar {
+ manifest {
+ attributes 'Premain-Class': 'play.classloading.HotswapAgent',
+ 'Can-Redefine-Classes': true,
+ 'Built-JDK': System.getProperty('java.version'),
+ 'Name': 'Play',
+ 'Specification-Title': 'Play! framework'
+ }
+}
+
+task assembleRunscripts(type: Zip) {
+ archiveBaseName = 'play'
+ description "Assemble archive $archiveBaseName"
+ from("../play")
+ from("pym") {
+ into("framework/pym")
+ }
+ from("src/play/version") {
+ into("framework/src/play")
+ }
+}
+
+task copyDependencies(type: Copy) {
+ from configurations.runtimeClasspath
+ into "lib-gradle"
+}
+
+
+publishing {
+ publications {
+ mavenJava(MavenPublication) {
+ artifactId "play"
+
+ from components.java
+ }
+ mavenZip(MavenPublication) {
+ artifactId "play-zip"
+ artifact assembleRunscripts
+ }
+ }
+ repositories {
+ maven {
+ url 'https://repo.nos.to/content/repositories/NostoDependencies/'
+ credentials {
+ username "$mavenUser"
+ password "$mavenPassword"
+ }
+ }
+ }
+}
diff --git a/framework/dependencies.yml b/framework/dependencies.yml
index da2827a326..856c68c07e 100644
--- a/framework/dependencies.yml
+++ b/framework/dependencies.yml
@@ -9,73 +9,76 @@ transitiveDependencies: false
require: &allDependencies
- antlr 2.7.7
- com.mchange -> c3p0 0.9.5.5
- - com.zaxxer -> HikariCP 5.0.1
- - org.ow2.asm -> asm 9.3
- - org.ow2.asm -> asm-commons 9.3
- - org.ow2.asm -> asm-util 9.3
- - org.ow2.asm -> asm-tree 9.3
- - org.ow2.asm -> asm-analysis 9.3
+ - com.zaxxer -> HikariCP 5.1.0
+ - org.ow2.asm -> asm 9.6
+ - org.ow2.asm -> asm-commons 9.6
+ - org.ow2.asm -> asm-util 9.6
+ - org.ow2.asm -> asm-tree 9.6
+ - org.ow2.asm -> asm-analysis 9.6
- cglib -> cglib 3.3.0
- - com.google.code.gson -> gson 2.9.1
+ - com.google.code.gson -> gson 2.10.1
- com.jamonapi -> jamon 2.82
- com.ning -> async-http-client 1.9.40
- commons-beanutils 1.9.4
- - commons-codec 1.15
- - org.apache.commons -> commons-email 1.5
- - commons-fileupload 1.4
- - commons-io 2.11.0
+ - commons-codec 1.16.1
+ - org.apache.commons -> commons-email 1.6.0
+ - commons-fileupload 1.5
+ - commons-io 2.15.1
- com.google.code.maven-play-plugin.org.apache.commons -> commons-javaflow 1590792
- - commons-lang 2.6
- - commons-logging 1.2
- - org.dom4j -> dom4j 2.1.3
+ - org.apache.commons -> commons-lang3 3.14.0
+ - org.apache.commons -> commons-text 1.11.0
+ - commons-logging 1.3.0
+ - org.dom4j -> dom4j 2.1.4
- com.h2database -> h2 1.4.200
- javax.activation -> javax.activation-api 1.2.0
- com.sun.mail -> javax.mail 1.6.2
- - javax.inject 1.0
+ - jakarta.inject -> jakarta.inject-api 1.0
- javax.validation -> validation-api 1.1.0.Final
- - jaxen 1.2.0
- - joda-time 2.11.1
+ - javax.activation -> activation 1.1.1
+ - jaxen 2.0.0
+ - joda-time 2.12.7
- org.hamcrest -> hamcrest-all 1.3
- junit 4.13.2
- - jregex 1.2_01
- - log4j-api 2.18.0
- - log4j-core 2.18.0
+ - net.sourceforge.jregex -> jregex 1.2_01
+ - org.apache.logging.log4j -> log4j-api 2.23.0
+ - org.apache.logging.log4j -> log4j-core 2.23.0
- net.sf.ehcache -> ehcache 2.10.9.2
- net.sf.ezmorph -> ezmorph 1.0.6
- net.sf.jsr107cache -> jsr107cache 1.1
- - net.sf.oval -> oval 3.1.0
+ - net.sf.oval -> oval 3.2.1
- oauth.signpost -> signpost-core 1.2.1.2
- org.apache.geronimo.specs -> geronimo-servlet_2.5_spec 1.2
- - org.apache.ivy -> ivy 2.5.0
- - org.bouncycastle -> bcprov-jdk18on 1.71.1
- - org.bouncycastle -> bcpkix-jdk18on 1.71.1
- - org.bouncycastle -> bcutil-jdk18on 1.71.1
- - org.codehaus.groovy -> groovy 3.0.12
- - org.codehaus.groovy -> groovy-xml 3.0.12
- - org.eclipse.jdt -> org.eclipse.jdt.core 3.31.0
- - org.hibernate -> hibernate-core 5.6.5.Final.patched
- - net.bytebuddy -> byte-buddy 1.12.16
+ - org.apache.ivy -> ivy 2.5.2
+ - org.bouncycastle -> bcprov-jdk18on 1.77
+ - org.bouncycastle -> bcpkix-jdk18on 1.77
+ - org.bouncycastle -> bcutil-jdk18on 1.77
+ - org.codehaus.groovy -> groovy 3.0.20
+ - org.codehaus.groovy -> groovy-xml 3.0.20
+ - org.eclipse.jdt -> org.eclipse.jdt.core 3.33.0
+ - org.eclipse.jdt -> ecj 3.33.0
+ - org.hibernate -> hibernate-core 5.6.15.Final
+ - net.bytebuddy -> byte-buddy 1.14.12
- javax.persistence -> javax.persistence-api 2.2
- org.hibernate.common -> hibernate-commons-annotations 5.1.2.Final
- - org.hibernate -> hibernate-validator 5.4.1.Final
- - org.jboss -> jandex 2.4.3.Final
- - org.jboss.logging -> jboss-logging 3.5.0.Final
+ - org.hibernate -> hibernate-validator 5.4.3.Final
+ - io.smallrye -> jandex 3.1.6
+ - org.jboss.logging -> jboss-logging 3.5.3.Final
- org.jboss.spec.javax.transaction -> jboss-transaction-api_1.2_spec 1.1.1.Final
- javax.persistence -> javax.persistence-api 2.2
- javax.xml.bind -> jaxb-api 2.3.1
- - org.glassfish.jaxb -> jaxb-runtime 2.3.6
- - com.fasterxml -> classmate 1.5.1
- - org.hibernate -> hibernate-c3p0 5.6.11.Final
- - org.hibernate -> hibernate-ehcache 5.6.11.Final
+ - org.glassfish.jaxb -> jaxb-runtime 2.3.9
+ - com.fasterxml -> classmate 1.7.0
+ - org.hibernate -> hibernate-c3p0 5.6.15.Final
+ - org.hibernate -> hibernate-ehcache 5.6.15.Final
- com.mchange -> mchange-commons-java 0.2.20
- - org.javassist -> javassist 3.29.1-GA
+ - org.javassist -> javassist 3.30.2-GA
- io.netty -> netty 3.10.6.Final
- - org.postgresql -> postgresql 42.5.0
- - org.slf4j -> slf4j-api 1.7.36
- - org.apache.logging.log4j -> log4j-slf4j-impl 2.18.0
- - org.yaml -> snakeyaml 1.32
+ - org.postgresql -> postgresql 42.7.2
+ - org.slf4j -> slf4j-api 2.0.12
+ - org.apache.logging.log4j -> log4j-slf4j2-impl 2.23.0
+ - org.yaml -> snakeyaml 2.2
- net.spy -> spymemcached 2.12.3
- - com.thoughtworks.xstream -> xstream 1.4.19
+ - com.thoughtworks.xstream -> xstream 1.4.20
- xmlpull 1.1.3.4d_b4_min
- org.apache.logging.log4j -> log4j-web 2.18.0
diff --git a/framework/gradle/wrapper/gradle-wrapper.jar b/framework/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000..d64cd49177
Binary files /dev/null and b/framework/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/framework/gradle/wrapper/gradle-wrapper.properties b/framework/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000..1af9e0930b
--- /dev/null
+++ b/framework/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/framework/gradlew b/framework/gradlew
new file mode 100755
index 0000000000..1aa94a4269
--- /dev/null
+++ b/framework/gradlew
@@ -0,0 +1,249 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/framework/gradlew.bat b/framework/gradlew.bat
new file mode 100644
index 0000000000..6689b85bee
--- /dev/null
+++ b/framework/gradlew.bat
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/framework/lib/HikariCP-5.0.1.jar b/framework/lib/HikariCP-5.0.1.jar
deleted file mode 100644
index 9d7eafb698..0000000000
Binary files a/framework/lib/HikariCP-5.0.1.jar and /dev/null differ
diff --git a/framework/lib/HikariCP-5.1.0.jar b/framework/lib/HikariCP-5.1.0.jar
new file mode 100644
index 0000000000..0aa1c9fb12
Binary files /dev/null and b/framework/lib/HikariCP-5.1.0.jar differ
diff --git a/framework/lib/asm-9.3.jar b/framework/lib/asm-9.3.jar
deleted file mode 100644
index bd8b948601..0000000000
Binary files a/framework/lib/asm-9.3.jar and /dev/null differ
diff --git a/framework/lib/asm-9.6.jar b/framework/lib/asm-9.6.jar
new file mode 100644
index 0000000000..cc1c2cd8e4
Binary files /dev/null and b/framework/lib/asm-9.6.jar differ
diff --git a/framework/lib/asm-analysis-9.3.jar b/framework/lib/asm-analysis-9.3.jar
deleted file mode 100644
index 6bbfb05cbc..0000000000
Binary files a/framework/lib/asm-analysis-9.3.jar and /dev/null differ
diff --git a/framework/lib/asm-analysis-9.6.jar b/framework/lib/asm-analysis-9.6.jar
new file mode 100644
index 0000000000..f4e8691b97
Binary files /dev/null and b/framework/lib/asm-analysis-9.6.jar differ
diff --git a/framework/lib/asm-commons-9.3.jar b/framework/lib/asm-commons-9.3.jar
deleted file mode 100644
index 3ce4b82cb6..0000000000
Binary files a/framework/lib/asm-commons-9.3.jar and /dev/null differ
diff --git a/framework/lib/asm-commons-9.6.jar b/framework/lib/asm-commons-9.6.jar
new file mode 100644
index 0000000000..75f3bad86a
Binary files /dev/null and b/framework/lib/asm-commons-9.6.jar differ
diff --git a/framework/lib/asm-tree-9.3.jar b/framework/lib/asm-tree-9.3.jar
deleted file mode 100644
index 55ef2a925e..0000000000
Binary files a/framework/lib/asm-tree-9.3.jar and /dev/null differ
diff --git a/framework/lib/asm-tree-9.6.jar b/framework/lib/asm-tree-9.6.jar
new file mode 100644
index 0000000000..9fe5275876
Binary files /dev/null and b/framework/lib/asm-tree-9.6.jar differ
diff --git a/framework/lib/asm-util-9.3.jar b/framework/lib/asm-util-9.3.jar
deleted file mode 100644
index 15e5efde41..0000000000
Binary files a/framework/lib/asm-util-9.3.jar and /dev/null differ
diff --git a/framework/lib/asm-util-9.6.jar b/framework/lib/asm-util-9.6.jar
new file mode 100644
index 0000000000..cc109b03d0
Binary files /dev/null and b/framework/lib/asm-util-9.6.jar differ
diff --git a/framework/lib/bcpkix-jdk18on-1.71.1.jar b/framework/lib/bcpkix-jdk18on-1.71.1.jar
deleted file mode 100644
index 40c84725f9..0000000000
Binary files a/framework/lib/bcpkix-jdk18on-1.71.1.jar and /dev/null differ
diff --git a/framework/lib/bcpkix-jdk18on-1.77.jar b/framework/lib/bcpkix-jdk18on-1.77.jar
new file mode 100644
index 0000000000..e8b6021a2a
Binary files /dev/null and b/framework/lib/bcpkix-jdk18on-1.77.jar differ
diff --git a/framework/lib/bcprov-jdk18on-1.71.1.jar b/framework/lib/bcprov-jdk18on-1.77.jar
similarity index 52%
rename from framework/lib/bcprov-jdk18on-1.71.1.jar
rename to framework/lib/bcprov-jdk18on-1.77.jar
index 2bec110f1d..651d2fba5e 100644
Binary files a/framework/lib/bcprov-jdk18on-1.71.1.jar and b/framework/lib/bcprov-jdk18on-1.77.jar differ
diff --git a/framework/lib/bcutil-jdk18on-1.71.1.jar b/framework/lib/bcutil-jdk18on-1.77.jar
similarity index 57%
rename from framework/lib/bcutil-jdk18on-1.71.1.jar
rename to framework/lib/bcutil-jdk18on-1.77.jar
index b20e960461..4c154e27d6 100644
Binary files a/framework/lib/bcutil-jdk18on-1.71.1.jar and b/framework/lib/bcutil-jdk18on-1.77.jar differ
diff --git a/framework/lib/byte-buddy-1.12.16.jar b/framework/lib/byte-buddy-1.12.16.jar
deleted file mode 100644
index 3f70b08f8a..0000000000
Binary files a/framework/lib/byte-buddy-1.12.16.jar and /dev/null differ
diff --git a/framework/lib/byte-buddy-1.14.12.jar b/framework/lib/byte-buddy-1.14.12.jar
new file mode 100644
index 0000000000..f9c0f47cd1
Binary files /dev/null and b/framework/lib/byte-buddy-1.14.12.jar differ
diff --git a/framework/lib/classmate-1.5.1.jar b/framework/lib/classmate-1.5.1.jar
deleted file mode 100644
index 819f5eaf09..0000000000
Binary files a/framework/lib/classmate-1.5.1.jar and /dev/null differ
diff --git a/framework/lib/classmate-1.7.0.jar b/framework/lib/classmate-1.7.0.jar
new file mode 100644
index 0000000000..984a779753
Binary files /dev/null and b/framework/lib/classmate-1.7.0.jar differ
diff --git a/framework/lib/commons-codec-1.15.jar b/framework/lib/commons-codec-1.15.jar
deleted file mode 100644
index f14985ac92..0000000000
Binary files a/framework/lib/commons-codec-1.15.jar and /dev/null differ
diff --git a/framework/lib/commons-codec-1.16.1.jar b/framework/lib/commons-codec-1.16.1.jar
new file mode 100644
index 0000000000..f896649735
Binary files /dev/null and b/framework/lib/commons-codec-1.16.1.jar differ
diff --git a/framework/lib/commons-collections-3.2.2.jar b/framework/lib/commons-collections-3.2.2.jar
deleted file mode 100644
index fa5df82a63..0000000000
Binary files a/framework/lib/commons-collections-3.2.2.jar and /dev/null differ
diff --git a/framework/lib/commons-email-1.5.jar b/framework/lib/commons-email-1.5.jar
deleted file mode 100644
index 291bd194f4..0000000000
Binary files a/framework/lib/commons-email-1.5.jar and /dev/null differ
diff --git a/framework/lib/commons-email-1.6.0.jar b/framework/lib/commons-email-1.6.0.jar
new file mode 100644
index 0000000000..c520d58430
Binary files /dev/null and b/framework/lib/commons-email-1.6.0.jar differ
diff --git a/framework/lib/commons-fileupload-1.4.jar b/framework/lib/commons-fileupload-1.4.jar
deleted file mode 100644
index e25a6bc951..0000000000
Binary files a/framework/lib/commons-fileupload-1.4.jar and /dev/null differ
diff --git a/framework/lib/commons-fileupload-1.5.jar b/framework/lib/commons-fileupload-1.5.jar
new file mode 100644
index 0000000000..5e608753c1
Binary files /dev/null and b/framework/lib/commons-fileupload-1.5.jar differ
diff --git a/framework/lib/commons-io-2.11.0.jar b/framework/lib/commons-io-2.11.0.jar
deleted file mode 100644
index be507d94fd..0000000000
Binary files a/framework/lib/commons-io-2.11.0.jar and /dev/null differ
diff --git a/framework/lib/commons-io-2.15.1.jar b/framework/lib/commons-io-2.15.1.jar
new file mode 100644
index 0000000000..d53be1f140
Binary files /dev/null and b/framework/lib/commons-io-2.15.1.jar differ
diff --git a/framework/lib/commons-lang-2.6.jar b/framework/lib/commons-lang-2.6.jar
deleted file mode 100644
index 98467d3a65..0000000000
Binary files a/framework/lib/commons-lang-2.6.jar and /dev/null differ
diff --git a/framework/lib/commons-lang3-3.14.0.jar b/framework/lib/commons-lang3-3.14.0.jar
new file mode 100644
index 0000000000..da9302ff29
Binary files /dev/null and b/framework/lib/commons-lang3-3.14.0.jar differ
diff --git a/framework/lib/commons-logging-1.2.jar b/framework/lib/commons-logging-1.2.jar
deleted file mode 100644
index 93a3b9f6db..0000000000
Binary files a/framework/lib/commons-logging-1.2.jar and /dev/null differ
diff --git a/framework/lib/commons-logging-1.3.0.jar b/framework/lib/commons-logging-1.3.0.jar
new file mode 100644
index 0000000000..127dd00d30
Binary files /dev/null and b/framework/lib/commons-logging-1.3.0.jar differ
diff --git a/framework/lib/commons-text-1.11.0.jar b/framework/lib/commons-text-1.11.0.jar
new file mode 100644
index 0000000000..78154978a0
Binary files /dev/null and b/framework/lib/commons-text-1.11.0.jar differ
diff --git a/framework/lib/dom4j-2.1.3.jar b/framework/lib/dom4j-2.1.3.jar
deleted file mode 100644
index 9a4f5d2731..0000000000
Binary files a/framework/lib/dom4j-2.1.3.jar and /dev/null differ
diff --git a/framework/lib/dom4j-2.1.4.jar b/framework/lib/dom4j-2.1.4.jar
new file mode 100644
index 0000000000..0769bed921
Binary files /dev/null and b/framework/lib/dom4j-2.1.4.jar differ
diff --git a/framework/lib/ecj-3.33.0.jar b/framework/lib/ecj-3.33.0.jar
new file mode 100644
index 0000000000..a8f827f350
Binary files /dev/null and b/framework/lib/ecj-3.33.0.jar differ
diff --git a/framework/lib/groovy-3.0.12.jar b/framework/lib/groovy-3.0.20.jar
similarity index 80%
rename from framework/lib/groovy-3.0.12.jar
rename to framework/lib/groovy-3.0.20.jar
index fc1b0378f1..d3b704edcf 100644
Binary files a/framework/lib/groovy-3.0.12.jar and b/framework/lib/groovy-3.0.20.jar differ
diff --git a/framework/lib/groovy-xml-3.0.12.jar b/framework/lib/groovy-xml-3.0.20.jar
similarity index 82%
rename from framework/lib/groovy-xml-3.0.12.jar
rename to framework/lib/groovy-xml-3.0.20.jar
index c49f8d8674..5e1e17728e 100644
Binary files a/framework/lib/groovy-xml-3.0.12.jar and b/framework/lib/groovy-xml-3.0.20.jar differ
diff --git a/framework/lib/gson-2.10.1.jar b/framework/lib/gson-2.10.1.jar
new file mode 100644
index 0000000000..a88c5bd9b5
Binary files /dev/null and b/framework/lib/gson-2.10.1.jar differ
diff --git a/framework/lib/gson-2.9.1.jar b/framework/lib/gson-2.9.1.jar
deleted file mode 100644
index 8a663ecceb..0000000000
Binary files a/framework/lib/gson-2.9.1.jar and /dev/null differ
diff --git a/framework/lib/hibernate-c3p0-5.6.11.Final.jar b/framework/lib/hibernate-c3p0-5.6.15.Final.jar
similarity index 72%
rename from framework/lib/hibernate-c3p0-5.6.11.Final.jar
rename to framework/lib/hibernate-c3p0-5.6.15.Final.jar
index 5f03d02273..21e5801556 100644
Binary files a/framework/lib/hibernate-c3p0-5.6.11.Final.jar and b/framework/lib/hibernate-c3p0-5.6.15.Final.jar differ
diff --git a/framework/lib/hibernate-ehcache-5.6.11.Final.jar b/framework/lib/hibernate-ehcache-5.6.15.Final.jar
similarity index 93%
rename from framework/lib/hibernate-ehcache-5.6.11.Final.jar
rename to framework/lib/hibernate-ehcache-5.6.15.Final.jar
index 4692e2080a..7e927e4911 100644
Binary files a/framework/lib/hibernate-ehcache-5.6.11.Final.jar and b/framework/lib/hibernate-ehcache-5.6.15.Final.jar differ
diff --git a/framework/lib/hibernate-validator-5.4.1.Final.jar b/framework/lib/hibernate-validator-5.4.3.Final.jar
similarity index 76%
rename from framework/lib/hibernate-validator-5.4.1.Final.jar
rename to framework/lib/hibernate-validator-5.4.3.Final.jar
index 1975846ff4..e9870ebf29 100644
Binary files a/framework/lib/hibernate-validator-5.4.1.Final.jar and b/framework/lib/hibernate-validator-5.4.3.Final.jar differ
diff --git a/framework/lib/ivy-2.5.0.jar b/framework/lib/ivy-2.5.0.jar
deleted file mode 100644
index eb7569f78b..0000000000
Binary files a/framework/lib/ivy-2.5.0.jar and /dev/null differ
diff --git a/framework/lib/ivy-2.5.2.jar b/framework/lib/ivy-2.5.2.jar
new file mode 100644
index 0000000000..7d2648a898
Binary files /dev/null and b/framework/lib/ivy-2.5.2.jar differ
diff --git a/framework/lib/jakarta.inject-api-1.0.jar b/framework/lib/jakarta.inject-api-1.0.jar
new file mode 100644
index 0000000000..77ca714ab1
Binary files /dev/null and b/framework/lib/jakarta.inject-api-1.0.jar differ
diff --git a/framework/lib/jandex-2.4.3.Final.jar b/framework/lib/jandex-2.4.3.Final.jar
deleted file mode 100644
index 7f8e2a05f3..0000000000
Binary files a/framework/lib/jandex-2.4.3.Final.jar and /dev/null differ
diff --git a/framework/lib/jandex-3.1.6.jar b/framework/lib/jandex-3.1.6.jar
new file mode 100644
index 0000000000..bd64a7239d
Binary files /dev/null and b/framework/lib/jandex-3.1.6.jar differ
diff --git a/framework/lib/javassist-3.29.1-GA.jar b/framework/lib/javassist-3.30.2-GA.jar
similarity index 81%
rename from framework/lib/javassist-3.29.1-GA.jar
rename to framework/lib/javassist-3.30.2-GA.jar
index aa7b5a98e2..30f90f0423 100644
Binary files a/framework/lib/javassist-3.29.1-GA.jar and b/framework/lib/javassist-3.30.2-GA.jar differ
diff --git a/framework/lib/javax.inject-1.0.jar b/framework/lib/javax.inject-1.0.jar
deleted file mode 100644
index 1ff61ceecf..0000000000
Binary files a/framework/lib/javax.inject-1.0.jar and /dev/null differ
diff --git a/framework/lib/jaxb-runtime-2.3.6.jar b/framework/lib/jaxb-runtime-2.3.9.jar
similarity index 70%
rename from framework/lib/jaxb-runtime-2.3.6.jar
rename to framework/lib/jaxb-runtime-2.3.9.jar
index dbc5e50d36..c64fe184fc 100644
Binary files a/framework/lib/jaxb-runtime-2.3.6.jar and b/framework/lib/jaxb-runtime-2.3.9.jar differ
diff --git a/framework/lib/jaxen-1.2.0.jar b/framework/lib/jaxen-1.2.0.jar
deleted file mode 100644
index c819d63b6a..0000000000
Binary files a/framework/lib/jaxen-1.2.0.jar and /dev/null differ
diff --git a/framework/lib/jaxen-2.0.0.jar b/framework/lib/jaxen-2.0.0.jar
new file mode 100644
index 0000000000..17030697ea
Binary files /dev/null and b/framework/lib/jaxen-2.0.0.jar differ
diff --git a/framework/lib/jboss-logging-3.5.0.Final.jar b/framework/lib/jboss-logging-3.5.0.Final.jar
deleted file mode 100644
index d39dfcfa58..0000000000
Binary files a/framework/lib/jboss-logging-3.5.0.Final.jar and /dev/null differ
diff --git a/framework/lib/jboss-logging-3.5.3.Final.jar b/framework/lib/jboss-logging-3.5.3.Final.jar
new file mode 100644
index 0000000000..a922e47523
Binary files /dev/null and b/framework/lib/jboss-logging-3.5.3.Final.jar differ
diff --git a/framework/lib/joda-time-2.11.1.jar b/framework/lib/joda-time-2.11.1.jar
deleted file mode 100644
index b1697b5510..0000000000
Binary files a/framework/lib/joda-time-2.11.1.jar and /dev/null differ
diff --git a/framework/lib/joda-time-2.12.7.jar b/framework/lib/joda-time-2.12.7.jar
new file mode 100644
index 0000000000..7994777eda
Binary files /dev/null and b/framework/lib/joda-time-2.12.7.jar differ
diff --git a/framework/lib/log4j-api-2.18.0.jar b/framework/lib/log4j-api-2.18.0.jar
deleted file mode 100644
index b4e933f7ec..0000000000
Binary files a/framework/lib/log4j-api-2.18.0.jar and /dev/null differ
diff --git a/framework/lib/log4j-api-2.23.0.jar b/framework/lib/log4j-api-2.23.0.jar
new file mode 100644
index 0000000000..dd00e8fb12
Binary files /dev/null and b/framework/lib/log4j-api-2.23.0.jar differ
diff --git a/framework/lib/log4j-core-2.18.0.jar b/framework/lib/log4j-core-2.18.0.jar
deleted file mode 100644
index d6486fdf3d..0000000000
Binary files a/framework/lib/log4j-core-2.18.0.jar and /dev/null differ
diff --git a/framework/lib/log4j-core-2.23.0.jar b/framework/lib/log4j-core-2.23.0.jar
new file mode 100644
index 0000000000..cba2887db6
Binary files /dev/null and b/framework/lib/log4j-core-2.23.0.jar differ
diff --git a/framework/lib/log4j-slf4j-impl-2.18.0.jar b/framework/lib/log4j-slf4j-impl-2.18.0.jar
deleted file mode 100644
index cc41910c32..0000000000
Binary files a/framework/lib/log4j-slf4j-impl-2.18.0.jar and /dev/null differ
diff --git a/framework/lib/log4j-slf4j2-impl-2.23.0.jar b/framework/lib/log4j-slf4j2-impl-2.23.0.jar
new file mode 100644
index 0000000000..cae4d1e121
Binary files /dev/null and b/framework/lib/log4j-slf4j2-impl-2.23.0.jar differ
diff --git a/framework/lib/org.eclipse.jdt.core-3.31.0.jar b/framework/lib/org.eclipse.jdt.core-3.31.0.jar
deleted file mode 100644
index 3a49c313b8..0000000000
Binary files a/framework/lib/org.eclipse.jdt.core-3.31.0.jar and /dev/null differ
diff --git a/framework/lib/org.eclipse.jdt.core-3.33.0.jar b/framework/lib/org.eclipse.jdt.core-3.33.0.jar
new file mode 100644
index 0000000000..ed62f23f8c
Binary files /dev/null and b/framework/lib/org.eclipse.jdt.core-3.33.0.jar differ
diff --git a/framework/lib/oval-3.1.0.jar b/framework/lib/oval-3.1.0.jar
deleted file mode 100644
index 9cb2a94786..0000000000
Binary files a/framework/lib/oval-3.1.0.jar and /dev/null differ
diff --git a/framework/lib/oval-3.2.1.jar b/framework/lib/oval-3.2.1.jar
new file mode 100644
index 0000000000..d50a4b7267
Binary files /dev/null and b/framework/lib/oval-3.2.1.jar differ
diff --git a/framework/lib/postgresql-42.5.0.jar b/framework/lib/postgresql-42.5.0.jar
deleted file mode 100644
index 49b9556223..0000000000
Binary files a/framework/lib/postgresql-42.5.0.jar and /dev/null differ
diff --git a/framework/lib/postgresql-42.7.2.jar b/framework/lib/postgresql-42.7.2.jar
new file mode 100644
index 0000000000..729776b004
Binary files /dev/null and b/framework/lib/postgresql-42.7.2.jar differ
diff --git a/framework/lib/slf4j-api-1.7.36.jar b/framework/lib/slf4j-api-1.7.36.jar
deleted file mode 100644
index 7d3ce68d25..0000000000
Binary files a/framework/lib/slf4j-api-1.7.36.jar and /dev/null differ
diff --git a/framework/lib/slf4j-api-2.0.12.jar b/framework/lib/slf4j-api-2.0.12.jar
new file mode 100644
index 0000000000..bfa1de399d
Binary files /dev/null and b/framework/lib/slf4j-api-2.0.12.jar differ
diff --git a/framework/lib/snakeyaml-1.32.jar b/framework/lib/snakeyaml-1.32.jar
deleted file mode 100644
index cd73a293a6..0000000000
Binary files a/framework/lib/snakeyaml-1.32.jar and /dev/null differ
diff --git a/framework/lib/snakeyaml-2.2.jar b/framework/lib/snakeyaml-2.2.jar
new file mode 100644
index 0000000000..275dd5700a
Binary files /dev/null and b/framework/lib/snakeyaml-2.2.jar differ
diff --git a/framework/lib/xstream-1.4.19.jar b/framework/lib/xstream-1.4.20.jar
similarity index 82%
rename from framework/lib/xstream-1.4.19.jar
rename to framework/lib/xstream-1.4.20.jar
index 95d1c6a644..a8f7cd8028 100644
Binary files a/framework/lib/xstream-1.4.19.jar and b/framework/lib/xstream-1.4.20.jar differ
diff --git a/framework/pym/play/cmdloader.py b/framework/pym/play/cmdloader.py
index 459f6850fc..862bd1e5f6 100644
--- a/framework/pym/play/cmdloader.py
+++ b/framework/pym/play/cmdloader.py
@@ -1,5 +1,6 @@
from __future__ import print_function
-import imp
+import importlib.util
+import importlib.machinery
import os
import warnings
import traceback
@@ -22,8 +23,9 @@ def load_core(self):
for filename in os.listdir(self.path):
if filename != "__init__.py" and filename.endswith(".py"):
try:
- name = filename.replace(".py", "")
- mod = load_python_module(name, self.path)
+ module_name = filename.replace(".py", "")
+ module_path = os.path.join(self.path, filename)
+ mod = load_python_module(module_name, module_path)
self._load_cmd_from(mod)
except Exception as e:
print (e)
@@ -35,7 +37,8 @@ def load_play_module(self, modname):
if os.path.exists(commands):
try:
leafname = os.path.basename(modname).split('.')[0]
- mod = imp.load_source(leafname, os.path.join(modname, "commands.py"))
+ # print(f"Loading commands for module \"{modname}\"")
+ mod = load_source(leafname, os.path.join(modname, "commands.py"))
self._load_cmd_from(mod)
except Exception as e:
print('~')
@@ -55,12 +58,26 @@ def _load_cmd_from(self, mod):
if 'MODULE' in dir(mod):
self.modules[mod.MODULE] = mod
+
def load_python_module(name, location):
- mod_desc = imp.find_module(name, [location])
- mod_file = mod_desc[0]
- try:
- return imp.load_module(name, mod_desc[0], mod_desc[1], mod_desc[2])
- finally:
- if mod_file != None and not mod_file.closed:
- mod_file.close()
+# print(f"Loading module \"{name}\" at location \"{location}\"")
+ spec = importlib.util.spec_from_file_location(name, location)
+ if spec is None:
+ raise ImportError(f"Could not find module {name} at {location}")
+
+ mod = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(mod)
+
+ return mod
+
+# Obtained from https://docs.python.org/dev/whatsnew/3.12.html#imp
+def load_source(modname, filename):
+ loader = importlib.machinery.SourceFileLoader(modname, filename)
+ spec = importlib.util.spec_from_file_location(modname, filename, loader=loader)
+ module = importlib.util.module_from_spec(spec)
+ # The module is always executed and not cached in sys.modules.
+ # Uncomment the following line to cache the module.
+ # sys.modules[module.__name__] = module
+ loader.exec_module(module)
+ return module
diff --git a/framework/pym/play/commands/autotest.py b/framework/pym/play/commands/autotest.py
index 09c115e1cc..2fc95a7486 100644
--- a/framework/pym/play/commands/autotest.py
+++ b/framework/pym/play/commands/autotest.py
@@ -24,9 +24,9 @@ def execute(**kargs):
args = kargs.get("args")
env = kargs.get("env")
cmdloader = kargs.get("cmdloader")
-
+
autotest(app, args)
-
+
def autotest(app, args):
app.check()
print("~ Running in test mode")
@@ -58,34 +58,34 @@ def autotest(app, args):
if protocol == 'https' and not keystore:
print("https without keystore configured. play auto-test will fail. Exiting now.")
sys.exit(-1)
-
+
# read parameters
add_options = []
if args.count('--unit'):
args.remove('--unit')
add_options.append('-DrunUnitTests')
-
+
if args.count('--functional'):
args.remove('--functional')
add_options.append('-DrunFunctionalTests')
-
+
if args.count('--selenium'):
args.remove('--selenium')
add_options.append('-DrunSeleniumTests')
-
+
# Handle timeout parameter
weblcient_timeout = -1
if app.readConf('webclient.timeout'):
weblcient_timeout = app.readConf('webclient.timeout')
-
+
for arg in args:
if arg.startswith('--timeout='):
args.remove(arg)
weblcient_timeout = arg[10:]
-
- if weblcient_timeout >= 0:
+
+ if weblcient_timeout >= 0:
add_options.append('-DwebclientTimeout=' + weblcient_timeout)
-
+
# Run app
test_result = os.path.join(app.path, 'test-result')
if os.path.exists(test_result):
@@ -141,7 +141,7 @@ def autotest(app, args):
print("~")
time.sleep(1)
-
+
# Kill if exists
try:
proxy_handler = urllib.request.ProxyHandler({})
@@ -149,12 +149,29 @@ def autotest(app, args):
opener.open('%s://localhost:%s/@kill' % (protocol, http_port))
except Exception as e:
pass
-
+
+ testCompleted = False
if os.path.exists(os.path.join(app.path, 'test-result/result.passed')):
+ testCompleted = True
print("~ All tests passed")
print("~")
testspassed = True
if os.path.exists(os.path.join(app.path, 'test-result/result.failed')):
+ testCompleted = True
+ # print all the failed tests from test_result
+ #
+ failed_out = [f for f in os.listdir(test_result) if os.path.isfile(os.path.join(test_result, f)) and f.endswith('.failed.html')]
+ for f in failed_out:
+ print("~ Failed test: %s" % f)
+ print("~ Contetnt:")
+ with open(os.path.join(test_result, f), 'r') as failed_file:
+ print(failed_file.read())
+
print("~ Some tests have failed. See file://%s for results" % test_result)
print("~")
sys.exit(1)
+
+ if not testCompleted:
+ print("~ Tests did not successfully complete.")
+ print("~")
+ sys.exit(-1)
diff --git a/framework/pym/play/commands/modulesrepo.py b/framework/pym/play/commands/modulesrepo.py
index d76681cc42..8e5467dc35 100644
--- a/framework/pym/play/commands/modulesrepo.py
+++ b/framework/pym/play/commands/modulesrepo.py
@@ -12,7 +12,7 @@
import urllib.request, urllib.error, urllib.parse
import shutil
import string
-import imp
+import importlib.util
import time
import urllib.request, urllib.parse, urllib.error
import yaml
@@ -40,8 +40,16 @@
def load_module(name):
base = os.path.normpath(os.path.dirname(os.path.realpath(sys.argv[0])))
- mod_desc = imp.find_module(name, [os.path.join(base, 'framework/pym')])
- return imp.load_module(name, mod_desc[0], mod_desc[1], mod_desc[2])
+ module_path = os.path.join(base, 'framework/pym', name, '__init__.py')
+
+ spec = importlib.util.spec_from_file_location(name, module_path)
+ if spec is None:
+ raise ImportError(f"Could not find module \"{name}\" at \"{module_path}\"")
+
+ mod = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(mod)
+
+ return mod
json = load_module('simplejson')
@@ -93,7 +101,7 @@ def __init__(self, width=55):
def retrieve(self, url, destination, callback=None):
self.size = 0
- time.clock()
+ time.perf_counter()
try:
headers={'User-Agent':DEFAULT_USER_AGENT,
'Accept': 'application/json'
@@ -117,7 +125,7 @@ def retrieve(self, url, destination, callback=None):
return self.size
def chunk_read(self, response, destination, chunk_size=8192, report_hook=None):
- total_size = response.info().getheader('Content-Length').strip()
+ total_size = response.headers['Content-Length'].strip()
total_size = int(total_size)
bytes_so_far = 0
file = open(destination,"wb")
@@ -154,7 +162,7 @@ def progress(self, bytes_so_far, blocksize, filesize):
done = 100
bar = self.bar(bytes_so_far, filesize, done)
if not self.cycles % 3 and bits != filesize:
- now = time.clock()
+ now = time.perf_counter()
elapsed = now-self.before
if elapsed:
speed = self.kibi(blocksize * 3 // elapsed)
diff --git a/framework/src/play/classloading/ApplicationClassloader.java b/framework/src/play/classloading/ApplicationClassloader.java
index 035d645a2a..b8a83df17f 100644
--- a/framework/src/play/classloading/ApplicationClassloader.java
+++ b/framework/src/play/classloading/ApplicationClassloader.java
@@ -29,7 +29,8 @@
import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
+
import play.Logger;
import play.Play;
import play.cache.Cache;
@@ -102,7 +103,7 @@ protected Class> loadClass(String name, boolean resolve) throws ClassNotFoundE
public Class> loadApplicationClass(String name) {
if (ApplicationClass.isClass(name)) {
- Class maybeAlreadyLoaded = findLoadedClass(name);
+ Class> maybeAlreadyLoaded = findLoadedClass(name);
if (maybeAlreadyLoaded != null) {
return maybeAlreadyLoaded;
}
@@ -405,9 +406,9 @@ private int computePathHash() {
*
* @return The list of well defined Class
*/
- public List getAllClasses() {
+ public List> getAllClasses() {
if (allClasses == null) {
- List result = new ArrayList<>();
+ List> result = new ArrayList<>();
if (Play.usePrecompiled) {
@@ -416,7 +417,7 @@ public List getAllClasses() {
Play.classes.clear();
for (ApplicationClass applicationClass : applicationClasses) {
Play.classes.add(applicationClass);
- Class clazz = loadApplicationClass(applicationClass.name);
+ Class> clazz = loadApplicationClass(applicationClass.name);
applicationClass.javaClass = clazz;
applicationClass.compiled = true;
result.add(clazz);
@@ -443,7 +444,7 @@ public List getAllClasses() {
}
for (ApplicationClass applicationClass : Play.classes.all()) {
- Class clazz = loadApplicationClass(applicationClass.name);
+ Class> clazz = loadApplicationClass(applicationClass.name);
if (clazz != null) {
result.add(clazz);
}
@@ -466,7 +467,7 @@ public List getAllClasses() {
return allClasses;
}
- private List allClasses;
+ private List> allClasses;
private Map allClassesByNormalizedName;
/**
@@ -501,7 +502,7 @@ public List getAssignableClasses(Class clazz) {
* The class name.
* @return a class
*/
- public Class getClassIgnoreCase(String name) {
+ public Class> getClassIgnoreCase(String name) {
getAllClasses();
String nameLowerCased = name.toLowerCase();
ApplicationClass c = allClassesByNormalizedName.get(nameLowerCased);
@@ -521,17 +522,17 @@ public Class getClassIgnoreCase(String name) {
* The annotation class.
* @return A list of class
*/
- public List getAnnotatedClasses(Class extends Annotation> clazz) {
+ public List> getAnnotatedClasses(Class extends Annotation> clazz) {
getAllClasses();
- List results = new ArrayList<>();
+ List> results = new ArrayList<>();
for (ApplicationClass c : Play.classes.getAnnotatedClasses(clazz)) {
results.add(c.javaClass);
}
return results;
}
- public List getAnnotatedClasses(Class[] clazz) {
- List results = new ArrayList<>();
+ public List> getAnnotatedClasses(Class extends Annotation>[] clazz) {
+ List> results = new ArrayList<>();
for (Class extends Annotation> cl : clazz) {
results.addAll(getAnnotatedClasses(cl));
}
diff --git a/framework/src/play/classloading/ApplicationCompiler.java b/framework/src/play/classloading/ApplicationCompiler.java
index f0ce32ef34..c025a75824 100644
--- a/framework/src/play/classloading/ApplicationCompiler.java
+++ b/framework/src/play/classloading/ApplicationCompiler.java
@@ -43,7 +43,8 @@ public class ApplicationCompiler {
"15", CompilerOptions.VERSION_15,
"16", CompilerOptions.VERSION_16,
"17", CompilerOptions.VERSION_17,
- "18", CompilerOptions.VERSION_18
+ "18", CompilerOptions.VERSION_18,
+ "19", CompilerOptions.VERSION_19
);
final Map packagesCache = new HashMap<>();
diff --git a/framework/src/play/data/binding/AnnotationHelper.java b/framework/src/play/data/binding/AnnotationHelper.java
index 16ae1bb031..ec1f904124 100644
--- a/framework/src/play/data/binding/AnnotationHelper.java
+++ b/framework/src/play/data/binding/AnnotationHelper.java
@@ -6,7 +6,7 @@
import java.util.Date;
import java.util.Locale;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import play.data.binding.types.DateBinder;
import play.i18n.Lang;
diff --git a/framework/src/play/data/binding/Binder.java b/framework/src/play/data/binding/Binder.java
index e2a02b6143..3a8b775a19 100644
--- a/framework/src/play/data/binding/Binder.java
+++ b/framework/src/play/data/binding/Binder.java
@@ -1,6 +1,6 @@
package play.data.binding;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import play.Logger;
import play.Play;
@@ -435,11 +435,11 @@ private static Object bindEnum(Class> clazz, ParamNode paramNode) {
}
private static Object bindMap(Type type, ParamNode paramNode, BindingAnnotations bindingAnnotations) {
- Class keyClass = String.class;
- Class valueClass = String.class;
+ Class> keyClass = String.class;
+ Class> valueClass = String.class;
if (type instanceof ParameterizedType) {
- keyClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[0];
- valueClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[1];
+ keyClass = (Class>) ((ParameterizedType) type).getActualTypeArguments()[0];
+ valueClass = (Class>) ((ParameterizedType) type).getActualTypeArguments()[1];
}
Map