Sự khác biệt giữa Đường dẫn lớp và Đường dẫn xây dựng là gì


86

Tôi nhầm lẫn với hai thuật ngữ này.

Ngoài ra, tôi nên làm gì để tạo tệp trong thư mục src của Spring MVC Project? Khi tôi tạo bằng đối tượng Tệp, nó sẽ tạo tệp bên trong C: \ SpringSourceTool ... Tôi đoán đây là ClassPath phải không?

Làm cách nào để lấy applicationcontextthư mục hoặc thư mục gốc của ứng dụng?

Câu trả lời:


100

Đường dẫn xây dựng được sử dụng để xây dựng ứng dụng của bạn. Nó chứa tất cả các tệp nguồn của bạn và tất cả các thư viện Java được yêu cầu để biên dịch ứng dụng.

Đường dẫn classpath được sử dụng để thực thi ứng dụng. Điều này bao gồm tất cả các lớp và thư viện java cần thiết để chạy ứng dụng java. Classpath là bắt buộc, đường dẫn mặc định .được sử dụng nếu máy ảo java không thể tìm thấy đường dẫn do người dùng xác định. ( CLASSPATHbiến môi trường, -cpcờ hoặc Class-Path:thuộc tính trong tệp kê khai jar)


Nhưng javac có một đối số classpath. Có thể nói rằng tham số này "quá tải" để chỉ định đường dẫn xây dựng không?
aioobe

4
Không. Đối số classpath là một gợi ý cho trình biên dịch những gì anh ta mong đợi sẽ có sẵn / được cung cấp trong thời gian chạy, vì bạn không tự xây dựng mọi lớp mà bạn sử dụng (ví dụ: JFC, Libraries, ...). Đường dẫn xây dựng chứa cả phần phụ thuộc nguồn và / hoặc nguồn / đã biên dịch và nơi tìm chúng.
Johannes Wachter

Trong khi phát triển một plugin, tôi đã thêm tất cả các thư viện cần thiết vào classpath, nhưng không thể nhập gì cả. Eclipse không nhìn thấy chúng cho đến khi tôi thêm chúng vào đường dẫn xây dựng.
Bax

51

Đường dẫn classpath là cách thông thường để báo cho trình biên dịch Java (chuẩn) và thời gian chạy Java tìm các lớp đã biên dịch ở đâu. Nó thường là một chuỗi các tên tệp JAR và tên thư mục. Classpath được sử dụng bởi trình biên dịch và hệ thống thời gian chạy không nhất thiết phải giống nhau, nhưng chúng thường phải giống nhau , đặc biệt là đối với một dự án nhỏ.

Buildpath không phải là thuật ngữ Java tiêu chuẩn. Đây là thuật ngữ chỉ một cách phong phú hơn mà một IDE điển hình chỉ định mối quan hệ giữa các "dự án" tạo nên một ứng dụng. IDE sử dụng nó để tìm ra classpath và chuacepath để biên dịch mã Java và classpath để chạy nó. IDE cũng sử dụng đường dẫn xây dựng để tìm ra cách đóng gói mã của bạn và các phụ thuộc của nó như (ví dụ) một tệp WAR.

Ví dụ, một đường dẫn xây dựng Eclipse cho một dự án bao gồm các dự án khác mà nó phụ thuộc vào và liệt kê bất kỳ JAR thư viện bổ sung nào mà dự án chứa / dựa vào. Nó cũng liệt kê các gói trong dự án hiện tại mà các dự án hạ nguồn có thể phụ thuộc vào.

(Nếu bạn đang sử dụng Maven cho dự án của mình, cơ chế đường dẫn xây dựng IDE là cơ chế phụ thuộc vào các phụ thuộc được khai báo trong tệp POM. Ví dụ: sử dụng Eclipse với m2eclipse, đường dẫn xây dựng được tổng hợp từ tệp POM.)


27

Đường dẫn lớp được sử dụng trong thời gian chạy để tải các lớp và tài nguyên đã biên dịch.

Đường dẫn xây dựng được sử dụng tại thời điểm biên dịch để tìm các phụ thuộc cần thiết để xây dựng dự án của bạn.


Bạn có thể nói rằng đường dẫn lớp được sử dụng để định vị .classtệp (và các tài nguyên được biên dịch khác), trong khi đường dẫn xây dựng được sử dụng để định vị tệp nguồn cần được biên dịch?
Adam

1
@Adam Tôi không nghĩ điều đó hoàn toàn đúng. Đường dẫn xây dựng đôi khi cần tệp .class để biên dịch tệp nguồn. Vì vậy, đường dẫn xây dựng cũng sử dụng đường dẫn lớp đằng sau hậu trường. Nếu bạn dành chút thời gian để biên dịch và chạy một dự án java bằng java CLI, bạn có thể thấy điều này. Cả javac và java command đều có tùy chọn classpath vì cả hai đều có thể cần nó.
intrepistar_88

