2010-04-16 29 views
90

Suy nghĩ rằng câu trả lời cho điều này là khá rõ ràng nhưng ở đây nó đi:Building vs Biên dịch (Java)

Khi tôi đang làm việc trên một dự án nhỏ cho học sinh (trong java) Tôi biên dịch nó.

Trên coop 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 việc biên dịch là một tập hợp con của tòa nhà. Đ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:
What is the difference between compiling and building?

Trả lời

156

"Bản dựng" là quy trình bao gồm tất cả các bước cần thiết để tạo phần mềm "có thể phân phối" 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. Soạn các nguồn.
  3. Soạn các nguồn thử nghiệm.
  4. Thực hiện kiểm tra (kiểm tra đơn vị, kiểm tra tích hợp, v.v ...).
  5. Bao bì (vào lọ, 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, vùng phủ sóng thử nghiệm, v.v.).
  7. Tạo báo cáo.

Vì vậy, bạn có thể thấy, việc biên dịch chỉ là một phần nhỏ của bản dựng (và thực hành tốt nhất là tự động 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 liên tục. là Continuous Integration).

+1

Viết đẹp và cảm ơn bạn rất nhiều thực sự. –

+1

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

+0

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

8

Nói cách đơn giản

Compilation dịch mã java (con người có thể đọc được ) vào bytecode, vì vậy máy ảo hiểu nó.

Tòa nhà đặt tất cả các phần được biên soạn cùng nhau và tạo (xây dựng) một tệp thực thi .

+0

gì bạn đang nói về là "Giải thích" ... biên dịch được chuyển mã có thể đọc được con người vào mã máy – mortsahl

+0

@ Tom, Bạn có nghĩa là một "thực thi" hoặc "** jar ** thực thi"? – Pacerier

21

Biên dịch là hành động chuyể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 thư viện vào một tệp thực thi thô.

Xây dựng là chuỗi gồm biên soạnnối, với nhiệm vụ có thể khác như tạo trình cài đặt.

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

What is the difference between compile code and executable code?

+0

Một số nhiệm vụ có thể khác: tăng cường (JDO), Javadoc-ing, đóng gói và ký tên. 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 "xây dựng". –

+0

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ư 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 đích của bạn.) – markusk

+7

Dude, đây là bản sao và dán thuần túy và thậm chí không thích hợp cho Java ... –

4

Thực ra bạn đang làm điều tương tự. Ant xây dựng hệ thố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 tin xung quanh, cấu hình máy chủ, lắp ráp các khóa và các lọ, 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 điều đó bằng tay như bạn đang làm ở trường. Một thay thế khác cho Ant là một sản phẩm có tên là 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.

+0

Bạn cũng có thể thấy kiến ​​thực sự đang làm gì 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 thuộc với cú pháp, bạn có thể thấy những gì đang diễn ra. có nghĩa là nó biên dịch một số mã Java. có nghĩa là nó thực sự đang chạy mã được biên dịch. Có lẽ nó tạo ra một thư mục để đặt các tập tin .class trong, biên dịch mã, có thể tạo ra một số Javadoc, vv – MatrixFrog

0

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

29

Một số các câu trả lời tôi thấy đây là out-of-bối cảnh và có ý nghĩa hơn nếu điều này là một câu hỏi C/C++.

phiên bản ngắn:

  • "Biên dịch" được quay java file vào file .class
  • 'Xây dựng" là một thuật ngữ chung bao gồm soạn thảo và các nhiệm vụ khác

.

"Tòa nhà" là một điều khoản chung mô tả quá trình tổng thể bao gồm biên soạn. Ví dụ, quá trình xây dựng có thể bao gồm các công cụ tạo ra các tệp Java hoặc các tệp tài liệu.

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

1

tldr;

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

Trong Java: Xây dựng là vòng đời chứa chuỗi các giai đoạn được đặt tên. Ví dụ:

ví dụ: maven có ba vòng đời xây dựng, chu trình sau đây là default tạo chu kỳ số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. 
Các vấn đề liên quan