Hãy tưởng tượng bạn đang xây dựng một ứng dụng với nhiều project khác nhau, đối với mỗi project bạn cần khai báo để sử dụng một số dependencies với những phiên bản cố định. Một số project cần sử dụng những dependencies giống nhau và tất nhiên giống cả phiên bản. Bạn sẽ cảm thấy như thế nào khi chúng ta cần nâng cấp version cho một dependencies nào đó, chúng ta phải mở từng project đang sử dụng dependencies đó để sửa hoặc bạn muốn build hết tất cả các project, bạn phải mở command-line cho từng project và thực hiện mvn clean install. Để giảm thiểu tất cả những điều đó và quan trọng hơn là cho phép chúng ta biết được những project liên quan đến ứng dụng, các bạn có thể:
- Tạo một Maven project với kiểu packing là pom,
- Khai báo tất cả những dependencies cần thiết cho ứng dụng trong project này,
- Khai báo tất cả những project của ứng dụng trong project này.
- Rồi trong từng project của ứng dụng, các bạn khai báo project này là parent project,
- Sau đó khai báo những dependencies cần sử dụng cho project đó mà không có version.
Rất nhiều công đoạn phải không các bạn? Cụ thể như thế nào? Chúng ta sẽ cùng nhau tìm hiểu trong bài viết này các bạn nhé!
Đầu tiên, mình sẽ tạo một Maven parent project với kiểu packing là pom.
Mình đã hướng dẫn các bạn cách Tạo mới Maven project trong Eclipse rồi, các bạn cũng làm theo hướng dẫn của bài viết này nhưng có một lưu ý là ở cửa sổ New Maven project, các bạn chọn kiểu Packing là pom nhé.
Kết quả của mình như sau:
Nội dung của tập tin pom.xml đơn giản như sau:
1 2 3 4 5 6 7 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>com.huongdanjava</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> </project> |
Như các bạn thấy, thẻ packing có giá trị là pom.
Tiếp theo mình sẽ tạo một Maven project để làm ví dụ rồi khai báo parent project trỏ tới project mà mình vừa tạo ở trên.
Các bạn có thể tạo một Maven project như bình thường, project của mình như sau:
Thông thường, chúng ta sẽ để project này bên trong parent project của ứng dụng.
Bây giờ, mình sẽ khai báo parent project cho project này trong tập tin pom.xml như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<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>com.huongdanjava</groupId> <artifactId>maven-example</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>com.huongdanjava</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> </project> |
Khai báo <relativePath> trong khai báo parent project trên nhằm mục đích nếu trong trường hợp parent project của chúng ta chưa có trong local hoặc remote repository thì project của chúng ta sẽ tự động lấy parent project theo relative path với đường dẫn được khai báo trong thẻ <relativePath> này.
Ở đây, các bạn cũng có thể remove khai báo <groupId> và <version> của project để sử dụng <groupId> và <version> của parent project như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<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> <artifactId>maven-example</artifactId> <parent> <groupId>com.huongdanjava</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> </project> |
Trong parent project, chúng ta sẽ khai báo project này là một module của ứng dụng như sau:
1 2 3 4 5 6 7 8 9 10 11 12 |
<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>com.huongdanjava</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>maven-example</module> </modules> </project> |
Bây giờ, giả sử ứng dụng của mình cần sử dụng MySQL dependency thì mình sẽ khai báo dependency này trong parent project như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<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>com.huongdanjava</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>maven-example</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> </dependencies> </dependencyManagement> </project> |
rồi trong project maven-example, mình sẽ khai báo MySQL dependency như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<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> <artifactId>maven-example</artifactId> <parent> <groupId>com.huongdanjava</groupId> <artifactId>maven-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> </project> |
Như các bạn thấy, trong project maven-example, mình đã khai báo sử dụng MySQL dependency nhưng mà không cần phải khai báo version của nó nữa. Sau này, nếu các bạn muốn nâng cấp version của MySQL dependency thì các bạn chỉ cần thay đổi trong parent project, những project sử dụng parent project này sẽ tự động thay đổi theo.