Tại sao không ai sử dụng make cho Java?


162

Gần như mọi dự án Java mà tôi đã thấy hoặc sử dụng Maven hoặc Ant. Chúng là những công cụ tốt và tôi nghĩ rằng bất kỳ dự án nào cũng có thể sử dụng chúng. Nhưng những gì từng xảy ra để làm ? Nó được sử dụng cho nhiều dự án phi Java và có thể dễ dàng xử lý Java. Chắc chắn bạn phải tải xuống make.exe nếu bạn sử dụng Windows, nhưng Ant và Maven cũng không đi kèm với JDK.

Có một số lỗ hổng cơ bản với make khi được sử dụng với Java không? Có phải chỉ vì Ant và Maven được viết bằng Java?


37
Nếu bạn di chuyển công cụ xung quanh và làm nhiều việc hơn là chỉ gọi trình biên dịch (và thậm chí sau đó), thì công cụ dành riêng cho nền tảng sẽ rất khó xử lý make. Và có một tệp tạo tệp chỉ hoạt động trên một hệ thống không phù hợp với ngôn ngữ đa nền tảng.
Joey

Bên cạnh đó, Gradle là một người chơi mới trong không gian Java, cũng như Gant (ở mức độ thấp hơn). Maven hoặc Ant là một sự phân đôi giả.
Michael Easter

@Michael Easter, sự phân đôi giả sẽ là Maven / Ant so với Make. Sự phân đôi thực sự, nếu tôi đọc đúng bạn, sẽ là Gradle / Maven / Gant / Ant vs. Nhưng thật khó để nói :)
Dan Rosenstark

Câu trả lời:


192

Vấn đề cơ bản với Make và Java là Make hoạt động dựa trên tiền đề rằng bạn đã chỉ định một phụ thuộc và sau đó là một quy tắc để giải quyết sự phụ thuộc đó.

Với C cơ bản, thường là "để chuyển đổi tệp main.c thành tệp main.o, hãy chạy" cc main.c ".

Bạn có thể làm điều đó trong java, nhưng bạn nhanh chóng học được điều gì đó.

Chủ yếu là trình biên dịch javac khởi động chậm.

Sự khác biệt giữa:

javac Main.java
javac This.java
javac That.java
javac Other.java

javac Main.java This.java That.java Other.java

là đêm và ngày.

Làm trầm trọng thêm với hàng trăm lớp học, và nó trở nên không thể kiểm soát được.

Sau đó, bạn kết hợp điều đó với thực tế là java có xu hướng được tổ chức thành các nhóm tệp trong thư mục, so với C và các tệp khác có xu hướng hướng đến một cấu trúc phẳng hơn. Make không có nhiều hỗ trợ trực tiếp để làm việc với hệ thống phân cấp của các tệp.

Make cũng không tốt lắm trong việc xác định những tập tin nào đã lỗi thời, ở cấp độ bộ sưu tập.

Với Ant, nó sẽ duyệt và tổng hợp tất cả các tệp đã lỗi thời và sau đó biên dịch chúng trong một lần. Make sẽ chỉ đơn giản gọi trình biên dịch java trên mỗi tệp riêng lẻ. Việc KHÔNG làm điều này đòi hỏi phải có đủ công cụ bên ngoài để thực sự cho thấy Make không hoàn toàn phù hợp với nhiệm vụ.

Đó là lý do tại sao các lựa chọn thay thế như Ant và Maven tăng lên.


6
Vì vậy, để sử dụng make trong một dự án Java khổng lồ, có cần phải duy trì một danh sách tất cả các tệp .java đã thay đổi và sau đó gọi javac ở cuối không? Điều đó nghe có vẻ ít lý tưởng với tôi. Đó là câu trả lời tốt nhất mà tôi đã thấy cho đến nay.
dùng1

32
Tôi thích điều này. Cần thiết bạn đang nói Ant là cần thiết để giải quyết thực tế là javac quá chậm.
cmcginty

25
Không. Javac không chậm nếu bạn sử dụng nó vì nó được thiết kế để sử dụng. Nó chỉ chậm nếu bạn sử dụng nó để biên dịch một tệp tại một thời điểm.
Stephen C

7
@Casey javac không quá chậm. JVM quá chậm để bắt đầu.
Thorbjørn Ravn Andersen

7
GNU Make ít nhất có $?biến tự động mở rộng thành "tất cả các điều kiện tiên quyết mới hơn mục tiêu". Ngoài ra còn có tính năng của các quy tắc mẫu với nhiều mục tiêu sẽ chỉ chạy công thức một lần để cập nhật tất cả các .classtệp. Cùng với đó là một số sử dụng thông minh của tập tin / các chức năng văn bản thích $(wildcard), $(shell), $(eval)và bạn có thể dạy makefile của bạn để khám phá xây dựng các mục tiêu rải rác trên bố trí thư mục của bạn.
Tanzania87

33

makeChương trình đáng kính xử lý các ngôn ngữ được biên dịch riêng như C và C ++ một cách hợp lý. Bạn biên dịch một mô-đun, nó sử dụng #includeđể kéo văn bản của các tệp bao gồm khác và ghi một tệp đối tượng làm đầu ra. Trình biên dịch rất giống một hệ thống một lần, với một bước liên kết riêng để liên kết các tệp đối tượng thành một tệp nhị phân thực thi.

Tuy nhiên, trong Java, trình biên dịch phải thực sự biên dịch các lớp khác mà bạn nhập với import. Mặc dù có thể viết một cái gì đó tạo ra tất cả các phụ thuộc cần thiết từ mã nguồn Java, do đó makesẽ xây dựng các lớp theo đúng thứ tự một lần, nhưng điều này vẫn không xử lý các trường hợp như phụ thuộc vòng tròn.

Trình biên dịch Java cũng có thể hiệu quả hơn bằng cách lưu trữ các kết quả đã biên dịch của các lớp khác trong khi biên dịch các lớp tiếp theo phụ thuộc vào kết quả của các lớp đã được biên dịch. Loại đánh giá phụ thuộc tự động này là không thực sự có thể với makemột mình.


7
Điều này có vẻ giống như câu trả lời make so với javac hơn là câu trả lời make so với ant / maven. Dựa trên câu trả lời của bạn, tại sao ai đó không thể sử dụng make + javac (cung cấp cho javac toàn bộ gói hoặc "mô-đun" tại một thời điểm, vì vậy các phụ thuộc vòng tròn được ẩn khỏi make)? Kiến hoặc maven sẽ cung cấp bất kỳ lợi ích nào cho phương pháp đó?
Laurence Gonsalves

1
@Laurence: Bạn có thể cung cấp cho javac toàn bộ gói cùng một lúc, nhưng sau đó nó sẽ biên dịch lại mọi thứ trong gói đó (vì đó là những gì bạn bảo nó làm). Đúng là trình biên dịch java khá nhanh, nhưng thậm chí còn nhanh hơn nếu bạn để nó xác định lớp nào là tối thiểu cần thiết để biên dịch lại sau khi thay đổi thứ gì đó.
Greg Hewgill

Bạn đang đề cập đến việc bảo javac chỉ biên dịch lớp "chính" của bạn, và sau đó để nó tự động xây dựng nội dung mà nó phụ thuộc? Lần cuối tôi đã kiểm tra (phải thừa nhận, có lẽ là trong 1.4) không đáng tin lắm. -Xdepend đã tốt hơn một chút (nhưng chậm hơn và vẫn bị hỏng) và họ đã xóa cờ đó trong 1.3.
Laurence Gonsalves

4
Ngoài ra, điều này vẫn không giải thích được tại sao tôi sử dụng Ant hoặc Maven thay vì chỉ javac ...
Laurence Gonsalves

28

Câu hỏi đặt ra là dựa trên một giả định không chính xác: một số không tầm thường của các nhà phát triển làm sử dụng make. Xem Công cụ xây dựng Java: Ant vs. Maven . Về lý do tại sao một nhà phát triển sẽ không sử dụng make: nhiều nhà phát triển chưa bao giờ sử dụng makehoặc sử dụng nó và ghét nó với ngọn lửa đốt nóng hơn cả ngàn mặt trời. Như vậy, họ sử dụng các công cụ thay thế.


10
Chúng tôi sử dụng nó, và lửa nóng hơn một ngàn lẻ một mặt trời.
reccles

4
@recère: Có phải chỉ là hận thù đối với kỹ thuật xây dựng hoặc làm cho chính nó? Làm thế nào Ant, Maven, hoặc một cái gì khác sẽ tốt hơn (nghĩa là tạo ra một công cụ tồi cho lớp của nó)?
dùng1

5
@ User1 makecó rất nhiều "tính năng" có thể có ý nghĩa khi được viết, nhưng bây giờ giống như lỗi hơn, ví dụ: bạn phải sử dụng ký tự TAB, không phải khoảng trắng, ở một số vị trí nhất định. Điều đó có lẽ không làm phiền những người thực sự có kinh nghiệm make, nhưng nó khiến những người khác trong chúng ta thất vọng.
Hank Gay

4
@HankGuy: hãy để biên tập viên của bạn lo lắng về chi tiết đó. Nếu trình chỉnh sửa của bạn không thể xử lý chính xác tab <-> cài đặt không gian, hãy lấy trình chỉnh sửa mới và bạn sẽ hạnh phúc hơn nhiều. Nhưng bạn đã đúng khi nói rằng nhiều tính năng đã lỗi thời giống như cách xử lý các phụ thuộc động ( make dependbất kỳ ai?)
D.Shawley

3
@ User1 Đó là quy mô của dự án chúng tôi đang xây dựng. Chúng tôi có một nhân viên toàn thời gian duy trì các tập tin tạo và xây dựng các phụ thuộc. Có sử dụng maven tôi thấy nó dễ quản lý hơn. Bây giờ đã nói rằng maven cũng không hoàn hảo. Không có gì đáng giận hơn là cố gắng tìm ra cài đặt XML nào là cần thiết để thực hiện một bản dựng hơi khác so với thiết lập được quy định.
reccles

28

Trên thực tế, make có thể xử lý việc biên dịch lại trong một lệnh của tất cả các tệp java đã lỗi thời. Thay đổi dòng đầu tiên nếu bạn không muốn biên dịch tất cả các tệp trong thư mục hoặc muốn một thứ tự cụ thể ...

JAVA_FILES:=$(wildcard *.java)
#
# the rest is independent of the directory
#
JAVA_CLASSES:=$(patsubst %.java,%.class,$(JAVA_FILES))

.PHONY: classes
LIST:=

classes: $(JAVA_CLASSES)
        if [ ! -z "$(LIST)" ] ; then \
                javac $(LIST) ; \
        fi

$(JAVA_CLASSES) : %.class : %.java
        $(eval LIST+=$$<)

4
Đẹp! Tôi đang tìm kiếm một cái gì đó như thế. Không cần sử dụng một công cụ xây dựng khác nhau cho mọi ngôn ngữ khi cổ điển phổ quát hoạt động tốt. Cảm ơn!
rsp

17

Tất cả các câu trả lời khác về giá trị kỹ thuật của mỗi là đúng. AntMavencó thể phù hợp với Java hơn là tạo ra, hoặc như Hank Gay chỉ ra, họ có thể không :)

Tuy nhiên, bạn đã hỏi liệu Ant và Maven có được viết bằng Java không. Mặc dù trên StackOverflow, chúng tôi không xem xét những suy nghĩ như vậy (đóng! Không liên quan đến lập trình! V.v.), KHÓA HỌC LÀ MỘT PHẦN CỦA ĐIỀU ĐÓ. Trên đường ray, chúng tôi sử dụng Rake, C dudes sử dụng make và trong Java, chúng tôi sử dụng Ant và Maven. Mặc dù sự thật là các nhà phát triển Ant hoặc Maven sẽ chăm sóc nhà phát triển Java có lẽ tốt hơn những người khác, nhưng cũng có một câu hỏi khác: bạn viết các tác vụ Ant trong cái gì? Java. Nếu bạn là nhà phát triển Java, điều đó thật phù hợp.

Vì vậy, yeah, một phần của nó là sử dụng các công cụ được viết bằng ngôn ngữ bạn đang sử dụng.


7
Ant cũng phát sinh tại thời điểm cộng đồng Java say mê XML. (Điều đó không có nghĩa là XML không có chỗ.)
Laurence Gonsalves

3
@Laurence Gonsalves, điều đó rất đúng. Nhưng làm ơn, chúng tôi không nói về những mốt ở đây trên SO :) Tôi đã dạy nhà phát triển Java vào thời điểm đó và MỌI THỨ là XML. Bây giờ nó vẫn là XML, nhưng không ai quan tâm.
Dan Rosenstark

1
Các bình luận dụng cụ là một trong những thú vị. makexuất phát từ nền tảng UNIX nên việc tạo công cụ được thực hiện bằng cách viết các tiện ích nhỏ gọn hữu ích và sắp xếp chúng lại với nhau. Đây là lý do tại sao hầu hết các khâu được thực hiện bằng cách sử dụng các lệnh shell.
D.Shawley

2
@D. Shawley, tất cả đều đúng về makecác dụng cụ Unix nhỏ. GIT là một đứa trẻ của quá trình đó quá. Về lưu ý cá nhân, tôi sẽ không nói nó không tốt hơn. Nhưng đó là một sự thay đổi mô hình lớn đối với các lập trình viên Java. Ant là phụ âm hơn nhiều với cách suy nghĩ của Java.
Dan Rosenstark

12

Ant và sau này Maven được thiết kế để giải quyết một số vấn đề đau đầu do Make(trong khi tạo ra những cái mới trong quá trình) Nó chỉ là sự tiến hóa.

... Ngay sau đó, một số dự án Java nguồn mở đã nhận ra rằng Ant có thể giải quyết các vấn đề họ gặp phải với Makefiles ....

Từ http://ant.apache.org/faq.html#history

Cho dù họ giải quyết bất cứ điều gì hoặc chỉ cần tạo một định dạng bổ sung để tìm hiểu là một chủ đề chủ quan. Sự thật là gần như lịch sử của mọi phát minh mới: Người sáng tạo nói rằng nó giải quyết được rất nhiều vấn đề và người dùng ban đầu nói rằng đó là những đức tính tốt.

Ưu điểm chính của nó là khả năng tích hợp với java.

Tôi đoán một lịch sử tương tự sẽ được rakeví dụ.


4
Điều đó không cụ thể lắm. Maven giải quyết vấn đề đau đầu nào?
Laurence Gonsalves

1
@Gonsalves: Đó là một trong những khía cạnh chủ quan của mọi công nghệ mới, người tạo ra giải pháp thay thế nói rằng nó giải quyết được rất nhiều vấn đề và những người tạo ra công nghệ thay thế nói rằng đó không phải là khuyết điểm mà là đức tính, v.v. Tôi nghĩ trong tình huống cụ thể này là sự tích hợp java và biên dịch chéo ra khỏi hộp
OscarRyz

2
[Đề cập đến chỉnh sửa câu trả lời của bạn, không phải bình luận gần đây nhất của bạn] Điều đó vẫn không giải thích được vấn đề nào đã được giải quyết, chỉ có điều người sáng tạo cho rằng vấn đề đã được giải quyết ...: - / Ấn tượng của tôi là do Ant ban đầu tạo ra là một thay thế đơn giản hơn để thực hiện. Theo thời gian, mọi người thấy rằng có những thứ còn thiếu và vì vậy họ đã thêm các tính năng cho đến khi Ant trở nên phức tạp như sản xuất, nhưng với binutils tích hợp (phụ thuộc rất nhiều vào các công cụ bên ngoài như cp, rm, v.v.), và tất nhiên có cú pháp XML.
Laurence Gonsalves

2
Đúng, nhưng khi người giỏi nhất thay thế mới có thể nói là "điều này giải quyết vấn đề của người cũ" mà không thực sự nói những vấn đề đó không hữu ích cho những người đang cân nhắc lựa chọn sử dụng. Liệu Ant có giải quyết được vấn đề mà tôi gặp phải hay không, hay nó giải quyết những điều tôi không coi là vấn đề trong khi giới thiệu những vấn đề mới cho tôi?
Laurence Gonsalves

9

Một trong những vấn đề chính được giải quyết bởi Maven (và thiết lập Ant hỗ trợ Ivy) qua thực hiện là độ phân giải phụ thuộc tự động và tải xuống các lọ phụ thuộc của bạn.


6

Tôi nghĩ rằng lời giải thích rất có thể là một số yếu tố không khuyến khích việc sử dụng make trong cộng đồng Java trong một khoảng thời gian quan trọng (cuối những năm 1990):

  1. Do Java bao gồm nhiều nền tảng, nên các lập trình viên Java nói chung không thành thạo các công cụ Unix như các lập trình viên thường bị giới hạn trong môi trường Unix (ví dụ, các lập trình viên C và Perl). Lưu ý rằng đây là CHUNG. Không còn nghi ngờ gì nữa, các lập trình viên Java có năng khiếu và hiểu biết sâu sắc về Unix.
  2. Do đó, họ ít lão luyện hơn và không biết cách sử dụng hiệu quả.
  3. Mặc dù có thể viết một Makefile ngắn và đơn giản để biên dịch Java một cách hiệu quả, nhưng cần phải có sự chăm sóc thêm để làm điều đó theo cách độc lập với nền tảng.
  4. Do đó, có một sự thèm ăn cho một công cụ xây dựng độc lập với nền tảng.
  5. Chính trong môi trường này, Ant và Maven sau đó đã được tạo ra.

Nói tóm lại, trong khi chắc chắn có thể được sử dụng cho các dự án Java, đã có một cơ hội để biến nó thành công cụ xây dựng Java thực tế. Thời khắc đó đã qua.


5

Làm cho các kịch bản có xu hướng phụ thuộc vào nền tảng. Java được coi là độc lập nền tảng. Do đó, việc có một hệ thống xây dựng chỉ hoạt động trên một nền tảng cho cơ sở nguồn đa nền tảng là một vấn đề.


5

Câu trả lời ngắn gọn: Bởi vì makekhông tốt. Ngay cả trên mặt trước C, bạn thấy nhiều lựa chọn thay thế xuất hiện.

Câu trả lời dài: makecó một số sai sót khiến nó hầu như không phù hợp để biên dịch C và hoàn toàn không phù hợp để biên dịch Java. Bạn có thể buộc nó biên dịch Java, nếu bạn muốn, nhưng mong đợi gặp vấn đề, một số trong đó không có giải pháp hoặc giải pháp phù hợp. Ở đây có một ít:

Nghị quyết phụ thuộc

makevốn dĩ mong muốn các tệp có sự phụ thuộc giống như cây với nhau, trong đó một tệp là đầu ra của việc xây dựng một số tệp khác. Điều này đã phản tác dụng trong C khi xử lý các tệp tiêu đề. makeyêu cầu một maketệp bao gồm cụ thể được tạo để thể hiện sự phụ thuộc của tệp C vào các tệp tiêu đề của nó, do đó, một thay đổi đối với tệp sau sẽ khiến cho trước được xây dựng lại. Tuy nhiên, vì bản thân tệp C không được tạo lại (chỉ được xây dựng lại), nên thường yêu cầu chỉ định mục tiêu là .PHONY. May mắn thay, GCC hỗ trợ tạo các tệp đó tự động.

Trong Java, sự phụ thuộc có thể là vòng tròn và không có công cụ nào để tự động tạo các phụ thuộc lớp theo makeđịnh dạng. ant's Dependnhiệm vụ có thể, thay vào đó, đọc các tập tin lớp trực tiếp, xác định các lớp học nó nhập khẩu, và xóa các tập tin lớp nếu có của họ hết hạn. Không có điều này, bất kỳ sự phụ thuộc không tầm thường nào cũng có thể dẫn đến việc bạn bị buộc phải sử dụng các bản dựng sạch lặp đi lặp lại, loại bỏ bất kỳ lợi thế nào khi sử dụng công cụ xây dựng.

Dấu cách trong tên tệp

Mặc dù cả Java và C đều không khuyến khích sử dụng khoảng trắng trong tên tệp mã nguồn của bạn, nhưng makeđiều này có thể là vấn đề ngay cả khi khoảng trắng nằm trong đường dẫn tệp. Xem xét, ví dụ, nếu mã nguồn của bạn tồn tại C:\My Documents\My Code\program\src. Điều này sẽ đủ để phá vỡ make. Điều này là do makecoi tên tập tin là chuỗi. antcoi đường dẫn là đối tượng đặc biệt.

Quét tập tin để xây dựng

makeyêu cầu thiết lập rõ ràng những tập tin nào sẽ được xây dựng cho từng mục tiêu. antcho phép chỉ định thư mục được quét tự động cho các tệp nguồn. Nó có vẻ như là một tiện lợi nhỏ, nhưng hãy xem xét rằng trong Java, mỗi lớp mới yêu cầu một tệp mới. Thêm tệp vào dự án có thể trở thành một rắc rối lớn nhanh chóng.

Và vấn đề lớn nhất với make:

làm cho phụ thuộc POSIX

Phương châm của Java là "biên dịch một lần chạy ở mọi nơi". Nhưng việc hạn chế biên dịch đó sang các hệ thống dựa trên POSIX, trong đó hỗ trợ Java thực sự là tồi tệ nhất, không phải là ý định.

Xây dựng quy tắc về makecơ bản là các bashtập lệnh nhỏ . Mặc dù có một cổng của makeWindows, để nó hoạt động chính xác, nó phải được đóng gói với một cổng bash, bao gồm một lớp mô phỏng POSIX cho hệ thống tệp.

Điều này có hai loại:

  1. MSYS trong đó cố gắng giới hạn bản dịch POSIX thành đường dẫn tệp và do đó có thể có các vấn đề khó chịu khi chạy các công cụ bên ngoài không được thực hiện đặc biệt cho nó.

  2. cygwincung cấp một mô phỏng POSIX hoàn chỉnh. Tuy nhiên, các chương trình kết quả có xu hướng vẫn dựa vào lớp mô phỏng đó.

Vì lý do đó, trên Windows, công cụ xây dựng tiêu chuẩn thậm chí không hoàn maketoàn, mà thay vào MSBuildđó, đây cũng là một công cụ dựa trên XML, gần hơn về nguyên tắc ant.

Ngược lại, antđược xây dựng bằng Java, có thể chạy ở mọi nơi và chứa các công cụ nội bộ, được gọi là "tác vụ", để thao tác các tệp và thực thi các lệnh theo cách độc lập với nền tảng. Nó đủ linh hoạt để bạn thực sự có thể dễ dàng xây dựng chương trình C trong Windows anthơn là sử dụng make.

Và một trong những thứ yếu cuối cùng:

Ngay cả các chương trình C không sử dụng thực hiện tự nhiên

Ban đầu bạn có thể không nhận thấy điều này, nhưng các chương trình C thường không được cung cấp với a Makefile. Chúng được vận chuyển với một CMakeLists.txt, hoặc một bashkịch bản cấu hình, tạo ra thực tế Makefile. Ngược lại, nguồn của một chương trình Java được xây dựng bằng cách sử dụng antđược cung cấp với một anttập lệnh được xây dựng sẵn. A Makefilelà sản phẩm của các công cụ khác - Đó là bao nhiêu makekhông phù hợp để tự mình trở thành một công cụ xây dựng. antlà độc lập và xử lý mọi thứ bạn cần cho quá trình xây dựng Java của bạn, không có bất kỳ yêu cầu hoặc phụ thuộc bổ sung nào.

Khi bạn chạy anttrên bất kỳ nền tảng nào, nó chỉ hoạt động (tm). Bạn không thể có được điều đó với make. Đó là nền tảng và cấu hình vô cùng phụ thuộc.


4

Trừ khi tôi không là ai, giả sử không có ai (mis) sử dụng make cho java là sai.

"Quản lý dự án với GNU Make" (có sẵn trong GFDL) chứa một chương hoàn chỉnh dành riêng cho việc sử dụng makevới các dự án java.

Vì nó chứa một danh sách dài (và hy vọng công bằng) về những ưu và nhược điểm của việc sử dụng make thay vì các công cụ khác mà bạn có thể muốn xem ở đó. (xem: http://oreilly.com/catalog/make3/book/ )


Đây có phải là một bản tóm tắt chính xác? làm cho (trong các hương vị khác nhau) có thể sử dụng được cho Java, nhưng với một số nỗi đau. AntMaven (và jmake ?) Làm một số điều đặc biệt mà Java cần / thích, để làm cho các dự án Java nhanh hơn và dễ dàng hơn để xây dựng. Chúng cũng có thể được sử dụng cho một quy trình xây dựng độc lập với nền tảng hơn cho các dự án không phải là Java, nhưng được điều chỉnh nhiều hơn cho Java.
Phil Perry

3

Ant là một cải tiến định hướng cấu hình XML so với Makefiles và Maven là một cải tiến công cụ xây dựng phụ thuộc so với Ant. Một số dự án sử dụng cả ba. Tôi nghĩ rằng các dự án JDK đã từng sử dụng hỗn hợp các tệp tạo tệp và kiến.


1

Một lý do lớn là cả Ant và Maven (và hầu hết các công cụ SCM, CI và IDE nhắm mục tiêu java) đều được viết bằng java bởi / cho các nhà phát triển java. Điều này giúp việc tích hợp vào môi trường phát triển của bạn trở nên đơn giản hơn và cho phép các công cụ khác như máy chủ IDE và CI tích hợp các phần của thư viện ant / maven trong cơ sở hạ tầng xây dựng / triển khai.


1

Đã có lần tôi làm việc với một dự án Java sử dụng gmake. Hồi ức của tôi là mơ hồ nhưng IIRC chúng tôi đã có một thời gian khó khăn để xử lý cấu trúc thư mục gói mà javac mong đợi. Tôi cũng nhớ rằng việc xây dựng các tệp JAR là một rắc rối trừ khi bạn có một cái gì đó tầm thường.


1

ApacheAnt không phải là bất cứ thứ gì như Make. Make là về việc mô tả sự phụ thuộc giữa các tệp và cách xây dựng tệp. Ant là về sự phụ thuộc giữa các "nhiệm vụ", và thực sự là một cách để dán các tập lệnh xây dựng lại với nhau.

nó có thể giúp bạn AntVsMake


Tôi thực sự muốn biết về lý do của các downvote.
hagello

0

Ant và Maven tiếp cận biểu đồ phụ thuộc xây dựng và quản lý nó theo quan điểm 'hiện đại' hơn ... Nhưng như Oscar nói, họ đã tạo ra vấn đề của riêng mình trong khi cố gắng giải quyết các vấn đề cũ.


0

Tôi chưa bao giờ sử dụng GNU Make cho các dự án Java, nhưng tôi đã từng sử dụng jmk . Đáng buồn thay, nó đã không được cập nhật từ năm 2002.

Nó có một số chức năng dành riêng cho Java nhưng đủ nhỏ để đưa vào tarball nguồn của bạn mà không làm tăng đáng kể kích thước của nó.

Ngày nay tôi chỉ giả sử bất kỳ nhà phát triển Java nào tôi chia sẻ mã đã cài đặt Ant.

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.