Sự khác biệt giữa cấu hình biên dịch và thời gian chạy trong Gradle


102

Câu hỏi của tôi hơi phổ biến, nhưng nó cũng được liên kết với Gradle.

Tại sao chúng ta cần cấu hình biên dịch và thời gian chạy?

Khi tôi biên dịch một thứ gì đó, tôi cần tạo tác để chuyển đổi các lớp java của mình sang bytecode, vì vậy tôi cần cấu hình biên dịch, nhưng tại sao lại cần cấu hình thời gian chạy tôi cần một thứ khác để chạy ứng dụng của mình trong JVM?

Xin lỗi nếu nó nghe có vẻ ngu ngốc, nhưng tôi không hiểu.

Câu trả lời:


149

Trong trường hợp phổ biến nhất, các tạo tác cần thiết tại thời điểm biên dịch là một tập hợp con của những thứ cần thiết trong thời gian chạy. Ví dụ, giả sử rằng một chương trình được gọi là appsử dụng thư viện foovà thư viện sử dụng thư viện foo nội bộbar . Sau đó, chỉ foocần thiết để biên dịch app, nhưng cả hai foobarcần thiết để chạy nó. Đây là lý do tại sao theo mặc định, mọi thứ bạn đặt trên compilecấu hình của Gradle cũng hiển thị trên runtimecấu hình của nó , nhưng điều ngược lại là không đúng.


20
Thật xấu hổ vì điều này không được đề cập rõ ràng trong gradle.org/docs/current/userguide/dependency_management.html . Họ sử dụng cả hai biên dịch và thời gian chạy mà không nói một cách rõ ràng ý nghĩa của chúng ...
silasdavis

2
@silasdavis Trong tài liệu giải thích sự khác biệt: gradle.org/docs/current/userguide/… trong 8.3. Cấu hình phụ thuộc
angelcervera

@angelcervera Ah thì có, 8. Khái niệm cơ bản về quản lý phụ thuộc và 51. Quản lý phụ thuộc. Tôi có thể hiểu tại sao chúng có hai phần, nhưng có lẽ sẽ rất tốt nếu phần sau tham chiếu phần trước. Tôi nghĩ rằng tôi đã hạ cánh trên 51 và mong đợi nó sẽ cung cấp cho một tài khoản đầy đủ.
silasdavis

@silasdavis Đúng. Tương tự đối với các phần khác trong tài liệu. Tôi phải dành thời gian rảnh rỗi để đọc tất cả tài liệu từ A đến Z.
angelcervera

1
@Peter Niederwieser Nếu tác vụ biên dịch hiển thị các phụ thuộc giống như thời gian chạy, bạn sẽ sử dụng thời gian chạy thay vì biên dịch trong trường hợp nào?
rj2700 17/08/17
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.