【JDK17】Jlink一秒生成精简的JRE

之前介绍了 Java17模块化的JDK,模块化后按需使用Jlink 用于精简生成 JRE 环境,这让快速的开发环境增强了编码的愉悦感。在实际生产环境中使用 mave 进行项目的构建,其次再是精简 JRE 缩小容器镜像体积,为实现一体化的流程,使用 mave 插件来实现精简 JRE:


1. Maven 生态插件

(1) maven-jlink-plugin
  • 官方插件:Apache Maven 官方维护,直接集成 jlink 工具。
  • 功能
    • 生成自定义 JRE。
    • 支持模块依赖分析、压缩和优化。
  • 配置示例
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jlink-plugin</artifactId>
      <version>3.3.0</version>
      <configuration>
        <addModules>java.base,java.sql</addModules>
        <outputDirectory>target/myjre</outputDirectory>
      </configuration>
    </plugin>
    
(2) moditect-maven-plugin
  • 第三方插件:专注于模块化项目支持。
  • 功能
    • 自动生成 module-info.java
    • 将传统 JAR 转换为模块化 JAR。
    • 辅助生成精简 JRE。
  • 适用场景:需要处理非模块化依赖(如 Spring Boot)的项目。
  • 配置示例
    <plugin>
      <groupId>org.moditect</groupId>
      <artifactId>moditect-maven-plugin</artifactId>
      <version>1.0.0</version>
      <executions>
        <execution>
          <configuration>
            <jlinkImage>true</jlinkImage>
            <modulePath>${project.build.directory}/modules</modulePath>
          </configuration>
        </execution>
      </executions>
    </plugin>
    

2. Gradle 生态插件

(1) org.gradle.java.experimental-jigsaw
  • 官方实验性插件:支持 Java 模块化(JPMS)。
  • 功能
    • 自动配置模块路径。
    • 支持 jlink 任务生成 JRE。
  • 配置示例
    plugins {
      id 'org.gradle.java.experimental-jigsaw' version '0.1.1'
    }
    jlink {
      addModules = ['java.base', 'java.sql']
      outputDir = file("$buildDir/myjre")
    }
    
(2) org.javamodularity.moduleplugin
  • 社区插件:功能全面的模块化支持。
  • 功能
    • 自动生成 module-info.java
    • 集成 jlinkjdeps
    • 支持 Spring Boot 和反射访问。
  • 配置示例
    plugins {
      id 'org.javamodularity.moduleplugin' version '1.8.12'
    }
    modularity {
      patchModule("spring.core", "spring-core-5.3.0.jar")
    }
    

3. 独立工具

(1) jlink 命令行工具
  • 原生工具:Java 9+ 自带,无需插件。
  • 功能
    • 直接生成精简 JRE。
    • 完全手动控制模块依赖。
  • 使用示例
    # 一秒直接生成
    jlink --add-modules java.base,java.sql --output myjre
    
(2) jpackage
  • Java 14+ 工具:打包应用为原生安装包。
  • 功能
    • 集成 JRE 和应用为一个可执行文件。
    • 支持 Windows/MSI、macOS/DMG、Linux/RPM 等格式。
  • 适用场景:桌面应用分发。
  • 使用示例
    jpackage --input target/ --name MyApp --main-jar myapp.jar
    
(3) jlink + Docker 多阶段构建
  • 容器化方案:结合 Docker 构建最小化镜像。
  • 示例 Dockerfile
    FROM eclipse-temurin:17-jdk as builder
    RUN jlink --add-modules java.base --output /myjre
    
    FROM debian:11-slim
    COPY --from=builder /myjre /opt/jre
    ENV PATH="/opt/jre/bin:$PATH"
    CMD ["java", "-jar", "/app.jar"]
    

4. 功能对比表

工具/插件构建工具核心功能适用场景
maven-jlink-pluginMaven生成 JRE、模块依赖管理纯 Java 或简单 Spring 项目
moditect-maven-pluginMaven模块化转换、非模块化依赖处理需要兼容传统库的复杂项目
org.javamodularity.modulepluginGradle全功能模块化支持、反射配置Gradle 项目、Spring Boot
jlink 命令行手动生成 JRE快速验证或脚本化构建
jpackage应用打包为原生安装包桌面应用分发
Docker 多阶段构建容器化精简镜像云原生部署

选择建议

  1. Maven 项目

    • 优先使用 maven-jlink-plugin(简单场景)。
    • 需要处理非模块化依赖时,结合 moditect-maven-plugin
  2. Gradle 项目

    • 使用 org.javamodularity.moduleplugin,支持自动模块化和反射配置。
  3. 容器化部署

    • 结合 jlink + Docker 多阶段构建,生成超小镜像。
  4. 桌面应用分发

    • 使用 jpackage 直接生成原生安装包。

通过上述工具,可灵活实现模块化开发与部署,满足不同场景下的精简 JRE 需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值