Xây dựng so với biên dịch (Java)


138

Nghĩ rằng câu trả lời cho điều này là khá rõ ràng nhưng ở đây nó đi:

Khi tôi đang thực hiện một dự án nhỏ cho trường học (bằng java), tôi biên dịch nó.

Trên chuồng của tôi, chúng tôi đang sử dụng kiến ​​để xây dựng dự án của chúng tôi.

Tôi nghĩ rằng biên dịch là một tập hợp con của xây dựng. Điều này có đúng không? Sự khác biệt giữa xây dựng và biên dịch là gì?

Liên quan:
sự khác biệt giữa biên dịch và xây dựng là gì?

Câu trả lời:


229

"Xây dựng" là một quy trình bao gồm tất cả các bước cần thiết để tạo "khả năng cung cấp" cho phần mềm của bạn. Trong thế giới Java, điều này thường bao gồm:

  1. Tạo nguồn (đôi khi).
  2. Tổng hợp các nguồn.
  3. Tổng hợp các nguồn kiểm tra.
  4. Thực hiện kiểm tra (kiểm tra đơn vị, kiểm tra tích hợp, vv).
  5. Bao bì (vào bình, chiến tranh, ejb-jar, tai).
  6. Chạy kiểm tra sức khỏe (máy phân tích tĩnh như Checkstyle, Findbugs, PMD, phạm vi kiểm tra, v.v.).
  7. Tạo báo cáo.

Vì vậy, như bạn có thể thấy, biên dịch chỉ là một phần (nhỏ) của bản dựng (và cách tốt nhất là tự động hóa hoàn toàn tất cả các bước với các công cụ như Maven hoặc Ant và để chạy bản dựng liên tục được gọi là Tích hợp liên tục ).


2
Tại sao gọi là "Tích hợp liên tục" thay vì "Xây dựng liên tục"?
Quazi Irfan

@Pascal, Re "chạy bản dựng liên tục" .. "bản dựng " đề cập đến?
Pacerier

4
@Pacerier "bản dựng" đề cập đến tất cả các bước 1.-7.; "liên tục" không có nghĩa là bạn bắt đầu xây dựng tiếp theo ngay sau khi kết thúc lần đầu tiên mà chỉ thay đổi trong dự án.
michelek

và khi nó tạo nguồn như bạn đề cập ở điểm 1 (Tạo nguồn (đôi khi).)
Deepak Gupta

42

Một số câu trả lời tôi thấy ở đây nằm ngoài ngữ cảnh và có ý nghĩa hơn nếu đây là câu hỏi C / C ++.

Phiên bản ngắn:

  • "Biên dịch" đang biến các tệp .java thành các tệp. Class
  • 'Tòa nhà "là một thuật ngữ chung bao gồm biên dịch và các tác vụ khác.

"Xây dựng" là một thuật ngữ chung mô tả quá trình tổng thể bao gồm biên dịch. Ví dụ, quy trình xây dựng có thể bao gồm các công cụ tạo mã Java hoặc tệp tài liệu.

Thường thì sẽ có các giai đoạn bổ sung, như "gói" sẽ lấy tất cả các tệp. Class của bạn và đặt chúng vào một tệp .jar hoặc "sạch" để dọn sạch các tệp. Class và các thư mục tạm thời.


32

Biên dịch là hành động biến mã nguồn thành mã đối tượng.

Liên kết là hành động kết hợp mã đối tượng với các thư viện thành một tệp thực thi thô.

Xây dựng là chuỗi bao gồm biên dịchliên kết , với các tác vụ có thể khác như tạo trình cài đặt.

Nhiều trình biên dịch xử lý bước liên kết tự động sau khi biên dịch mã nguồn.

Sự khác biệt giữa mã biên dịch và mã thực thi là gì?


Một số nhiệm vụ có thể khác: tăng cường (JDO), Javadoc-ing, đóng gói và ký. Ngoài ra, một số môi trường bao gồm chạy thử nghiệm đơn vị / hồi quy tự động như là một phần của "bản dựng".
Bert F

Thông thường, không có bước liên kết khi xây dựng các dự án Java và không có tệp thực thi thô nào được tạo ra. Thay vào đó, các lớp được biên dịch được đóng gói cùng nhau thành một tệp .jar như là một phần của bản dựng. (Hoặc .war, hoặc .ear, tùy thuộc vào môi trường mục tiêu của bạn.)
markusk

1
"thực thi thô" là gì?
ealeon

Các túi bit về cơ bản là vô dụng mà không bị lẫn vào các thư viện khác mà nó cần. Nó giống như một chiếc bánh sô cô la. Không có bột và trứng, vv, ca cao chỉ là ca cao thô.
Kaili

9

Nói một cách đơn giản

Trình biên dịch chuyển mã java (có thể đọc được của con người) thành mã byte, vì vậy máy ảo hiểu nó.

Tòa nhà đặt tất cả các phần được biên dịch lại với nhau và tạo (bản dựng) một tệp thực thi.


Điều bạn đang nói đến là "Giải thích" ... biên dịch là biến mã có thể đọc được của con người thành mã máy
mortsahl

@Tom, bạn có nghĩa là "thực thi" hoặc " thực thi jar "?
Pacerier

4

Thật ra bạn đang làm điều tương tự. Ant là hệ thống xây dựng dựa trên các tệp cấu hình XML có thể thực hiện một loạt các tác vụ liên quan đến phần mềm biên dịch. Biên dịch mã java của bạn chỉ là một trong những nhiệm vụ đó. Có nhiều thứ khác như sao chép các tệp xung quanh, định cấu hình máy chủ, lắp ráp các khóa và tệp và biên dịch các ngôn ngữ khác như C.

Bạn không cần Ant để biên dịch phần mềm của bạn. Bạn có thể làm nó bằng tay như bạn đang làm ở trường. Một lựa chọn khác cho Ant là một sản phẩm có tên Maven. Cả Ant và Maven đều làm điều tương tự, nhưng theo những cách hoàn toàn khác nhau.

Tra cứu AntMaven để biết thêm chi tiết.


Bạn cũng có thể thấy những gì kiến ​​thực sự đang làm bằng cách tìm kiếm tệp buildfile (rất có thể được gọi là build.xml). Ngay cả khi bạn không quen với cú pháp, bạn vẫn có thể thấy những gì đang diễn ra. <javac> có nghĩa là nó đang biên dịch một số mã Java. <java> có nghĩa là nó thực sự đang chạy mã được biên dịch. Có lẽ nó đang tạo một thư mục để đặt các tệp.
Class

4
  • Build là một phiên bản biên dịch của một chương trình.
  • Biên dịch nghĩa là, chuyển đổi (một chương trình) thành dạng mã máy hoặc dạng cấp thấp hơn trong đó chương trình có thể được thực thi.

Trong Java : Build là một vòng đời chứa chuỗi các pha được đặt tên.

ví dụ: maven nó có ba vòng đời xây dựng, vòng đời sau là defaultvòng đời xây dựng.

validate - validate the project is correct and all necessary information is available
compile - compile the source code of the project
test - test the compiled source code using a suitable unit testing framework. These tests should not require the code be packaged or deployed
package - take the compiled code and package it in its distributable format, such as a JAR.
integration-test - process and deploy the package if necessary into an environment where integration tests can be run
verify - run any checks to verify the package is valid and meets quality criteria
install - install the package into the local repository, for use as a dependency in other projects locally
deploy - done in an integration or release environment, copies the final package to the remote repository for sharing with other developers and projects.

1

Trong Eclipse và IntelliJ, quy trình xây dựng bao gồm các bước sau: làm sạch các gói trước, xác thực, biên dịch, kiểm tra, gói,
tích hợp, xác minh, cài đặt, triển khai.


0

Biên dịch chỉ là chuyển đổi mã nguồn thành nhị phân, tòa nhà đang biên dịch và liên kết bất kỳ tệp nào khác cần thiết vào thư mục xây dựng

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.