Tại sao Apache có hai công cụ riêng biệt để xây dựng và quản lý phụ thuộc?


9

Apache có hai công cụ riêng biệt:

Họ dường như cả hai điền vào cùng một ngách. Tôi có hai câu hỏi:

  1. Điểm nổi bật của sự khác biệt chính giữa hai công cụ là gì?
    • Tôi chắc chắn một bài viết thực sự dài có thể được viết về sự khác biệt giữa hai điều này, tôi không tìm kiếm nhiều chi tiết đó, tôi cũng không tìm kiếm một lập luận chủ quan cho việc chọn cái khác.
  2. Lịch sử lập trình - làm thế nào mà Apache phát triển để tạo ra hai bộ công cụ hoàn toàn riêng biệt mà cuối cùng lại có mục đích tương tự nhau như vậy?

Câu trả lời:


7

Điểm nổi bật của sự khác biệt chính giữa hai công cụ là gì?

  • Cơ cấu dự án

    • Maven thích một cấu trúc dự án cụ thể: người ta phải cam kết thực hiện mọi thứ The Maven Way. Maven đi kèm với các bước xây dựng chung đã được cấu hình trong một gốc pom.xmlthường được kế thừa bởi tất cả các dự án khác pom.xml.

    • Ant + Ivy có kết thúc mở hơn: trong khi nó có thể làm được rất nhiều, chỉ có một vài yêu cầu cơ bản về cấu trúc dự án hoặc sử dụng tập lệnh. Không có các nhiệm vụ, mục tiêu hoặc quy trình xây dựng được xác định trước. Mỗi cái build.xmllà một bản rõ ràng (trừ khi bao gồm một tập lệnh khác, tất nhiên).

  • Sự định hướng

    • Maven là mục tiêu định hướng. Bạn không nói "thực hiện mục tiêu xây dựng này" mà bạn yêu cầu nó "xây dựng" hoặc "triển khai" và Maven làm bất cứ điều gì cần làm để đạt được điều đó: bạn nói những gì bạn muốn làm.

    • Ant + Ivy là định hướng nhiệm vụ . Mỗi nhiệm vụ được xác định thực hiện và tùy chỉnh. Bạn nói với nó làm thế nào để làm những gì bạn muốn.

  • Quản lý phụ thuộc

    • Maven nổi tiếng với việc tự động xử lý các phụ thuộc. Nó sẽ tải xuống các phiên bản chính xác trong khi xây dựng mà không có bất kỳ tương tác người dùng nào miễn là các URL của kho lưu trữ được cấu hình đúng trước thời hạn.

    • Ant không có quản lý phụ thuộc ngoại trừ "Java Classpath." Ivy bổ sung quản lý phụ thuộc hơi tẻ nhạt hơn Maven nhưng vẫn tự động. Chìa khóa ở đây là bạn có thể chọn không quản lý phụ thuộc (ví dụ: "các tệp được bao gồm trong bản phân phối của tôi hoặc được kiểm tra trong kiểm soát nguồn") hoặc bạn có thể thuê ngoài nó thông qua Ivy. Sự lựa chọn đó có nghĩa là linh hoạt hơn để đáp ứng nhu cầu dự án.

  • Dễ sử dụng

    • Maven là (về lý thuyết) dễ sử dụng. Bất kỳ nhà phát triển nào cũng có thể chọn một dự án Maven và ngay lập tức biết tất cả các tài nguyên của dự án được đặt ở đâu và chúng dùng để làm gì: điều này là do điểm đầu tiên về việc Maven có cách làm việc cụ thể.

    • Ant + Ivy có thể có một đường cong học tập dốc hơn vì mỗi dự án thể khác nhau. Các dự án khác nhau có thể có những cách khác nhau để thực hiện cùng một mục tiêu.

  • Khả năng mở rộng

    • Maven cho phép viết các plugin và thay đổi quá trình xây dựng của nó. Tuy nhiên, nó đi ra khỏi hộp với một gốc rễ pom.xmlđẩy các nhà phát triển về phía các quy trình xây dựng được xác định trước. Mục tiêu mới hoặc các bước xây dựng đòi hỏi phải suy nghĩ cẩn thận và nỗ lực thêm để đưa vào quá trình xây dựng.

    • Ant + Ivy cũng cho phép viết plugin và các tác vụ mới: làm như vậy khá dễ dàng và người ta có thể tích hợp một tác vụ mới với nỗ lực tối thiểu. Không có mục tiêu hoặc mục tiêu được xác định trước để xáo trộn xung quanh hoặc để tích hợp nhiệm vụ mới của một người vào.

Làm thế nào mà chuyện xảy ra khi Apache phát triển để tạo ra hai bộ công cụ hoàn toàn riêng biệt mà cuối cùng lại có mục đích tương tự nhau như vậy?

Điều đầu tiên cần hiểu là dự án Apache không gì khác hơn là một chiếc ô mà theo đó các dự án độc lập, riêng biệt hoạt động. Các nhóm khác nhau làm việc trên các dự án khác nhau. Mặc dù các nhà phát triển cá nhân có thể làm việc trên nhiều dự án, nhưng không có một số lộ trình tổng thể kết hợp Ant, Ivy và Maven.

Kiến đến trước. Nó được thiết kế để tương đương với Java của Make. Mặc dù Make có thể xây dựng các dự án Java, nhưng thật tẻ nhạt: Make tồn tại để biên dịch một loạt các đơn vị biên dịch riêng biệt sau đó liên kết chúng. Cách Java là javacbiên dịch mọi thứ trong một lần và cái mà chúng ta gọi là "liên kết" thực sự xảy ra trong ruột của JVM khi chạy. Make không phải là công cụ phù hợp cho công việc: Makefile cho Java về cơ bản là một hoặc hai mục tiêu ( javac, jar).

Ant đã thêm một chút cấu trúc lên trên Make, nhưng về cơ bản không làm thay đổi quy trình.

Sau một thời gian, cộng đồng nhận ra rằng việc săn lùng các tệp jar không thú vị. Hơn nữa, không có cách tiêu chuẩn để soạn dự án. Không có tính nhất quán, phát triển Java là một mớ hỗn độn. Maven được thiết kế để giải quyết những vấn đề này: nó sẽ mang lại một cấu trúc dự án chung và tự động hóa việc tìm kiếm các tệp jar.

Tuy nhiên, Ant vẫn thực sự hữu ích. Một số dự án chỉ cho vay nhiều hơn vào bản chất đặc biệt của các quy trình của Ant. Một số dự án không biên dịch mã. Một số dự án đã cũ và không ai có thể "nâng cấp" chúng lên Maven.

Cùng với Ivy: nó bổ sung quản lý phụ thuộc vào Ant, mang lại cho các dự án tốt nhất của cả hai thế giới. Bạn có thể giữ các tập lệnh kế thừa của mình hoặc môi trường tùy chỉnh cao, nhưng có được tính năng quan trọng nhất của Maven: quản lý phụ thuộc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.