0

[Java Backend Zero to Hello] BÀI 3.3: MAVEN CƠ BẢN

Java Backend Zero to Hello

📚 Bài viết thuộc series Java Backend Zero to Hello 📌 Phần: Phase 3: Công Cụ & Build Tools | Bài 31/86


BÀI 3.3: MAVEN CƠ BẢN

Mục tiêu

  • Hiểu Maven và vai trò
  • Tạo project Maven
  • Quản lý dependency
  • Sử dụng Maven lifecycle

1. MAVEN LÀ GÌ?

Maven là công cụ quản lý dự án và build tự động cho Java.

Lợi ích

  • Quản lý dependency tự động
  • Chuẩn hóa cấu trúc project
  • Build tự động (compile, test, package)
  • Tích hợp với IDE
  • Hệ sinh thái plugin phong phú

2. CÀI ĐẶT

2.1 Tải Maven

2.2 Cấu hình biến môi trường

MAVEN_HOME = C:\apache-maven-3.9.x
PATH += %MAVEN_HOME%\bin

2.3 Kiểm tra

mvn -version

2.4 Cấu hình Maven local repository

Mặc định: ~/.m2/repository

Cấu hình trong ~/.m2/settings.xml:

<settings>
    <localRepository>D:/maven-repo</localRepository>
</settings>

3. TẠO PROJECT MAVEN

3.1 Tạo từ command line

mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

3.2 Tạo từ IDE

  • IntelliJ: New Project → Maven
  • Eclipse: New → Maven Project

3.3 Cấu trúc project

my-app/
├── pom.xml
├── src/
│   ├── main/
│   │   ├── java/           # Source code
│   │   └── resources/      # Resources
│   └── test/
│       └── java/           # Test code
└── target/                 # Build output (tự sinh)

4. POM.XML

POM (Project Object Model) là file cấu hình chính của Maven.

4.1 Cấu trúc cơ bản

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>

    <!-- Thông tin project -->
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- Dependencies -->
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.10.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <!-- Build configuration -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

4.2 Các thành phần

Thành phần Mô tả
groupId Tên tổ chức (namespace)
artifactId Tên project
version Phiên bản
packaging Loại package (jar, war, pom)
dependencies Thư viện sử dụng
build Cấu hình build
plugins Plugin Maven

5. DEPENDENCY

5.1 Thêm dependency

Tìm trên https://mvnrepository.com/

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>3.2.0</version>
    </dependency>

    <!-- Lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version>
        <scope>provided</scope>
    </dependency>

    <!-- MySQL Driver -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.2.0</version>
    </dependency>
</dependencies>

5.2 Scope

Scope Mô tả
compile Mặc định, có ở mọi nơi
provided Cung cấp bởi runtime (Tomcat, JDK)
runtime Cần ở runtime, không cần compile
test Chỉ dùng cho test
system Từ filesystem
import Chỉ dùng trong dependencyManagement

5.3 Các lệnh dependency

mvn dependency:tree              # Cây dependency
mvn dependency:resolve           # Tải tất cả dependency
mvn dependency:analyze           # Phân tích dependency
mvn dependency:list              # Liệt kê dependency

6. MAVEN LIFECYCLE

6.1 Các phase chính

validate → compile → test → package → verify → install → deploy

6.2 Các lệnh thường dùng

mvn clean                       # Xóa target/
mvn compile                     # Compile source
mvn test                        # Chạy test
mvn package                     # Tạo jar/war
mvn install                     # Cài vào local repo
mvn deploy                      # Deploy lên remote repo

# Kết hợp
mvn clean install               # Clean + install
mvn clean package               # Clean + package
mvn clean test                  # Clean + test

6.3 Skip test

mvn package -DskipTests         # Bỏ qua test
mvn package -Dmaven.test.skip=true  # Bỏ qua compile + run test

7. MAVEN REPOSITORY

7.1 Local Repository

  • Vị trí: ~/.m2/repository
  • Lưu dependency đã tải về

7.2 Central Repository

7.3 Remote Repository

  • Cấu hình trong pom.xml:
<repositories>
    <repository>
        <id>my-repo</id>
        <url>https://repo.example.com/maven2</url>
    </repository>
</repositories>

8. PLUGIN PHỔ BIẾN

8.1 Compiler Plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
</plugin>

8.2 Surefire Plugin (Test)

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.2.2</version>
</plugin>

8.3 Jar Plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.3.0</version>
</plugin>

8.4 Spring Boot Plugin

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>3.2.0</version>
</plugin>

9. PROPERTIES VÀ VARIABLES

<properties>
    <java.version>17</java.version>
    <spring.version>3.2.0</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
</dependencies>

10. BÀI TẬP THỰC HÀNH

Bài 1: Tạo project Maven đầu tiên

mvn archetype:generate \
  -DgroupId=com.example \
  -DartifactId=hello-maven \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DinteractiveMode=false

cd hello-maven
mvn compile
mvn package
java -cp target/hello-maven-1.0-SNAPSHOT.jar com.example.App

Bài 2: Thêm dependency

Thêm JUnit vào pom.xml, viết test cho class App.

Bài 3: Tạo executable JAR

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.5.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

11. TÓM TẮT

Khái niệm Mô tả
POM File cấu hình Maven
Dependency Thư viện bên ngoài
Lifecycle Chuỗi phase build
Repository Nơi lưu artifact
Plugin Mở rộng chức năng
Scope Phạm vi sử dụng dependency

Bài tiếp theo: 3.4 Maven nâng cao


🧭 Điều Hướng Series

⬅️ Bài trước: BÀI 3.2: GIT NÂNG CAO

📋 Lộ trình tổng quan: Xem Toàn Bộ Series

➡️ Bài tiếp theo: BÀI 3.4: MAVEN NÂNG CAO


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí