HelloWorld Maven 集成教程

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

HelloWorld Maven 集成教程

为什么用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-pluginmaven-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,会慢慢找到感觉——像学一门语言那样,练几次就熟了。