GraalVM HelloWorld 应用程序 NoClassDefFoundError

问题描述 投票:0回答:1

我有一个代码,我想在 GraalVM 上运行

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}

以上代码是我的基本代码。

native-image 21.0.1 2023-10-17
GraalVM Runtime Environment Oracle GraalVM 21.0.1+12.1 (build 21.0.1+12-jvmci-23.1-b19)
Substrate VM Oracle GraalVM 21.0.1+12.1 (build 21.0.1+12, serial gc, compressed references)

上面的代码是我的 graalvm 版本。

当我运行以下命令时

javac HelloWorld.java
原生图像 HelloWorld,

我有一个错误

java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/fsk/HelloWorld)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageClassLoader.defineClass(NativeImageClassLoader.java:500)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageClassLoader.findClassViaClassPath(NativeImageClassLoader.java:452)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageClassLoader.loadClass(NativeImageClassLoader.java:640)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:534)
at java.base/java.lang.Class.forName(Class.java:513)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.ImageClassLoader.forName(ImageClassLoader.java:307)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.ImageClassLoader.forName(ImageClassLoader.java:303)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.ImageClassLoader.forName(ImageClassLoader.java:312)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:434)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:720)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.start(NativeImageGeneratorRunner.java:142)
at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:97)

我的IDE是Intellij IDE 2023.3
我正在使用 MacBook 并使用土耳其语

我该如何解决这个问题。?

java graalvm graalvm-native-image
1个回答
0
投票

HelloWorld代码

package org.fsk;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}

该代码位于

org/fsk
文件夹下,文件名为 HelloWorld.java 编译命令:
javac org\fsk\HelloWorld.java
和 Windows 中的本机图像

ozkan@HP-ENVY-2021-I7 C:\Users\ozkan\tmp\graalvmtest
$ native-image org.fsk.HelloWorld
========================================================================================================================
GraalVM Native Image: Generating 'org.fsk.helloworld' (executable)...
========================================================================================================================
For detailed information and explanations on the build output, visit:
https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/BuildOutput.md
------------------------------------------------------------------------------------------------------------------------
[1/8] Initializing...                                                                                   (15.7s @ 0.07GB)
 Java version: 21.0.2+13-LTS, vendor version: Oracle GraalVM 21.0.2+13.1
 Graal compiler: optimization level: 2, target machine: x86-64-v3, PGO: ML-inferred
 C compiler: cl.exe (microsoft, x64, 19.41.34120)
 Garbage collector: Serial GC (max heap size: 80% of RAM)
 1 user-specific feature(s):
 - com.oracle.svm.thirdparty.gson.GsonFeature
------------------------------------------------------------------------------------------------------------------------
Build resources:
 - 11.92GB of memory (75.6% of 15.77GB system memory, determined at start)
 - 8 thread(s) (100.0% of 8 available processor(s), determined at start)
[2/8] Performing analysis...  [*****]                                                                   (16.8s @ 0.18GB)
    2,095 reachable types   (61.5% of    3,409 total)
    1,995 reachable fields  (45.6% of    4,372 total)
    9,663 reachable methods (38.5% of   25,068 total)
      745 types,   109 fields, and   481 methods registered for reflection
       53 types,    30 fields, and    48 methods registered for JNI access
        1 native library: version
[3/8] Building universe...                                                                               (2.6s @ 0.21GB)
[4/8] Parsing methods...      [***]                                                                      (5.6s @ 0.26GB)
[5/8] Inlining methods...     [***]                                                                      (2.2s @ 0.27GB)
[6/8] Compiling methods...    [******]                                                                  (35.1s @ 0.29GB)
[7/8] Layouting methods...    [**]                                                                       (2.1s @ 0.25GB)
[8/8] Creating image...       [**]                                                                       (2.3s @ 0.33GB)
   3.50MB (47.54%) for code area:     4,560 compilation units
   3.77MB (51.30%) for image heap:   57,124 objects and 47 resources
  87.16kB ( 1.16%) for other data
   7.36MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 origins of code area:                                Top 10 object types in image heap:
   1.84MB java.base                                          882.30kB byte[] for code metadata
   1.35MB svm.jar (Native Image)                             722.67kB byte[] for java.lang.String
  90.25kB com.oracle.svm.svm_enterprise                      427.77kB heap alignment
  42.46kB jdk.proxy3                                         382.90kB java.lang.String
  40.50kB jdk.proxy1                                         333.15kB java.lang.Class
  30.21kB org.graalvm.nativeimage.base                       154.09kB java.util.HashMap$Node
  29.85kB org.graalvm.collections                            114.01kB char[]
  21.47kB jdk.internal.vm.ci                                 101.10kB byte[] for reflection metadata
  17.29kB jdk.internal.vm.compiler                            88.75kB java.lang.Object[]
  11.90kB jdk.proxy2                                          81.84kB com.oracle.svm.core.hub.DynamicHubCompanion
  389.00B for 1 more packages                                575.42kB for 553 more object types
                              Use '-H:+BuildReport' to create a report with more details.
------------------------------------------------------------------------------------------------------------------------
Security report:
 - Binary does not include Java deserialization.
 - Use '--enable-sbom' to embed a Software Bill of Materials (SBOM) in the binary.
------------------------------------------------------------------------------------------------------------------------
Recommendations:
 PGO:  Use Profile-Guided Optimizations ('--pgo') for improved throughput.
 INIT: Adopt '--strict-image-heap' to prepare for the next GraalVM release.
 HEAP: Set max heap for improved and more predictable memory usage.
 CPU:  Enable more CPU features with '-march=native' for improved performance.
 QBM:  Use the quick build mode ('-Ob') to speed up builds during development.
------------------------------------------------------------------------------------------------------------------------
                        4.2s (4.9% of total time) in 179 GCs | Peak RSS: 0.84GB | CPU load: 4.02
------------------------------------------------------------------------------------------------------------------------
Produced artifacts:
 C:\Users\ozkan\tmp\graalvmtest\org.fsk.helloworld.exe (executable)
========================================================================================================================
Finished generating 'org.fsk.helloworld' in 1m 24s.

下面是如何在windows下运行

ozkan@HP-ENVY-2021-I7 C:\Users\ozkan\tmp\graalvmtest
$ dir
 Volume in drive C is Windows
 Volume Serial Number is BC27-F52E

 Directory of C:\Users\ozkan\tmp\graalvmtest

19/09/2024  20:49    <DIR>          .
19/09/2024  20:38    <DIR>          ..
19/09/2024  20:44    <DIR>          org
19/09/2024  20:49         7,712,768 org.fsk.helloworld.exe
               1 File(s)      7,712,768 bytes
               3 Dir(s)  87,389,446,144 bytes free

ozkan@HP-ENVY-2021-I7 C:\Users\ozkan\tmp\graalvmtest
$ org.fsk.helloworld.exe
Hello world!
© www.soinside.com 2019 - 2024. All rights reserved.