用Maven快速搭建HelloWorld项目的关键在于掌握pom.xml的结构、约定的目录布局(src/main/java、src/test/java)、常见生命周期阶段(compile、test、package)与常用插件(maven-compiler、maven-surefire、maven-shade)。按步骤创建工程、编写Main类、配置依赖与插件、用mvn命令构建并打包,能保证项目在IDE与CI环境中可复用、可复现。

为什么用Maven来做HelloWorld(先把门槛说清楚)
很多人觉得HelloWorld就是一行输出,用IDE新建一个类够了。但真实工程里,你要考虑编译、依赖、测试、打包、持续集成,随着需求增长这些重复工作会变成负担。Maven的好处像把这些常见步骤写成一个标准流程:你告诉它“我是谁、我要什么、怎么编译”,它就按约定去做。这样一来,从单人练手变成团队能共享、CI能跑的工程就只差一个pom.xml。
先准备什么(环境与工具)
- JDK:建议使用 JDK 11 或更新版本,安装后确保 java 和 javac 在 PATH 中。
- Maven:安装 Maven(推荐3.6+),配置 MAVEN_HOME 并把 bin 加到 PATH。
- IDE:IntelliJ IDEA 或 Eclipse,两个都能很好支持 Maven 项目。
- 文本编辑器:VS Code、Sublime、或简单的记事本也可以。
一步步来:用Maven创建HelloWorld项目
1. 用命令生成工程骨架(archetype)
最简单的方法是用 Maven 的 archetype 插件创建基本结构:
mvn archetype:generate -DgroupId=com.example -DartifactId=helloworld -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
这会产生一个包含 src/main/java、src/test/java、以及基本 pom.xml 的项目。不要怕命令行,看着跑完就知道结构生成在哪里了。
2. 目录与文件说明(为什么是这样)
- src/main/java:放生产代码。
- src/main/resources:放配置文件、模板等随程序打包的资源。
- src/test/java:放单元测试。
- pom.xml:项目的“大脑”,定义依赖、插件、构建规则、信息等。
理解pom.xml的要点(把复杂拆成小块)
把pom.xml想像成一张清单:你是谁(groupId、artifactId、version)、要用什么库(dependencies)、如何构建(build/plugins)、在不同环境怎么办(profiles)。下面是常见字段的最小示例:
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<!-- 测试库 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
关键元素解释
- groupId/artifactId/version:唯一标识一个构件。
- properties:统一配置,比如 Java 版本,方便全局修改。
- dependencies:声明运行或测试时需要的库,Maven 会自动从中央仓库下载。
写一个最简单的 HelloWorld 类
在 src/main/java 下,按包路径创建文件:
package com.example;
public class App {
public static void main(String[] args) {
System.out.println("Hello, Maven!");
}
}
保存后,可以用 Maven 编译并运行(下面说明运行方式)。
常用 Maven 命令(表格看着更直观)
| 命令 | 作用 |
| mvn clean | 清理 target 目录,去掉上次构建产物 |
| mvn compile | 编译项目源代码 |
| mvn test | 执行测试(默认使用 surefire) |
| mvn package | 打包(生成 jar 或 war 到 target) |
| mvn install | 把构件安装到本地仓库,供本机其他项目引用 |
如何运行你的程序(不止一种办法)
- 方式一:直接用 java 执行编译后类
先编译 mvn compile,然后:
java -cp target/classes com.example.App - 方式二:使用 exec 插件(方便测试)
在 pom.xml 中加入 maven-exec-plugin 的配置,然后:
mvn compile exec:java -Dexec.mainClass="com.example.App" - 方式三:打成可执行的 fat JAR
如果你的程序依赖第三方库,使用 maven-shade-plugin 或 maven-assembly-plugin 打包成包含依赖的单个 jar:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals><goal>shade</goal></goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.example.App</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>然后 mvn package,执行 java -jar target/helloworld-1.0-SNAPSHOT.jar。
加入测试(让 HelloWorld 也讲点规矩)
在 src/test/java 下创建 AppTest.java:
import org.junit.Test;
import static org.junit.Assert.*;
public class AppTest {
@Test
public void testApp() {
assertTrue(true);
}
}
运行 mvn test 看测试是否通过;这一步习惯性的做法能保证后续改动不会把简单功能弄坏。
IDE 与 Maven 的协作(别让 IDE 抢了你的活)
- IntelliJ:直接用 Open 或 Import Project 选择 pom.xml,IDE 会按 pom 设置模块、依赖和编译器版本。
- Eclipse:安装 m2e 插件后通过 Import > Existing Maven Projects 导入。
- 注意保持 IDE 的 Project SDK 与 pom.xml 中的 maven.compiler.source/target 一致,避免编译不一致的问题。
实用技巧与常见坑
- 依赖冲突:当不同依赖引入同一库但版本不同,使用 mvn dependency:tree 查看冲突并通过 <dependencyManagement> 或 <exclusions> 解决。
- 离线构建:第一次构建需要联网拉取依赖,之后可以用 mvn -o(离线)加快构建。
- 快照版本:使用 -SNAPSHOT 对于迭代开发有用,但别把 SNAPSHOT 发布到生产仓库。
- 构建缓存:target 目录会缓存编译产物,clean 会清空它;CI 环境通常每次干净构建。
把 HelloWorld 扩展成多模块项目(当你要分层)
多模块项目可以把公共库、服务、CLI 各自拆成模块,根 pom 管理版本和公共依赖。
parent-pom/
pom.xml (<packaging>pom</packaging>)
module-api/
pom.xml
module-app/
pom.xml (依赖 module-api)
根 pom 的好处是统一管理版本,module 间用相对坐标引用,mvn -pl module-app -am 可以构建依赖的模块。
CI 集成的小提醒(把构建自动化)
把 mvn clean package 作为 CI 的基本步骤;如果需要覆盖率、静态检查、发布到私服,可以在 CI 流水线中追加对应命令。记得把 settings.xml(含私服凭证)在 CI 中安全地管理,不要直接把凭证写进 pom。
常见问题速查(像备忘录一样摸索)
- 构建报错找不到依赖:检查 artifactId/groupId/version 是否拼写正确,或者仓库是否被墙。
- IDE 编译和 mvn 编译结果不一致:同步 IDE 的构建配置,最好以 Maven 为准。
- 打包后运行出错类找不到:确认是否用了 shade/assembly 插件把依赖合并到最终 jar。
最后几句随想(让学习更轻松一些)
把 Maven 当成构建机器人的同时,也别忘了它的约定有助于团队协作。HelloWorld 只是一个起点,按上面步骤你能把一个简单类逐步扩展成可测试、可打包、可在 CI 上运行的工程。写代码时偶尔犯错,查下 log、读下 pom,会慢慢找到感觉——像学一门语言那样,练几次就熟了。