返回

将 Java 模块构建为原生可执行文件

GraalVM Native Image 支持 Java 9 中引入的 Java 平台模块系统,这意味着您可以将模块化的 Java 应用程序转换为原生可执行文件。

native-image 工具接受模块相关选项,例如 --module (-m)、--module-path (-p)、--add-opens--add-exports(与 java 启动器相同)。当使用此类模块相关选项时,native-image 工具本身也作为一个模块使用。

除了支持 --add-reads--add-modules 之外,所有模块相关选项在扫描模块路径之前都会被考虑。这有助于防止类加载错误,并允许在运行时更好地进行模块自省。

从 Java 模块构建本机可执行文件的命令是:

native-image [options] --module <module>[/<mainclass>] [options]

运行演示

按照以下步骤将模块化的 Java 应用程序构建为原生可执行文件。在此演示中,您将使用一个通过 Maven 收集的简单 HelloWorld Java 模块

├── hello
│   └── Main.java
│       > package hello;
│       > 
│       > public class Main {
│       >     public static void main(String[] args) {
│       >         System.out.println("Hello from Java Module: "
│       >             + Main.class.getModule().getName());
│       >     }
│       > }
│
└── module-info.java
    > module HelloModule {
    >     exports hello;
    > }

前提条件

确保您已安装 GraalVM JDK。最简单的入门方法是使用 SDKMAN!。有关其他安装选项,请访问下载部分

  1. 下载或克隆演示仓库并导航到目录 native-image/build-java-modules/
     git clone https://github.com/graalvm/graalvm-demos
    
     cd graalvm-demos/native-image/build-java-modules
    
  2. 使用 Maven 编译并打包项目
     mvn clean package
    
  3. 在 GraalVM JDK 上测试运行它
     java --module-path target/HelloModule-1.0-SNAPSHOT.jar --module HelloModule
    
  4. 现在将此模块构建为原生可执行文件
     native-image --module-path target/HelloModule-1.0-SNAPSHOT.jar --module HelloModule
    

    它会将模块化的 Java 应用程序构建为一个名为 hellomodule 的原生可执行文件,该文件位于项目根目录中,您可以运行它。

     ./hellomodule
    

联系我们