Điều kiện cần:
- Đã cài đặt JDK
- Đã cài đặt JAVA_HOME
- Đã cài đặt Path cho JDK
- Biết lập trình Java căn bản
Cài đặt Maven
- Tải tệp apache-maven-3.6.3-bin.zip hoặc tìm trong liên kết sau: https://maven.apache.org/download.cgi
- Giải nén tệp vừa tạo được thư mục với cấu trúc như sau:
apache-maven-3.6.3 |-- bin |-- m2.conf |-- mvn |-- mvn.cmd |-- mvnDebug |-- mvnDebug.cmd |-- mvnyjp |-- boot |-- conf |-- lib |-- LICENSE |-- NOTICE |-- README.txt
- Cài đặt Path đến thư mục /apache-maven-3.6.3/bin
- Kiểm tra đã cài đặt thành công:
Chạy ứng dụng Command Prompt/PowerShell trên Windows
Chạy ứng dụng Terminal trên Unix/Linux/macOS
Thực hiện lệnh sau:mvn --version
Tạo Project bằng lệnh mvn
Sử dụng lệnh sau để tạo Project
mvn archetype:generate -DgroupId=dev.sinhnx.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Trong đó:
Tham số | Mô tả |
---|---|
archetype:generate | |
-DgroupId=dev.sinhnx.app | tên package trong dự án |
-DartifactId=my-app | tên dự án (cũng là tên thư mục được tạo) |
-DarchetypeArtifactId=maven-archetype-quickstart | |
-DarchetypeVersion=1.4 | |
-DinteractiveMode=false |
Cấu trúc dự án Maven
my-app
|-- pom.xml
|-- src
|-- main
|-- java
|-- dev
|-- sinhnx
|-- app
|-- App.java
|-- test
|-- java
|-- dev
|-- sinhnx
|-- app
|-- AppTest.java
Tệp pom.xml là cấu hình dự án trong Maven. Đây là một tệp cấu hình duy nhất chứa phần lớn thông tin cần thiết để xây dựng dự án theo cách bạn muốn. POM là rất lớn và có thể gây nản lòng về sự phức tạp của nó, nhưng không cần thiết phải hiểu tất cả những điều phức tạp chỉ để sử dụng nó một cách hiệu quả. POM của dự án này là:
<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>dev.sinhnx.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<name>my-app</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Cấu hình mainClass
Mở tệp pom.xml thay đổi thẻ <plugin><artifactId>maven-jar-plugin</artifactId></plugin>:như sau:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>dev.sinhnx.app.App</mainClass>
<classpathPrefix>dependency/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
Biên dịch, đóng gói dự án
- Để biên dịch dự án sử dụng lệnh sau:
mvn compile
- Để đóng gói dự án sử dụng lệnh sau:
mvn package
Sao chép thư viện phụ thuộc
Nếu bạn sử dụng thư viện phụ thuộc được cấu hình trong thẻ <dependencies></dependencies> (giống như thư viện junit) thì sử dụng lệnh sau để tải các thư viện vào thư mục /dependency
mvn clean dependency:copy-dependencies package
Lưu ý để thiết lập classpath đến thư mục đã sao chép thư viện thì cần cấu hình ngay sau thẻ <mainClass></mainClass> thẻ sau (như đã làm trong phần Cấu hình mainClass):
<classpathPrefix>dependency/</classpathPrefix>
Chạy ứng dụng dự án đã đóng gói
Để chạy ứng dụng đã đóng gói thực hiện lệnh sau:
java -cp target/my-app-1.0-SNAPSHOT.jar dev.sinhnx.app.App
Nếu đã cấu hình mainClass thì có thể chạy lệnh như sau:
cd ./target
java -jar my-app-1.0-SNAPSHOT.jar
Tổng kết
- Cần cài đặt môi trường để chạy lệnh Maven trước khi tạo dự án
- Sử dụng lệnh mvn archetype:generate -DgroupId=dev.sinhnx.app -DartifactId=my-app để tạo dự án maven
- Tệp pom.xml là cấu hình dự án trong Maven
- Cần cấu hình mainClass để chạy dự án từ tệp .jar
- Sử dung lệnh mvn compile để biên dịch dự án
- Sử dụng lệnh mvn package để đóng gói dự án vào tệp .jar
- Sử dụng lệnh mvn clean dependency:copy-dependencies package để tải và copy các thư viện phụ thuộc vào thư mục /dependency
- Sử dụng lệnh java -cp target/my-app-1.0-SNAPSHOT.jar dev.sinhnx.app.App để chạy dự án sau khi đóng gói dự án.
Tài liệu tham khảo:
https://maven.apache.org/install.html
https://maven.apache.org/guides/mini/guide-configuring-maven.html
https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
https://www.tutorialspoint.com/maven/index.htm
https://www.javaworld.com/article/3516426/what-is-maven-build-and-dependency-management-with-apache-maven.html