Add compatibility with GraalVM 22.1 (#1215)
* do not init java net http classes at build time
This commit is contained in:
parent
6d35314096
commit
6305f7450d
3 changed files with 119 additions and 104 deletions
|
|
@ -54,6 +54,7 @@ args=("-jar" "$BABASHKA_JAR"
|
||||||
"--verbose"
|
"--verbose"
|
||||||
"--no-fallback"
|
"--no-fallback"
|
||||||
"--native-image-info"
|
"--native-image-info"
|
||||||
|
# --trace-class-initialization=jdk.internal.net.http.common.DebugLogger,jdk.internal.net.http.websocket.WebSocketImpl,jdk.internal.net.http.common.Utils
|
||||||
"$BABASHKA_XMX")
|
"$BABASHKA_XMX")
|
||||||
|
|
||||||
BABASHKA_STATIC=${BABASHKA_STATIC:-}
|
BABASHKA_STATIC=${BABASHKA_STATIC:-}
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@
|
||||||
java.util.Iterator
|
java.util.Iterator
|
||||||
{:methods [{:name "hasNext"}
|
{:methods [{:name "hasNext"}
|
||||||
{:name "next"}]}
|
{:name "next"}]}
|
||||||
})
|
})
|
||||||
|
|
||||||
(def custom-map
|
(def custom-map
|
||||||
(cond->
|
(cond->
|
||||||
|
|
@ -126,6 +126,52 @@
|
||||||
{:methods [{:name "getBundle"
|
{:methods [{:name "getBundle"
|
||||||
:parameterTypes ["java.lang.String","java.util.Locale","java.lang.ClassLoader"]}]})))
|
:parameterTypes ["java.lang.String","java.util.Locale","java.lang.ClassLoader"]}]})))
|
||||||
|
|
||||||
|
(def java-net-http-classes
|
||||||
|
"These classes must be initialized at run time since GraalVM 22.1"
|
||||||
|
'[java.net.Authenticator
|
||||||
|
java.net.CookieHandler
|
||||||
|
java.net.CookieManager
|
||||||
|
java.net.CookieStore
|
||||||
|
java.net.CookiePolicy
|
||||||
|
java.net.HttpCookie
|
||||||
|
java.net.PasswordAuthentication
|
||||||
|
java.net.ProxySelector
|
||||||
|
java.net.http.HttpClient
|
||||||
|
java.net.http.HttpClient$Builder
|
||||||
|
java.net.http.HttpClient$Redirect
|
||||||
|
java.net.http.HttpClient$Version
|
||||||
|
java.net.http.HttpHeaders
|
||||||
|
java.net.http.HttpRequest
|
||||||
|
java.net.http.HttpRequest$BodyPublisher
|
||||||
|
java.net.http.HttpRequest$BodyPublishers
|
||||||
|
java.net.http.HttpRequest$Builder
|
||||||
|
java.net.http.HttpResponse
|
||||||
|
java.net.http.HttpResponse$BodyHandler
|
||||||
|
java.net.http.HttpResponse$BodyHandlers
|
||||||
|
java.net.http.HttpTimeoutException
|
||||||
|
java.net.http.WebSocket
|
||||||
|
java.net.http.WebSocket$Builder
|
||||||
|
java.net.http.WebSocket$Listener
|
||||||
|
java.security.cert.X509Certificate
|
||||||
|
javax.crypto.Mac
|
||||||
|
javax.crypto.spec.SecretKeySpec
|
||||||
|
javax.net.ssl.HostnameVerifier ;; clj-http-lite
|
||||||
|
javax.net.ssl.HttpsURLConnection ;; clj-http-lite
|
||||||
|
javax.net.ssl.KeyManagerFactory
|
||||||
|
javax.net.ssl.SSLContext
|
||||||
|
javax.net.ssl.SSLParameters
|
||||||
|
javax.net.ssl.SSLSession ;; clj-http-lite
|
||||||
|
javax.net.ssl.TrustManager
|
||||||
|
javax.net.ssl.TrustManagerFactory
|
||||||
|
javax.net.ssl.X509TrustManager
|
||||||
|
jdk.internal.net.http.HttpClientBuilderImpl
|
||||||
|
jdk.internal.net.http.HttpClientFacade
|
||||||
|
jdk.internal.net.http.HttpRequestBuilderImpl
|
||||||
|
jdk.internal.net.http.HttpResponseImpl
|
||||||
|
jdk.internal.net.http.common.MinimalFuture
|
||||||
|
jdk.internal.net.http.websocket.BuilderImpl
|
||||||
|
jdk.internal.net.http.websocket.WebSocketImpl])
|
||||||
|
|
||||||
(def classes
|
(def classes
|
||||||
`{:all [clojure.lang.ArityException
|
`{:all [clojure.lang.ArityException
|
||||||
clojure.lang.BigInt
|
clojure.lang.BigInt
|
||||||
|
|
@ -225,51 +271,6 @@
|
||||||
;; java.net.URL, see below
|
;; java.net.URL, see below
|
||||||
java.net.URLEncoder
|
java.net.URLEncoder
|
||||||
java.net.URLDecoder
|
java.net.URLDecoder
|
||||||
;; java.net.http
|
|
||||||
~@(when features/java-net-http?
|
|
||||||
'[java.net.Authenticator
|
|
||||||
java.net.CookieHandler
|
|
||||||
java.net.CookieManager
|
|
||||||
java.net.CookieStore
|
|
||||||
java.net.CookiePolicy
|
|
||||||
java.net.HttpCookie
|
|
||||||
java.net.PasswordAuthentication
|
|
||||||
java.net.ProxySelector
|
|
||||||
java.net.http.HttpClient
|
|
||||||
java.net.http.HttpClient$Builder
|
|
||||||
java.net.http.HttpClient$Redirect
|
|
||||||
java.net.http.HttpClient$Version
|
|
||||||
java.net.http.HttpHeaders
|
|
||||||
java.net.http.HttpRequest
|
|
||||||
java.net.http.HttpRequest$BodyPublisher
|
|
||||||
java.net.http.HttpRequest$BodyPublishers
|
|
||||||
java.net.http.HttpRequest$Builder
|
|
||||||
java.net.http.HttpResponse
|
|
||||||
java.net.http.HttpResponse$BodyHandler
|
|
||||||
java.net.http.HttpResponse$BodyHandlers
|
|
||||||
java.net.http.HttpTimeoutException
|
|
||||||
java.net.http.WebSocket
|
|
||||||
java.net.http.WebSocket$Builder
|
|
||||||
java.net.http.WebSocket$Listener
|
|
||||||
java.security.cert.X509Certificate
|
|
||||||
javax.crypto.Mac
|
|
||||||
javax.crypto.spec.SecretKeySpec
|
|
||||||
javax.net.ssl.HostnameVerifier ;; clj-http-lite
|
|
||||||
javax.net.ssl.HttpsURLConnection ;; clj-http-lite
|
|
||||||
javax.net.ssl.KeyManagerFactory
|
|
||||||
javax.net.ssl.SSLContext
|
|
||||||
javax.net.ssl.SSLParameters
|
|
||||||
javax.net.ssl.SSLSession ;; clj-http-lite
|
|
||||||
javax.net.ssl.TrustManager
|
|
||||||
javax.net.ssl.TrustManagerFactory
|
|
||||||
javax.net.ssl.X509TrustManager
|
|
||||||
jdk.internal.net.http.HttpClientBuilderImpl
|
|
||||||
jdk.internal.net.http.HttpClientFacade
|
|
||||||
jdk.internal.net.http.HttpRequestBuilderImpl
|
|
||||||
jdk.internal.net.http.HttpResponseImpl
|
|
||||||
jdk.internal.net.http.common.MinimalFuture
|
|
||||||
jdk.internal.net.http.websocket.BuilderImpl
|
|
||||||
jdk.internal.net.http.websocket.WebSocketImpl])
|
|
||||||
~@(when features/java-nio?
|
~@(when features/java-nio?
|
||||||
'[java.nio.ByteBuffer
|
'[java.nio.ByteBuffer
|
||||||
java.nio.ByteOrder
|
java.nio.ByteOrder
|
||||||
|
|
@ -499,8 +500,8 @@
|
||||||
m (apply hash-map
|
m (apply hash-map
|
||||||
(for [c classes
|
(for [c classes
|
||||||
c [(list 'quote c) c]]
|
c [(list 'quote c) c]]
|
||||||
c))]
|
c))
|
||||||
(assoc m :public-class
|
m (assoc m :public-class
|
||||||
(fn [v]
|
(fn [v]
|
||||||
(cond (instance? java.lang.Process v)
|
(cond (instance? java.lang.Process v)
|
||||||
java.lang.Process
|
java.lang.Process
|
||||||
|
|
@ -553,9 +554,20 @@
|
||||||
(instance? java.nio.file.attribute.BasicFileAttributes v)
|
(instance? java.nio.file.attribute.BasicFileAttributes v)
|
||||||
java.nio.file.attribute.BasicFileAttributes
|
java.nio.file.attribute.BasicFileAttributes
|
||||||
;; keep commas for merge friendliness
|
;; keep commas for merge friendliness
|
||||||
,,,)))))
|
,,,)))]
|
||||||
|
m))
|
||||||
|
|
||||||
(def class-map (gen-class-map))
|
|
||||||
|
(def class-map*
|
||||||
|
"This contains mapping of symbol to class of all classes that are allowed to be initialized at build time."
|
||||||
|
(gen-class-map))
|
||||||
|
|
||||||
|
(def class-map
|
||||||
|
"A delay to delay initialization of java-net-http classes to run time, since GraalVM 22.1"
|
||||||
|
(delay (persistent! (reduce (fn [acc c]
|
||||||
|
(assoc! acc c (Class/forName (str c))))
|
||||||
|
(transient class-map*) (when features/java-net-http?
|
||||||
|
java-net-http-classes)))))
|
||||||
|
|
||||||
(def imports
|
(def imports
|
||||||
'{Appendable java.lang.Appendable
|
'{Appendable java.lang.Appendable
|
||||||
|
|
@ -602,7 +614,9 @@
|
||||||
})
|
})
|
||||||
|
|
||||||
(defn reflection-file-entries []
|
(defn reflection-file-entries []
|
||||||
(let [entries (vec (for [c (sort (:all classes))
|
(let [entries (vec (for [c (sort (concat (:all classes)
|
||||||
|
(when features/java-net-http?
|
||||||
|
java-net-http-classes)))
|
||||||
:let [class-name (str c)]]
|
:let [class-name (str c)]]
|
||||||
{:name class-name
|
{:name class-name
|
||||||
:allPublicMethods true
|
:allPublicMethods true
|
||||||
|
|
|
||||||
|
|
@ -777,7 +777,7 @@ Use bb run --help to show this help output.
|
||||||
'load-file (sci-namespaces/core-var 'load-file load-file*))))
|
'load-file (sci-namespaces/core-var 'load-file load-file*))))
|
||||||
:env env
|
:env env
|
||||||
:features #{:bb :clj}
|
:features #{:bb :clj}
|
||||||
:classes classes/class-map
|
:classes @classes/class-map
|
||||||
:imports classes/imports
|
:imports classes/imports
|
||||||
:load-fn load-fn
|
:load-fn load-fn
|
||||||
:uberscript uberscript
|
:uberscript uberscript
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue