Maven làm gì, trên lý thuyết và trong thực tế? Khi nào nó có giá trị để sử dụng nó? [đóng cửa]


156

Tôi sắp bắt đầu một dự án Java chỉ để thực hành. Tôi đã đọc về Maven, nhưng tôi thực sự không hiểu khi nào nó được sử dụng.

Bạn có thể cho tôi một số lời khuyên thiết thực? Maven có giúp được gì nhiều không? Maven thực sự làm gì cho dự án của tôi?


Hej, hãy xem câu hỏi này của tôi về Maven, Spring và Roo. Tôi đã sử dụng Maven rất nhiều khi làm việc với Eclipse và để tăng tốc thời gian phát triển. Nhưng có một số vấn đề. Tôi nghĩ bạn cần hiểu hệ thống chú thích Java cùng với Maven. Nhưng hãy xem câu hỏi tôi đã liên kết ..
mm24

@ArtB đưa ra một lời giải thích tốt về Maven là gì. Tuy nhiên, như tôi nói trong nhận xét của mình về câu trả lời của anh ấy, tôi không nghĩ bạn nên sử dụng nó. Nếu bạn muốn một công cụ xây dựng, hãy sử dụng Gradle. Tải về nó, cài đặt nó, sau đó trong dự án của bạn tạo một tệp có tên build.gradlechỉ chứa một dòng nói apply plugin: 'java'. Giả sử mã nguồn của bạn ở vị trí thông thường ( src/main/java, kiểm tra đơn vị src/test/java), bây giờ bạn có thể xây dựng, kiểm tra và đóng gói mã của mình bằng cách nói gradle build. Dễ dàng!
Tom Anderson

2
Để sử dụng Gradle, bạn sẽ cần học Groovy và bạn chắc chắn sẽ bắt gặp dự án bằng Maven vì vậy nó vẫn đáng để học. Ngoài ra, hiểu Maven sẽ giúp hiểu các công cụ khác xuất hiện sau đó dễ dàng hơn.
Sled

Maven phải làm gì với các chú thích Java?
Sled

1
+1 cho Gradle, không chỉ gần nhà của các nhà phát triển java, nó có thể sử dụng lại các tạo phẩm maven và nó có thể tạo ra các bản dựng không chuẩn dễ dàng stackoverflow.com/questions/1163173/
Kalpesh Soni

Câu trả lời:


182

Những gì nó làm

Maven là một "công cụ quản lý xây dựng", nó dùng để xác định cách các .javatệp của bạn được biên dịch .class, đóng gói thành .jar( .warhoặc .ear) tệp, (trước / bài) được xử lý bằng các công cụ, quản lý CLASSPATHvà tất cả các loại nhiệm vụ khác được yêu cầu xây dựng dự án của bạn. Nó tương tự như Apache Ant hoặc Gradle hoặc Makefiles trong C / C ++, nhưng nó cố gắng hoàn toàn khép kín trong đó mà bạn không cần bất kỳ công cụ hoặc tập lệnh bổ sung nào bằng cách kết hợp các tác vụ phổ biến khác như tải xuống và cài đặt các thư viện cần thiết, v.v.

Nó cũng được thiết kế xoay quanh chủ đề "xây dựng tính di động", do đó bạn không gặp vấn đề vì có cùng mã với cùng một bản dựng hoạt động trên một máy tính nhưng không phải trên một máy tính khác (đây là vấn đề đã biết, chúng tôi có VM của Windows 98 máy vì chúng tôi không thể nhận được một số ứng dụng Delphi của chúng tôi biên dịch ở bất kỳ nơi nào khác). Do đó, đây cũng là cách tốt nhất để thực hiện dự án giữa những người sử dụng các IDE khác nhau vì các tập lệnh Ant do IDE tạo ra rất khó nhập vào các IDE khác, nhưng tất cả các IDE hiện nay đều hiểu và hỗ trợ Maven ( IntelliJ , EclipseNetBeans ). Ngay cả khi bạn không thích Maven, cuối cùng nó cũng là điểm tham chiếu cho tất cả các công cụ xây dựng hiện đại khác.

Tại sao bạn nên sử dụng nó

Có ba điều về Maven rất hay.

  1. Maven sẽ (sau khi bạn khai báo những thư mục nào bạn đang sử dụng) tải xuống tất cả các thư viện bạn sử dụng các thư viện mà họ sử dụng cho bạn một cách tự động. Điều này là rất tốt, và làm cho việc đối phó với rất nhiều thư viện dễ dàng một cách lố bịch. Điều này cho phép bạn tránh "địa ngục phụ thuộc" . Nó tương tự như Ivy Ant của Ivy .

  2. Nó sử dụng " Quy ước về cấu hình " để theo mặc định, bạn không cần xác định các tác vụ bạn muốn làm. Bạn không cần phải viết một bước "biên dịch", "kiểm tra", "gói" hoặc "sạch" như bạn sẽ phải làm trong Ant hoặc Makefile. Chỉ cần đặt các tập tin vào những nơi mà Maven mong đợi chúng và nó sẽ hoạt động được với con dơi.

  3. Maven cũng có rất nhiều trình cắm đẹp mà bạn có thể cài đặt sẽ xử lý nhiều tác vụ thông thường từ việc tạo các lớp Java từ lược đồ XSD bằng JAXB để đo mức độ bao phủ thử nghiệm với Cobertura . Chỉ cần thêm chúng vào của bạn pom.xmlvà họ sẽ tích hợp với mọi thứ khác bạn muốn làm.

Đường cong học tập ban đầu rất dốc, nhưng (gần như) mọi nhà phát triển Java chuyên nghiệp đều sử dụng Maven hoặc mong muốn họ đã làm. Bạn nên sử dụng Maven cho mọi dự án mặc dù đừng ngạc nhiên nếu bạn phải mất một thời gian để làm quen với nó và đôi khi bạn ước mình có thể làm mọi thứ bằng tay, vì học được điều gì đó đôi khi rất đau. Tuy nhiên, một khi bạn thực sự quen với Maven, bạn sẽ thấy rằng việc quản lý bản dựng hầu như không mất thời gian.

Làm thế nào để bắt đầu

Nơi tốt nhất để bắt đầu là " Maven trong 5 phút ". Nó sẽ giúp bạn bắt đầu với một dự án sẵn sàng để bạn mã hóa với tất cả các tệp và thư mục cần thiết được thiết lập (vâng, tôi khuyên bạn nên sử dụng kiểu mẫu khởi động nhanh, ít nhất là lúc đầu).

Sau khi bạn bắt đầu, bạn sẽ muốn hiểu rõ hơn về cách sử dụng công cụ này. Vì " Xây dựng tốt hơn với Maven " là nơi thấu đáo nhất để hiểu được cách thức hoạt động của nó, tuy nhiên, " Maven: The Reference Reference " được cập nhật hơn. Đọc cái đầu tiên để hiểu, nhưng sau đó sử dụng cái thứ hai để tham khảo.


12
Có nhiều nhà phát triển Java chuyên nghiệp không sử dụng Maven và rất vui khi họ không sử dụng; một số trong số này chỉ đơn giản bác bỏ sự phức tạp và tính không linh hoạt của nó và gắn bó với Ant hoặc tương tự, nhưng một số lượng ngày càng tăng là những người đã chuyển sang những người kế vị Maven như Gradle và Buildr. Những người kế nhiệm này kế thừa từ Maven ý tưởng cung cấp một tập hợp các bước xây dựng mạnh mẽ, nhưng làm cho nó dễ dàng hơn để thêm các bước tùy chỉnh. Với sự tồn tại của họ, tôi thực sự không nghĩ rằng có bất kỳ lý do nào để sử dụng Maven cho các dự án mới.
Tom Anderson

5
Luôn có câu hỏi bao nhiêu chi tiết để đưa ra câu trả lời, nhưng nếu bạn là một nhà phát triển Java trung bình mà trong văn phòng của bạn thì đó có thể là Maven hoặc shitty Ant hell (Ant + bash + perl + build máy tính được cấu hình với các đường dẫn ma thuật). Nếu bạn là một trong số ít người may mắn làm việc với các nhà phát triển A + trong một môi trường tốt với quyền tự do lựa chọn thì có những lựa chọn khác (Gradle là một). Nhưng nếu bạn đang làm việc ở một nơi trung bình thì Maven là công cụ tốt nhất không cho phép đồng nghiệp của bạn tự cắt bằng thứ gì đó nhọn.
Sled

4
Tôi không nghĩ bạn phải là nhà phát triển A + để sử dụng Gradle. Tôi không hiểu tại sao một tổ chức có thể nhận nuôi Maven không thể nhận nuôi Gradle. Đúng là Gradle cho phép bạn tự bắn vào chân mình, giống như cách Ant làm, nhưng theo cách mà Maven làm khá khó khăn (và tôi có một bộ sưu tập những cú sút chân của đồng nghiệp để chứng minh điều đó); đó là sự đánh đổi để làm cho nó có thể làm những việc mà Maven làm cho hầu như không thể.
Tom Anderson

4
Về mặt sử dụng một cái gì đó như Gradle và tránh bắn chân, tôi đề xuất một phân loại lập trình viên. Một số lập trình viên sẽ không ngại chỉnh sửa tập lệnh xây dựng và nhận được nhiều thứ đúng hoặc ít hơn. Những người đó là hữu ích. Một số lập trình viên sợ các tập lệnh xây dựng và sẽ không chạm vào chúng. Những người đó ít nhất không gây hại; Tôi đã ở trong một đội gồm 12 người, nơi chỉ có hai chúng tôi dám chạm vào công trình và nó thực sự hoạt động khá tốt. Một số lập trình viên không sợ các tập lệnh xây dựng, nhưng sẽ làm hỏng chúng nếu họ chạm vào chúng. Những người đó nguy hiểm.
Tom Anderson

1
vì vậy nó giống như npm cho Java
KJW

9

Từ tài liệu Sonatype :

Câu trả lời cho câu hỏi này phụ thuộc vào quan điểm của riêng bạn. Đại đa số người dùng Maven sẽ gọi Maven là công cụ xây dựng của Wap, một công cụ được sử dụng để xây dựng các tạo phẩm có thể triển khai từ mã nguồn. Các kỹ sư xây dựng và quản lý dự án có thể coi Maven là một thứ toàn diện hơn: một công cụ quản lý dự án. Sự khác biệt là gì? Một công cụ xây dựng như Ant chỉ tập trung vào tiền xử lý, biên dịch, đóng gói, kiểm tra và phân phối. Một công cụ quản lý dự án như Maven cung cấp một siêu các tính năng được tìm thấy trong một công cụ xây dựng. Ngoài việc cung cấp các khả năng xây dựng, Maven cũng có thể chạy các báo cáo, tạo một trang web và tạo điều kiện giao tiếp giữa các thành viên của một nhóm làm việc.

Tôi thực sự khuyên bạn nên xem tài liệu Sonatype và dành chút thời gian xem các plugin có sẵn để hiểu sức mạnh của Maven.

Rất ngắn gọn, nó hoạt động ở cấp độ khái niệm cao hơn (nói) Ant. Với Ant, bạn sẽ chỉ định tập hợp các tệp và tài nguyên mà bạn muốn xây dựng, sau đó chỉ định cách bạn muốn chúng được kết hợp với nhau và chỉ định thứ tự sẽ xảy ra trong (dọn dẹp / biên dịch / jar). Với Maven, đây là tất cả ngầm. Maven hy vọng sẽ tìm thấy các tệp của bạn ở những nơi cụ thể và sẽ tự động hoạt động với điều đó. Do đó, việc thiết lập một dự án với Maven có thể đơn giản hơn rất nhiều, nhưng bạn phải chơi theo luật của Maven!


Tôi đã không đánh giá thấp nó, nhưng có lẽ những người downvot đã đọc trích dẫn của bạn từ tuyên truyền của Sonatype như một sự chứng thực ngầm cho triết lý "công cụ quản lý dự án" toàn trị của Maven.
Tom Anderson

1
Tôi không cảm thấy rằng bạn đã trả lời câu hỏi OP, thay vào đó bạn chỉ đăng bài tiếp thị ... và điều đó thật kỳ quặc vì "quản lý dự án" nhiều hơn nhiều so với những gì Maven làm nó gây nhầm lẫn nhiều hơn là nó giúp, IMHO.
Sled

2
@Brian Xin lỗi, nếu nhận xét trước đây của tôi nghe có vẻ rực lửa, nhưng hãy để tôi nói lại: Tôi cảm thấy bình luận của bạn chỉ giải thích rõ về Maven nếu bạn đã hiểu Maven là gì, nhưng như một điểm khởi đầu ban đầu thì nó không hữu ích.
Sled

5

Mavenlà một công cụ xây dựng. Cùng với Anthoặc GradleJavacác công cụ để xây dựng.
Nếu bạn là người mới sử dụng Java mặc dù chỉ cần xây dựng bằng IDE của bạn vì Mavenđường cong học tập dốc.


Hỗ trợ IDE cho Maven trong NetBeans là rất tốt, khiến cho quá trình học tập gần như không tồn tại.
Thuyền trưởng Hươu cao 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.