首页 > 编程语言 >java模块——使用 47M 的java环境运行HelloWorld

java模块——使用 47M 的java环境运行HelloWorld

时间:2024-07-03 17:21:22浏览次数:20  
标签:exports java 21.0 jdk helloworld HelloWorld 47M module

前言

我们知道,运行java程序需要jre或jdk环境,但是现在的jdk安装包已经很大了,如果我们的程序很简单,并且需要把程序发送给其他没有jdk环境的人的运行要如何做呢?如何精简我们的程序包呢?

从java9开始的模块功能为我们提供了解决方案。Java 库设计者现在可以将代码清晰地划分为模块,这些模块以编程的方式指定它们所依赖的每个模块,并定义导出哪些组件以及哪些组件完全不可用。

简单命令

列出java中的模块

java --list-modules

你可能会看到类似下面的打印结果

[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

查看模块的内容

java --describe-module java.base
PS C:\Users\zjw> java --describe-module java.base
[email protected]
exports java.io
exports java.lang
exports java.lang.annotation
exports java.lang.constant
exports java.lang.foreign
exports java.lang.invoke
exports java.lang.module
exports java.lang.ref
exports java.lang.reflect
exports java.lang.runtime
exports java.math
exports java.net
exports java.net.spi
exports java.nio
exports java.nio.channels
exports java.nio.channels.spi
exports java.nio.charset
exports java.nio.charset.spi
exports java.nio.file
...

可以看到java中包含了很多的模块。下面我们利用java.base模块创建我们的程序,并在程序中打印一句HelloWorld

创建项目

创建一个maven项目,结构如下

helloworld-module
│  └─pom.xml
│
└─src
   └─main
      └─java
         └─module-info.java
         │
         └─com
             └─zjw
                 └─helloworld
                            └─HelloWorld.java

HelloWorld.java

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

module-info.java

module helloworld.module {
    requires java.base; 
    exports com.zjw.helloworld;
}

接着编译好项目,并运行下面的命令来创建自定义的 Java 运行时映像:

jlink --module-path E:\SDK\Java\temurin\jdk-21.0.2+13\jmods;target/classes --add-modules helloworld.module --output helloworld

这是会在项目下生成一个helloworld的文件,里面就是我们的自定义java运行环境。

我们在里面创建一个run.bat文件,这样可以方便执行我们的helloworld模块。

@echo off
set DIR=%~dp0
"%DIR%bin\java" -m helloworld.module/com.zjw.helloworld.HelloWorld
echo.
echo Press any key to continue...
pause >nul

运行run.bat

可以看到我们的程序正确执行了,这样我们可以把程序发给我们的小伙伴去运行了。

对比完整的java

可以看到新打包的java和完整的java大小对比,只有47M便可运行java程序,这是很大的精简。

标签:exports,java,21.0,jdk,helloworld,HelloWorld,47M,module
From: https://www.cnblogs.com/zjw-blog/p/18282218

相关文章

  • java之静态属性方法
    在java中有一个static的关键字,它用来修饰类的成员。如果用static修饰属性,该属性被称为静态属性静态属性的访问格式如下类名.属性名如果没有修饰静态属性示例代码如下classXuesheng1{ Stringname; intage; Stringschool="A大学"; publicXuesheng1(Stringname,int......
  • 【Java学习笔记】数组的定义与使用
    【Java学习笔记】数组的定义与使用一、数组的基本概念(一)为什么要使用数组(二)什么是数组(三)数组的创建及初始化1.数组的创建2.数组的初始化(四)数组的使用1.数组中的元素访问2.遍历数组二、数组是引用类型(一)初识JVM的内存分布(二)基本类型变量与引用类型变量的区别(三)再谈引用......
  • Java--I/O流
    I/O流InputStream、OutputStream、FileInputStream、FileOutputStream(字节流)字节输入流InputStream主要方法:read():从此输入流中读取一个数据字节。read(byte[]b):从此输入流中将最多b.length个字节的数据读入一个byte数组中。read(byte[]b,intoff,intlen):从......
  • Java实现生成二维码及二维码解析
    1、导入所需的工具类jar包<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>com.google.zxing</gro......
  • Java计算机毕业设计任你行汽车租赁管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人们出行需求的日益多样化,汽车租赁行业迎来了前所未有的发展机遇。然而,传统的汽车租赁管理方式往往依赖于人工操作,存在效率低......
  • Java计算机毕业设计基于物联网的农产品冷链物流体系研究(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着消费者对新鲜农产品需求的日益增长,农产品冷链物流体系的重要性日益凸显。然而,传统的农产品冷链物流方式在保障产品质量与安全方面存在诸多不足,如......
  • Java计算机毕业设计服装企业营销活动定制系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着时尚行业的蓬勃发展,消费者对服装的需求日益多样化与个性化,这对服装企业的营销活动提出了更高的要求。传统的营销模式已难以满足市场快速变化的需......
  • 深入理解Java线程池:从理论到实践
    Java线程池是现代软件开发中不可或缺的一部分,尤其在高并发场景下,合理使用线程池可以显著提升系统的响应能力和资源利用率。一、线程池的基础概念与重要性1.1线程池是什么?线程池是一种设计模式,用于管理和复用一组预创建的线程,以减少线程创建和销毁的开销,提高程序的性能和响......
  • mybatis的xml如何使用java枚举
    mybatis的xml如何使用java枚举使用方式${@com.haier.baseManage.enums.LoganUploadTaskTypeEnum@LOG_TYPE.type}例子<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://myb......
  • 【JavaScript】聊聊js中关于this的指向
    前言最近在看回JavaScript的面试题,this指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对this问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。什么是JavaScript在了解this指向的问题前,首先得了解一下什么是JavaScript......