Build a Scala 2.13 project, using Java 11, GraalVM 20.2.0 on Docker raises the error:
Wxception in thread "main" com.oracle.svm.core.jdk.UnsupportedFeatureError: Invoke with MethodHandle argument could not be reduced to at most a single call or single field access. The method handle must be a compile time constant, e.g., be loaded from a `static final` field. Method that contains the method handle invocation: java.lang.invoke.LambdaForm$MH/212255434.invoke_MT(Object, Object)
at com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:86)
at scala.runtime.Statics.releaseFence(Statics.java:148)
at scala.collection.immutable.BitmapIndexedMapNode.<init>(HashMap.scala:588)
at scala.collection.immutable.MapNode$.<clinit>(HashMap.scala:495)
at com.oracle.svm.core.classinitialization.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:351)
at com.oracle.svm.core.classinitialization.ClassInitializationInfo.initialize(ClassInitializationInfo.java:271)
at scala.collection.immutable.HashMap$.<clinit>(HashMap.scala:2161)
at com.oracle.svm.core.classinitialization.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:351)
at com.oracle.svm.core.classinitialization.ClassInitializationInfo.initialize(ClassInitializationInfo.java:271)
at scala.collection.immutable.Map$Map4.updated(Map.scala:563)
at scala.collection.immutable.Map$Map4.updated(Map.scala:506)
at scala.collection.immutable.MapOps.$plus(Map.scala:133)
at scala.collection.immutable.MapOps.$plus$(Map.scala:133)
at scala.collection.immutable.AbstractMap.$plus(Map.scala:641)
at zio.Has$HasSyntax$.add$extension(Has.scala:167)
at zio.Has$.allOf(Has.scala:263)
at zio.PlatformSpecific$ZEnv$Services$.<init>(PlatformSpecific.scala:32)
at zio.PlatformSpecific$ZEnv$.Services$lzycompute$1(PlatformSpecific.scala:30)
at zio.PlatformSpecific$ZEnv$.Services(PlatformSpecific.scala:30)
at zio.BootstrapRuntime.$init$(BootstrapRuntime.scala:22)
at com.x.Main$.<clinit>(Main.scala:18)
at com.oracle.svm.core.classinitialization.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:351)
at com.oracle.svm.core.classinitialization.ClassInitializationInfo.initialize(ClassInitializationInfo.java:271)
at com.x.Main.main(Main.scala)
The Docker file looks like this:
FROM oracle/graalvm-ce:20.2.0-java11 as builder
RUN gu install native-image
ARG RESULT_LIB="/staticlibs"
RUN mkdir ${RESULT_LIB} && \
curl -L -o musl.tar.gz https://musl.libc.org/releases/musl-1.2.1.tar.gz && \
mkdir musl && tar -xvzf musl.tar.gz -C musl --strip-components 1 && cd musl && \
./configure --disable-shared --prefix=${RESULT_LIB} && \
make && make install && \
cd / && rm -rf /muscl && rm -f /musl.tar.gz && \
cp /usr/lib/gcc/x86_64-redhat-linux/4.8.2/libstdc++.a ${RESULT_LIB}/lib/
ENV PATH="$PATH:${RESULT_LIB}/bin"
ENV CC="musl-gcc"
RUN curl -L -o zlib.tar.gz https://zlib.net/zlib-1.2.11.tar.gz && \
mkdir zlib && tar -xvzf zlib.tar.gz -C zlib --strip-components 1 && cd zlib && \
./configure --static --prefix=${RESULT_LIB} && \
make && make install && \
cd / && rm -rf /zlib && rm -f /zlib.tar.gz
WORKDIR /app
COPY . /app
RUN ./sbt graalvm-native-image:packageBin
FROM scratch
EXPOSE 8080
COPY --from=builder /app/target/graalvm-native-image/project-name /project-name
ENTRYPOINT ["/project-name"]
Describe the bug
Build a Scala 2.13 project, using Java 11, GraalVM 20.2.0 on Docker raises the error:
The Docker file looks like this:
And the SBT, like this:
To Reproduce Steps to reproduce the behavior:
docker build -t [tagname] .
docker run -d -p 8080:8080 [tagname] .
Expected behavior
The application runs correctly.
Installation: