-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local

Hai sự lựa chọn
Để quản lý source code và build một dự án #Java thông thường chúng ta sẽ sử dụng một trong 2 công cụ phổ biến nhất hiện nay đó là #Maven và #Gradle, vậy thì nên dùng cái nào hơn? Theo quan điểm của mình thì bạn đã quen cái nào, thì hãy dùng cái đấy, còn nếu mới bắt đầu thì nên dùng Gradle, vì sao vậy?
Maven
Maven đã được #Apache tạo ra từ năm 2004 và ở thời điểm đó nó thực sự nổi trội hơn #ant hay #ivy nên mình đã lựa chọn #Maven. Với cú pháp #xml dễ hiểu, khả năng quản lý phiên bản source code và các dependency cực tốt đã giải phóng bản thân mình khỏi việc download file jar và cấu hình classpath trong #Eclipse, mà khổ cái là các file #jar nó phụ thuộc lẫn nhau nên cứ phải chạy lên để biết cái nào đang thiếu để download nên việc setup project thực sự là công việc phức tạp. Các plugin và các build lifecycle cũng giúp mình có thêm nhiều lựa chọn để làm điều mình muốn với source code của mình, ví dụ mình gen code từ #xml chẳng hạn, mọi việc rất dễ dàng. Một điểm rất mạnh nữa của maven đó chính là Maven Archetype, nó giúp mình định nghĩa được các project mẫu, từ đó giúp được cho hàng nghìn hàng triệu lập trình viên tiết kiệm được rất nhiều thời gian khởi tạo dự án. Bạn có thể tìm hiểu thêm về maven archetype qua bài viết này nhé.
Gradle
Gradle thì sao nhỉ? 3 năm trở lại đây mình có làm quen với Gradle, và mình thực sự ấn tượng với việc mình có thể tự do tạo ra các task mà mình muốn, đó là thứ mà ngôn ngữ xml và Maven chưa làm được. Nó kiểu thế này:
abstract class GreetingTask extends DefaultTask {
@TaskAction
def greet() {
println 'hello from GreetingTask'
}
}
tasks.register('hello', GreetingTask)
Tuy nhiên việc phải học ngôn ngữ #groovy để cấu hình file build.gradle cũng không dễ chịu lắm, mà không hiểu sao mỉnh rất ghét việc phải nhìn thấy cái file #gradle-wrapper.jar trong project. Ngoài ra 1 điểm trừ nữa là gradle có rất nhiều phiên bản, khi sử dụng phải đọc tài liệu để xem các dự án đang dùng phiên bản nào để setup project trên máy mình, có hôm cũng stress vô cùng về vụ này. Nhưng nói gì thì nói, việc sử dụng 1 ngôn ngữ scripting giúp chúng ta có nhiều lựa chọn để cấu hình, và mình rất thích thú với việc có thể sử dụng vòng lặp hay lệnh rẽ nhánh, thứ mà xml rất khó làm được
Bảng so sánh
# | Tiêu chí | Maven | Gradle |
---|---|---|---|
1 | Ra đời | Sớm hơn | Muộn hơn |
2 | Ngôn ngữ | XML | Groovy, Kotlin |
3 | Hỗ trợ (mạnh nhất) | Java | Java, Kotlin, Android |
4 | Coding convention | Checkstyle | Checkstyle, ktlint, kapt |
5 | Project Template | Archetype | Chưa thấy có chính thức |
6 | Custom, tạo mới task | Rất khó hoặc không hỗ trợ | Dễ dàng thực hiện |
7 | Suggest code cấu hình | Có vì là xml (có dtd hoặc schema) | Phụ thuộc vào IDE |
8 | Download dependency | Tải tất cả dependency | Mặc định chỉ tải những cái được khai báo |
9 | Các tiêu chí khác | Cơ bản như nhau | Cơ bản như nhau |
Kết luận
Vậy thì dùng cái gì bây giờ, với mình thì mình dùng cả 2 cho 1 dự án để ai là fan của cái nào thì dùng cái đấy nhưng với những người mới bắt đầu mình nghĩ Gradle là phù hợp, 🙂
Tham khảo
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local