高端网站建设968,外包建站的公司怎么做seo,技校计算机专业主要学什么,一般用什么做网站首页第4章#xff1a;构建模块化应用
模块化应用是 JDK 9 的核心特性之一#xff0c;通过模块化系统#xff08;Project Jigsaw#xff09;实现代码的强封装和显式依赖管理。本章详细讲解如何从零构建一个模块化应用#xff0c;包括模块定义、编译、打包、运行及调试。 4.1 模…
第4章构建模块化应用
模块化应用是 JDK 9 的核心特性之一通过模块化系统Project Jigsaw实现代码的强封装和显式依赖管理。本章详细讲解如何从零构建一个模块化应用包括模块定义、编译、打包、运行及调试。 4.1 模块化应用开发流程
定义模块编写 module-info.java 声明模块元数据。组织代码按模块化结构组织源代码。编译模块使用 javac 编译模块。打包模块将模块打包为模块化 JAR。运行模块使用 java 命令运行模块化应用。调试与优化使用工具如 jdeps分析依赖关系。 4.2 模块化应用实战
场景构建一个简单的模块化应用包含以下模块
com.utils工具模块提供字符串处理工具。com.user用户模块依赖 com.utils导出用户模型。 4.3 步骤详解
步骤1定义模块 com.utils 模块 模块描述符// com.utils/module-info.java
module com.utils {exports com.utils; // 导出工具包
}工具类// com.utils/com/utils/StringUtil.java
package com.utils;public class StringUtil {public static String capitalize(String s) {return s.substring(0, 1).toUpperCase() s.substring(1);}
}com.user 模块 模块描述符// com.user/module-info.java
module com.user {requires com.utils; // 依赖工具模块exports com.user.model; // 导出用户模型包
}用户类// com.user/com/user/model/User.java
package com.user.model;import com.utils.StringUtil;public class User {private String name;public User(String name) {this.name StringUtil.capitalize(name);}public String getName() { return name; }
}步骤2组织代码结构
src/
├── com.utils/
│ ├── module-info.java
│ └── com/utils/
│ └── StringUtil.java
└── com.user/├── module-info.java└── com/user/└── model/└── User.java步骤3编译模块
使用 javac 编译模块指定模块源路径和输出目录
javac -d out --module-source-path src --module com.utils,com.user编译后的目录结构
out/
├── com.utils/
│ ├── module-info.class
│ └── com/utils/
│ └── StringUtil.class
└── com.user/├── module-info.class└── com/user/└── model/└── User.class步骤4打包模块
将模块打包为模块化 JAR
# 打包 com.utils 模块
jar --create --file mods/com.utils.jar -C out/com.utils .# 打包 com.user 模块
jar --create --file mods/com.user.jar -C out/com.user .打包后的目录结构
mods/
├── com.utils.jar
└── com.user.jar步骤5运行模块化应用
使用 java 命令运行模块化应用指定模块路径和主模块
java --module-path mods -m com.user/com.user.model.User步骤6调试与优化 使用 jdeps 分析依赖 jdeps --module-path mods -s mods/com.user.jar
# 输出示例
com.user - com.utils
com.user - java.base生成模块图 jdeps --module-path mods --dot-output dots mods/com.user.jar生成 dots/com.user.dot 文件可用 Graphviz 工具生成依赖图。 4.4 模块化应用最佳实践
1. 最小化模块导出
仅导出必要的包隐藏实现细节。示例module com.myapp {exports com.myapp.api; // 仅导出API包
}2. 使用传递依赖
通过 requires transitive 声明传递依赖避免重复依赖。示例module com.myapp {requires transitive com.utils; // 传递依赖
}3. 适配反射框架
使用 opens 开放反射访问权限支持 Spring/Hibernate 等框架。示例module com.myapp {opens com.myapp.internal to spring.core; // 允许Spring反射访问
}4. 生成定制化 JRE
使用 jlink 生成仅包含所需模块的最小化 JRE。示例jlink --module-path $JAVA_HOME/jmods:mods \--add-modules com.user,java.base \--output myapp-runtime4.5 常见问题与解决
问题解决方案模块未找到Module not found检查模块路径--module-path是否包含依赖模块确认 requires 声明正确。无法访问非导出包使用 exports 导出包或 opens 开放反射访问权限。生成的 JRE 缺少必要模块检查 jlink 的 --add-modules 参数是否包含所有依赖模块。 4.6 总结
构建模块化应用是 JDK 9 的核心能力通过模块化系统实现强封装和显式依赖管理显著提升了代码的安全性和可维护性。开发者应掌握模块定义、编译、打包及运行的全流程并结合工具链如 jdeps、jlink优化应用性能与兼容性。