详解JDK9特性之JPMS模块化

详解JDK9特性之JPMS模块化攻略

Java SE 9中最重要的特性之一是引入了“JPMS”——Java平台模块系统。模块化能够提供更清晰、更安全和更可靠的软件架构。本文将详细讲解JPMS模块化的相关概念,并且提供几个实际的示例来演示如何创建、编译和运行模块化的应用程序。

JPMS:Java平台模块系统概述

Java平台模块系统是一个新的、标准的Java SE 9特性,其目标是提供一种更加模块化的方法来组织和部署Java应用程序和库。基本上,这意味着将应用程序分解为不同的模块,每个模块都可以定义其属性和清晰的API,并且这些模块相互之间可以通信和协同工作。

Java SE 9中,一个模块定义了一个名为“module-info.java”的文件,其中包含该模块的元数据信息。模块可以包含其他模块和类,或者可以公开其组件给其他模块使用。在编译和部署时,每个模块都被视为一个单独的单元。

创建一个模块

以下是一个简单的示例模块,定义了一个名为“com.example.greeting”的模块:

module com.example.greeting {
    exports com.example.greeting.api;
    requires java.base;
}

在此示例中,模块要求Java基础模块并导出com.example.greeting.api包。这意味着只有在这种情况下这个包中的类和方法才能被其他模块访问。

编译一个模块

要编译一个模块,您需要使用新的命令行选项“-module-source-path”,如下所示:

javac -d mods --module-source-path src $(find src -name "*.java")

在这里,“-d”参数指定输出目录,而“--module-source-path”参数指定模块源文件的根目录。请注意,此命令还使用“find”命令查找匹配“*.java”模式的所有源文件。

运行一个模块

要运行一个模块,在命令行中使用“--module”的新选项,如下所示:

java --module-path mods --module com.example.greeting/com.example.greeting.Main

在这里,“--module-path”参数指定模块路径,该路径包含编译的模块。而“--module”参数指定要运行的模块及其主类。

示例:模块化的HTTP服务器

下面是一个更复杂的示例,展示了如何创建一个模块化的HTTP服务器。该服务器使用HTTP组件和一个“greeting”模块,该模块提供一条简单的问候。

创建HTTP服务器模块

文件:module-info.java

module com.example.httpserver {
    requires jdk.httpserver;
    exports com.example.httpserver;
}

在此模块中,我们要求JDK的HTTP服务器组件,并导出一个公开的包“com.example.httpserver”。

创建问候模块

文件:module-info.java

module com.example.greeting {
    exports com.example.greeting.api;
}

在此模块中,我们仅导出一个公开的包“com.example.greeting.api”。

创建HTTP服务器Main类

文件:Main.java

package com.example.httpserver;

import com.example.greeting.api.Greeter;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

public class Main {
    public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
        server.createContext("/", new HttpHandler() {
            public void handle(HttpExchange exchange) throws IOException {
                String response = Greeter.greet("World");
                exchange.sendResponseHeaders(200, response.length());
                OutputStream os = exchange.getResponseBody();
                os.write(response.getBytes());
                os.close();
            }
        });
        server.start();
    }
}

在此示例中,Main类使用我们的greeting模块中的代码生成一个问候,然后将其发送回HTTP客户端。

编译和运行HTTP服务器

要编译和运行服务器,首先需要执行以下命令来编译两个模块:

javac -d mods --module-source-path src $(find src -name "*.java")

现在,我们可以启动HTTP服务器,方法如下:

java --module-path mods --module com.example.httpserver/com.example.httpserver.Main

在这个命令中,“--module-path”参数指定了我们的模块路径,而“--module”参数指定了我们要运行的模块及其主类。

总结

