does anyone know what this error could be?
Fatal error: com.oracle.graal.pointsto.util.AnalysisError$ParsingError: Error encountered while parsing org.apache.poi.poifs.crypt.agile.AgileEncryptor.confirmPassword(java.lang.String)
Parsing context:
at org.apache.poi.poifs.crypt.agile.AgileEncryptor.confirmPassword(AgileEncryptor.java:84)
https://github.com/moclojer/moclojer/actions/runs/6518574989/job/17704234885?pr=153#step:6:147This will build but won't work. Have you tried my previous suggestion?
I understand why, but I can't solve the problem
I've set the parameters in native-image:
• --enable-all-security-services which will be depreciated
• "--initialize-at-run-time=java.security.SecureRandom"
https://github.com/moclojer/moclojer/actions/runs/6524999120/job/17717217017?pr=153#step:7:179 full backtrace
Error: Classes that should be initialized at run time got initialized during image building:
java.security.SecureRandom the class was requested to be initialized at run time (from command line with 'java.security.SecureRandom'). com.sun.jndi.dns.DnsClient caused initialization of this class with the following trace:
at java.security.SecureRandom.<clinit>(SecureRandom.java:158)
at sun.security.jca.JCAUtil$CachedSecureRandomHolder.<clinit>(JCAUtil.java:65)
at sun.security.jca.JCAUtil.getSecureRandom(JCAUtil.java:77)
at com.sun.jndi.dns.DnsClient.<clinit>(DnsClient.java:86)
> sorry for being a noob on the subject, but I'm not finding any content on Google that can help me You should still not use —initialize-at-runtime without arguments. This is deprecated. Look at the library I linked to earlier and use that one
I tried to use it, but I had to release library by library manually - it wasn't automatically reading everything I used in the project > I'll try again
so, we added this,
--allow-incomplete-classpath
--features=clj_easy.graal_build_time.InitClojureClasses
--enable-all-security-services
--initialize-at-run-time=java.security.SecureRandom
--initialize-at-run-time=org.apache.poi.util.RandomSingleton
--initialize-at-run-time=com.fasterxml.jackson.core.io.SerializedString
--initialize-at-run-time=sun.security.ssl.SSLContextImpl
--trace-object-instantiation=org.yaml.snakeyaml.DumperOptions$ScalarStyle
--trace-object-instantiation=org.yaml.snakeyaml.DumperOptions$FlowStyle
--initialize-at-build-time=org.yaml.snakeyaml.DumperOptions$FlowStyle
--initialize-at-build-time=org.yaml.snakeyaml.DumperOptions$ScalarStyle
But we had to add initialize-at-run-time= with args for some method/functions and the stacktrace keep asking more.. do you have any idea what we are doing wrong?@matheusfrancisco001 It's very likely that a top level expression in your clojure code initializes an object that triggers the initialization of the SecureRandom object
use delay to work around that
you can find where this happens by just following native-image's hints
Warning: Using a deprecated option --delay-class-initialization-to-runtime from command line. Use --initialize-at-run-time.
You need to follow back the chain of initialization using these warnings:
com.sun.jndi.dns.DnsClient caused initialization of this class with the following trace
Then add --trace-object-instantiation=com.sun.jndi.dns.DnsClient
until you find another warning like that and then repeatOh my good! https://github.com/moclojer/moclojer/actions/runs/6526012390/job/17719305828?pr=153#step:7:192
that's not necessarily all bad, but you have to figure out what causes the init of com.sun.jndi.dns.DnsClient
So add --trace-object-instantiation=com.sun.jndi.dns.DnsClient and --trace-class-instantiation=com.sun.jndi.dns.DnsClient
I managed to get the build to "pass", but I'm doing something wrong - I don't think this is the normal process
having to put each library in the runtime init? native-image is asking for it
--initialize-at-run-time=moclojer.core
--initialize-at-run-time=moclojer.config__init
--initialize-at-run-time=cognitect.transit__init
--initialize-at-run-time=clojure.core.async.impl.concurrent__init
--initialize-at-run-time=clojure.core.async.impl.buffers__init
--initialize-at-run-time=babashka.cli__init
--initialize-at-run-time=io.pedestal.http.body_params__init
--initialize-at-run-time=moclojer.core__init
--initialize-at-run-time=clojure.core.async.impl.exec.threadpool__init
--initialize-at-run-time=clojure.core.async.impl.dispatch__init
--initialize-at-run-time=clojure.core.async.impl.concurrent__init
--initialize-at-run-time=moclojer.server__init
--initialize-at-run-time=clojure.core.async.impl.channels__init
--initialize-at-run-time=moclojer.router__init
--initialize-at-run-time=clojure.core.async__init
--initialize-at-run-time=clojure.core.async.impl.timers__init
--initialize-at-run-time=io.pedestal.http__init
--initialize-at-run-time=clojure.core.async.impl.ioc_macros__init
--initialize-at-run-time=moclojer.specs.moclojer__init
--initialize-at-run-time=io.pedestal.http.cors__init
--initialize-at-run-time=io.pedestal.http.impl.servlet_interceptor__init
--initialize-at-run-time=io.pedestal.http.jetty.container__init
--initialize-at-run-time=io.pedestal.http.jetty__init
--initialize-at-run-time=moclojer.watcher__init
--initialize-at-run-time=io.pedestal.http.route__init
--initialize-at-run-time=io.pedestal.interceptor.chain__init
--initialize-at-run-time=clojure.reflect.java__init
--initialize-at-run-time=clojure.datafy__init
--initialize-at-run-time=clojure.data.json__init
--initialize-at-run-time=clojure.core.cache__init
--initialize-at-run-time=clojure.tools.analyzer.jvm.utils__init
--initialize-at-run-time=clojure.reflect__init
--initialize-at-run-time=clojure.core.memoize__init
--initialize-at-run-time=clojure.tools.analyzer.jvm__init
--initialize-at-run-time=clojure.tools.analyzer.passes.jvm.analyze_host_expr__init
--initialize-at-run-time=clojure.tools.analyzer.passes.jvm.annotate_host_info__init
--initialize-at-run-time=clojure.tools.analyzer.passes.jvm.annotate_tag__init
--initialize-at-run-time=clojure.tools.analyzer.passes.jvm.box__init
--initialize-at-run-time=clojure.tools.analyzer.passes.jvm.classify_invoke__init
--initialize-at-run-time=clojure.tools.analyzer.passes.jvm.constant_lifter__init
--initialize-at-run-time=clojure.tools.analyzer.passes.jvm.infer_tag__init
--initialize-at-run-time=clojure.tools.analyzer.passes.jvm.validate__init
--initialize-at-run-time=clojure.tools.analyzer.passes.jvm.validate_loop_locals__init
--initialize-at-run-time=clojure.tools.analyzer.passes.jvm.warn_on_reflection__init
--initialize-at-run-time=io.pedestal.http.request.servlet_support__init
--initialize-at-run-time=clojure.pprint.dispatch__init
--initialize-at-run-time=clojure.stacktrace__init
--initialize-at-run-time=moclojer.io_utils__init
--initialize-at-run-time=flatland.ordered.map__init
--trace-class-initialization=clojure.core.async.impl.exec.threadpool__init
--trace-class-initialization=moclojer.config__init,clojure.core.async.impl.concurrent__init,babashka.cli__init
--trace-class-initialization=cognitect.transit__init
--trace-class-initialization=io.pedestal.http.body_params__init,clojure.core.async.impl.dispatch__init,clojure.core.async.impl.buffers__init,cognitect.transit__init
--trace-class-initialization=clojure.core.async.impl.channels__init
--trace-class-initialization=clojure.core.async.impl.timers__init
--trace-class-initialization=clojure.core.async__init
--trace-class-initialization=clojure.core.async.impl.ioc_macros__init
--trace-class-initialization=io.pedestal.http.jetty.container__init
--trace-class-initialization=clojure.tools.analyzer.jvm.utils__init,clojure.core.cache__init,clojure.datafy__init,clojure.reflect.java__init
--trace-class-initialization=clojure.reflect__init,clojure.core.memoize__init
--trace-class-initialization=clojure.tools.analyzer.passes.jvm.analyze_host_expr__init
--trace-class-initialization=clojure.tools.analyzer.passes.jvm.annotate_host_info__init
--trace-class-initialization=clojure.tools.analyzer.passes.jvm.annotate_tag__init
--trace-class-initialization=clojure.tools.analyzer.passes.jvm.box__init
--trace-class-initialization=clojure.tools.analyzer.passes.jvm.classify_invoke__init
--trace-class-initialization=clojure.tools.analyzer.passes.jvm.constant_lifter__init
--trace-class-initialization=clojure.tools.analyzer.passes.jvm.infer_tag__init
--trace-class-initialization=clojure.tools.analyzer.passes.jvm.validate__init
--trace-class-initialization=clojure.tools.analyzer.passes.jvm.validate_loop_locals__init
--trace-class-initialization=clojure.tools.analyzer.passes.jvm.warn_on_reflection__init
--trace-class-initialization=clojure.stacktrace__init
--trace-class-initialization=clojure.pprint.dispatch__init
--trace-class-initialization=flatland.ordered.map__initI'm guessing probably the cause listed on line 216 is more informative
Indeed:
Detected an instance of Random/SplittableRandom class in the image heap.
is the real thing you should solveI recommend using https://github.com/clj-easy/graal-build-time