4

Mỗi dự án Java có đường dẫn xây dựng riêng chỉ định tất cả các phụ thuộc cần thiết để biên dịch dự án. Những phụ thuộc đó có thể đến từ các dự án Java khác trong không gian làm việc, từ tệp .jar trong kho lưu trữ Java hoặc từ các thư mục chứa tệp .class.

Trong môi trường CLASSPATH bạn chỉ cần chỉ định các tệp .class (ví dụ: tệp jar, zip - Bên trong tệp jar, tệp zip bạn sẽ chỉ tìm thấy các lớp java) tức là bạn đang giúp Máy ảo Java (JVM) tìm tệp lớp Java

Ngoài ra, tôi nên làm gì để tạo tệp trong thư mục src của Spring MVC Project? Khi tôi tạo bằng đối tượng Tệp, nó sẽ tạo tệp bên trong C: \ SpringSourceTool ...

Đây là nơi bắt đầu JVM, nếu bạn muốn tạo tệp khác ở đâu, hãy sử dụng đường dẫn tương đối từ đây.

Xem cái nàycái này để biết thêm thông tin.


Bạn thậm chí đã không đề cập đến đường dẫn xây dựng trong câu trả lời của mình.
aioobe 20-08-10

4

Tôi muốn thêm vào câu trả lời của Andreas_D để giải thích rằng đường dẫn xây dựng được IDE / trình biên dịch yêu cầu để định vị các gói và lớp bên ngoài được sử dụng bởi mã của bạn. Đôi khi chúng tôi gọi chúng là 'phụ thuộc' .

NB: Các gói bên ngoài này có thể được đóng gói bên trong một tệp .jar nén hoặc thực sự, có thể có một số tệp jar được đóng gói bên trong một 'thư viện' . Một thư viện hoặc một nhóm thư viện thường tạo nên một 'khuôn khổ' .

Nếu mã của bạn yêu cầu mã do người khác viết, bạn có thể nhập chúng vào lớp của mình bằng importlệnh. Tuy nhiên, lệnh này tự nó là không đủ vì trình biên dịch hoặc IDE cần biết vị trí của các lớp đó. Bạn chỉ định điều này trong đường dẫn xây dựng .

Mặt classpathkhác, cho JVM đang chạy ứng dụng của bạn biết nơi để tìm bất kỳ phần phụ thuộc nào trong quá trình thực thi mã của bạn.

Cũng cần lưu ý: Classpath được sử dụng bởi JVM.

Buildpath được sử dụng bởi IDE / compiler và là một phương tiện để xây dựng classpath từ môi trường phát triển của bạn. Khi bạn định cấu hình đường dẫn xây dựng của mình thông qua IDE, bạn cũng đang định cấu hình một tệp ẩn trong dự án của mình có tên là .classpath. Điều này được sử dụng để cung cấp classpath cho JVM khi triển khai.


1

Classpath ( từ Wikipedia ):

Tương tự như hành vi tải động cổ điển, khi thực thi các chương trình Java, Máy ảo Java tìm và tải các lớp một cách lười biếng (nó tải mã bytecode của một lớp chỉ khi lớp đó được sử dụng lần đầu). Đường dẫn classpath cho Java biết nơi cần tìm trong hệ thống tệp cho các tệp xác định các lớp này.

Máy ảo tìm kiếm và tải các lớp theo thứ tự sau:

các lớp bootstrap: các lớp cơ bản cho Nền tảng Java (bao gồm các lớp công khai của Thư viện Lớp Java và các lớp riêng tư cần thiết để thư viện này hoạt động).

các lớp mở rộng: các gói nằm trong thư mục mở rộng của JRE hoặc JDK,

jre / lib / ext / gói và thư viện do người dùng xác định

Theo mặc định, chỉ các gói của API chuẩn JDK và các gói mở rộng mới có thể truy cập được mà không cần đặt nơi tìm chúng. Đường dẫn cho tất cả các gói và thư viện do người dùng xác định phải được đặt trong dòng lệnh (hoặc trong Tệp kê khai được liên kết với tệp Jar chứa các lớp).

Nói một cách đơn giản - trong khi chương trình của bạn đang chạy, JVM chỉ tải các lớp khi cần thiết. Khi một lớp là cần thiết, JVM sẽ phụ thuộc vào classpath để nó biết nơi tải mã bytecode từ (ví dụ: .classtệp).

Mặt khác, đường dẫn xây dựng thường được sử dụng bởi một IDE, chẳng hạn như Eclipse, để biết nơi cần tìm các thư viện bổ sung cần thiết để biên dịch mã nguồn của dự án. Đường dẫn xây dựng không được sử dụng trong thời gian chạy.

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.