Java SE 9引入的JPMS模块化提供了一种新的、灵活的方式来组织和部署Java应用程序和库。本文章介绍了如何创建、编译和运行一个模块化的应用程序,同时提供了两个实际的示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JDK9特性之JPMS模块化 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • 在windows下揪出java程序占用cpu很高的线程并完美解决

    以下是针对“在 Windows 下揪出 Java 程序占用 CPU 很高的线程并完美解决”的完整攻略: 1. 使用 Java 可视化工具揪出占用 CPU 较高的线程 步骤1:下载 VisualVM VisualVM 是一款 Java 虚拟机监控和性能分析工具,可以在 Windows 等多个平台上使用,具有良好的界面和体验。可以到以下网址下载 VisualVM…

    Java 2023年5月19日
    00
  • 基于Session的国际化实现方法

    实现国际化(i18n)是许多网站和应用程序都必须处理的一个问题。其中一种实现方式是使用基于 Session 的国际化实现方法。此方法可以根据用户的浏览器语言设置来自动切换语言,并且可以设置不同的语言优先级,从而实现多语言支持。 下面是基于 Session 的国际化实现方法的完整攻略: 设置支持的语言 首先,需要在应用程序中定义所支持的语言。这可以通过在应用程…

    Java 2023年6月15日
    00
  • SSH框架实现表单上传图片实例代码

    下面我会详细讲解 “SSH框架实现表单上传图片实例代码”的完整攻略。 1. 前期准备工作 在进行表单上传图片代码实现之前,你需要了解以下几个重要的知识点: SSH框架的基本概念和使用方法 MultipartFile类型的文件上传方式 前端表单的设计和提交 2. 后台代码实现 2.1. 建立控制器 首先我们需要在后台建立一个控制器来接收前端传来的文件并完成上传…

    Java 2023年5月20日
    00
  • Java String 对象(你真的了解了吗)

    Java String 对象(你真的了解了吗) 什么是 Java String 对象 Java String 是 Java 语言中的一个类,用于存储和操作字符串。String 对象在 Java 中非常常用,几乎每个 Java 程序都会用到。 每个 Java String 对象都是不可变的(immutable),即一旦创建了一个 String 对象,它的值就不…

    Java 2023年5月26日
    00
  • java控制台实现学生信息管理系统(集合版)

    下面就给大家详细讲解一下如何实现Java控制台学生信息管理系统。 系统需求 学生的基本信息包括学号、姓名、性别和年龄; 使用集合对学生信息进行管理; 实现基本的增、删、改、查功能; 可以按照学号或者姓名进行查找和排序; 友好的用户交互界面。 实现步骤 步骤一:创建学生类 public class Student { private int id; priva…

    Java 2023年5月19日
    00
  • maven tomcat plugin实现热部署

    以下是详细讲解“maven tomcat plugin实现热部署”的完整攻略: 什么是maven tomcat plugin? Maven Tomcat Plugin是一个可以帮助我们在Maven项目中集成Tomcat,并直接在Maven构建过程中运行和部署Web应用程序到Tomcat容器中的Maven插件。该插件提供了几个目标,可以使用这些目标来完成各种任…

    Java 2023年5月19日
    00
  • 从最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate

    下面我将详细讲解“从最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate”的完整攻略。 前置要求 在正式进行搭建之前,需要确保你已经安装配置好以下软件: JDK Maven Tomcat IDE(推荐使用IntelliJ IDEA) 步骤一:创建Maven项目 首先,我们需要创建一个Maven项目。在IDE中,找到创建M…

    Java 2023年5月20日
    00
  • java基础检查和未检查异常处理详解

    Java基础检查和未检查异常处理详解 在Java开发中,异常处理是非常重要的一个方面。Java的异常分为两大类:检查异常和未检查异常。本文将详细讲解Java基础检查和未检查异常处理的完整攻略。 Java检查异常 检查异常是指在编译期就能检查出来的异常,如果不处理这些异常,编译器会报错,无法通过编译。为了避免这种情况的发生,我们必须在代码中处理这些异常。Jav…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部