第 3 / 20 篇

第 2 章 补齐最少的 Java 与工具知识

2.1 哪些 Java 知识需要先会

你需要认识类、对象、方法、接口、异常和泛型。不要求熟练,但至少看懂下面的意思:

String message = "你好";
System.out.println(message);

String 是类型,message 是变量,println 把内容输出到终端。new 创建对象;@Override 表示这里实现或覆盖了父类型的方法。try/finally 表示无论正常结束还是发生异常,都执行清理代码。

SimpleChannelInboundHandler<String> 中的 <String> 是泛型参数,表示该处理器接收字符串类型的入站消息。不要被类名长度吓到:本书会逐段解释它负责的工作。

2.2 安装并检查 JDK 与 Maven

安装 JDK 17 或 21,以及 Maven 3.9.x。Windows 可以使用安装程序或包管理器;macOS 和 Linux 可以使用对应的包管理器。确保安装的是 JDK,而不只是 JRE。

打开终端,执行:

java -version
javac -version
mvn -version

三条命令都应该显示版本。mvn -version 还会列出 Maven 实际使用的 Java。若它与 java -version 不同,优先检查 JAVA_HOME 与 PATH。JAVA_HOME 应指向 JDK 根目录,不能指向 bin/java 文件。

本书命令在 macOS/Linux shell 中展示。Windows PowerShell 中的 mvn 命令相同;路径分隔符可调整为反斜线。遇到路径中有空格,应加引号。

2.3 Maven 帮我们做什么

Maven 会根据 pom.xml 下载依赖、编译源码和运行测试。项目主要目录如下:

examples/
  pom.xml
  src/main/java/book/LineServer.java
  src/main/java/book/LineClient.java
  src/test/java/book/ProtocolTest.java

src/main/java 放正式代码,src/test/java 放测试;book 是 Java 包名,也对应目录层级。target 是构建结果目录,可重新生成。

Netty 由多个模块组成。入门工程使用 netty-all 聚合依赖,减少手工挑选模块的负担。现代版本的 netty-all 不应被理解为“一个包含全部类的大 jar”;Maven 会解析它依赖的模块。正式项目可按需要选择 netty-transport、netty-codec 等模块,并保持版本一致。

小练习: 为什么不能只把下载到的一个很小的 netty-all jar 放进项目,就认定所有依赖都齐了?