Как создать нативное изображение GraalVM для Цейлона? - PullRequest
2 голосов
/ 08 марта 2019

Я пытался использовать --static -jar с скомпилированной жирной банкой Цейлона:

native-image --static -jar default.jar

(default.jar - толстая банка, произведенная ceylon fat-jar.)

Но я получил UnsupportedFeatureException высказывание java.lang.Class.getConstantPool() не поддерживается.

Цейлонская программа - это просто привет мир (распечатайте строку).

Цейлон и GraalVM версия:

ceylon version 1.3.3 0d594b3 (Contents May Differ)

java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) GraalVM EE 1.0.0-rc13 (build 25.202-b08-jvmci-0.55, mixed mode)

Полный журнал ошибок:

Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Unsupported method java.lang.Class.getConstantPool() is reachable: The declaring class of this element has been substituted, but this element is not present in the substitution class
To diagnose the issue, you can add the option --report-unsupported-elements-at-runtime. The unsupported element is then reported at run time when it is accessed the first time.
Detailed message:
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Unsupported method java.lang.Class.getConstantPool() is reachable: The declaring class of this element has been substituted, but this element is not present in the substitution class
To diagnose the issue, you can add the option --report-unsupported-elements-at-runtime. The unsupported element is then reported at run time when it is accessed the first time.
Trace: 
        at parsing java.lang.System$2.getConstantPool(System.java:1227)
Call path from entry point to java.lang.System$2.getConstantPool(Class): 
        at java.lang.System$2.getConstantPool(System.java:1227)
        at java.lang.reflect.Method.getDefaultValue(Method.java:609)
        at com.redhat.ceylon.model.loader.impl.reflect.mirror.ReflectionMethod.isDefault(ReflectionMethod.java:263)
        at com.redhat.ceylon.model.loader.AbstractModelLoader.addMethod(AbstractModelLoader.java:3810)
        at com.redhat.ceylon.model.loader.AbstractModelLoader.complete(AbstractModelLoader.java:3247)
        at com.redhat.ceylon.model.loader.AbstractModelLoader.access$1100(AbstractModelLoader.java:103)
        at com.redhat.ceylon.model.loader.AbstractModelLoader$18.run(AbstractModelLoader.java:2616)
        at java.lang.Shutdown.runHooks(Shutdown.java:123)
        at java.lang.Shutdown.sequence(Shutdown.java:167)
        at java.lang.Shutdown.shutdown(Shutdown.java:234)
        at com.oracle.svm.core.jdk.RuntimeSupport.shutdown(RuntimeSupport.java:181)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:177)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)

Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
Error: Processing image build request failed

1 Ответ

2 голосов
/ 08 марта 2019

По крайней мере, для простой программы «hello world», сгенерированной ceylon new hello-world, добавление опции --report-unsupported-elements-at-runtime (как указано в сообщении об ошибке) достаточно для запуска программы:

$ ./com.example.helloworld-1.0.0
Hello, World!

Я смутно помню, как использовал это некоторое время назад с ceylon.formatter, и я думаю, что он также работал в то время (то есть он не только поддерживает очень упрощенные программы), хотя я не помню, выполнялся ли он лучше или хуже, чем работать нормально.

...