Trong bài viết này, mình sẽ hướng dẫn các bạn cách sử dụng thư viện Maven Model của Apache Maven để phân tích, lấy các thông tin về dependency, plugin đang được sử dụng cho một Maven project các bạn nhé!
Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ:
Maven Model dependency như sau:
1 2 3 4 5 |
<dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model</artifactId> <version>3.9.1</version> </dependency> |
Maven project mà mình sử dụng để đọc thông tin là ở đây https://github.com/khanhnguyenj/huongdanjava.com/tree/master/spring-boot-actuator, các bạn nhé!
Nội dung của tập tin pom.xml trong project này như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.5</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.huongdanjava</groupId> <artifactId>spring-boot-actuator</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-actuator</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
Để đọc thông tin của tập tin pom.xml này, đầu tiên, chúng ta sẽ sử dụng đối tượng FileReader của Java để connect và chuẩn bị đọc nội dung của tập tin pom.xml trước:
1 2 |
String pomXml = "/Users/khanh/Documents/code/huongdanjava.com/spring-boot-actuator/pom.xml"; Reader reader = new FileReader(pomXml); |
Sau khi đã chuẩn bị xong, chúng ta sẽ sử dụng đối tượng của class MavenXpp3Reader của thư viện Maven Model để đọc, parse nội dung của tập tin pom.xml này thành đối tượng Model của thư viện này:
1 2 |
MavenXpp3Reader xpp3Reader = new MavenXpp3Reader(); Model model = xpp3Reader.read(reader); |
Đối tượng Model sẽ chứa thông tin đầy đủ của tập tin pom.xml, được thể hiện bằng các đối tượng Java. Và do đó, nó cho phép chúng ta có thể lấy thông tin mà chúng ta muốn đó các bạn!
Ví dụ nếu giờ các bạn muốn lấy thông tin của tất cả các dependencies đang được khai báo, các bạn có thể sử dụng phương thức getDependencies() của đối tượng Model như sau:
1 2 |
List<Dependency> dependencies = model.getDependencies(); dependencies.forEach(d -> System.out.println(d.getArtifactId())); |
Như các bạn thấy, chúng ta sẽ lấy được danh sách các đối tượng Dependency được khai báo trong tập tin pom.xml từ đối tượng Model này.
Kết quả:
Các bạn lưu ý là nếu tập tin pom.xml sử dụng parent pom.xml file để quản lý các dependency version (như ví dụ mình đang sử dụng) thì để lấy thông tin version của một dependency, các bạn cần đọc nội dung của tập tin pom.xml của đối tượng Parent này các bạn nhé! Thông tin đối tượng Parent các bạn có thể lấy như sau:
1 2 |
Parent parent = model.getParent(); System.out.println(parent.getArtifactId()); |
Kết quả:
Với ví dụ trên, mình cũng có thể lấy danh sách các Plugin đang được khai báo như sau:
1 2 |
List<Plugin> plugins = model.getBuild().getPlugins(); plugins.forEach(p -> System.out.println(p.getArtifactId())); |
Kết quả: