Cách bao gồm tệp jar với tệp java và biên dịch trong dấu nhắc lệnh


121

Tôi có 3 tệp jar và một tệp .java phụ thuộc vào các tệp jar này. Làm cách nào để biên dịch tệp .java với các tệp jar này bằng dấu nhắc lệnh?


9
nhập "javac -help"
Sean Patrick Floyd


2
hy vọng điều này sẽ giúp bạn ..
Fahim Parkar 22/02/12

2
Lưu ý cho bản thân: bạn phải sử dụng cờ -cp / -classpath trước tên của tệp java mà bạn muốn chạy, nếu không nó sẽ bỏ qua cờ. java -cp ".;magic.jar" Foolà ok java Foo -cp ".;magic.jar"là không.
Dmitry

Câu trả lời:


108

Bạn có thể đưa các tệp jar của mình vào lệnh "javac" bằng cách sử dụng tùy chọn "-cp".

javac -cp ".:/home/path/mail.jar:/home/path/servlet.jar;" MyJavaFile.java

Thay vì "-cp", bạn cũng có thể sử dụng "-classpath"

javac -classpath ".:/home/path/mail.jar:/home/path/servlet.jar:" MyJavaFile.java

Bạn có thể bao gồm các lọ mỗi khi bạn biên dịch bằng cách đặt biến môi trường "CLASSPATH" một cách chính xác. Biến môi trường sẽ lưu trữ đường dẫn nơi các lọ và lớp cần được sử dụng để biên dịch / thực thi bất kỳ tệp java nào. Bạn sẽ không phải bao gồm các lọ riêng lẻ mỗi khi bạn biên dịch tệp.

Các máy khác nhau có các phương pháp khác nhau để đặt classpath làm biến môi trường. Các lệnh cho Windows, Linux, v.v. khác nhau.

Bạn có thể tìm thêm chi tiết trong blog này .

http://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html

7
javac -classpath ".:/home/path/mail.jar;/home/path/servlet.jar" MyJavaFile.javađã làm cho tôi. Tôi đã sử dụng mac. Tôi đọc ở đâu đó rằng ':' được sử dụng cho unix.
Sri

2
Tôi đã sử dụng lệnh này nhưng khi cố gắng truy cập lớp có trong tệp jar, tôi nhận được ClassNotFoundException.
Mohammed Rampurawala

3
những gì .:làm gì? xin lỗi nếu nó là một câu hỏi ngớ ngẩn, nhưng nó không rõ ràng đối với tôi.
Miranda

1
@kensen. Lỗi đánh máy. thay thế: (dấu hai chấm) bằng dấu chấm phẩy (;)
Pankaj Shinde

Ở trên không làm việc cho tôi trên ubuntu. Tôi đã thử mà không có dấu ngoặc kép và nó hoạt động. Ví dụ. javac -cp .:/home/path/mail.jar:/home/path/servlet.jar; MyJavaFile.java
Alfaz Jikani

24

Vui lòng thử trên Linux

javac -cp jarfile source file 

THÍ DỤ :-

javac  -cp .:/jars/* com/template/*.java

Khi tôi thử VÍ DỤ: - , được .:/jarsthay thế bằng thư mục chứa các tệp JAR của tôi, tôi nhận được thông báo lỗi javac: invalid flag: /location/of/first/jar/file.jar.
Arturo don Juan

stackoverflow.com/questions/27915204/... xin refere này, nó có thể giải quyết vấn đề của bạn
Jamsheer

20

Cú pháp sẽ hoạt động trên lệnh dos windows:

javac -cp ".;first.jar;second.jar;third.jar" MyJavaFile.java

4
Sau khi thực hiện thành công lệnh trên làm thế nào để chạy tệp lớp java?
Yash Agrawal

java -cp first.jar: second.jar: third.jar MyFile
Krsna Chaitanya

15

Cố gắng thêm tất cả các tệp jar phụ thuộc vào đường dẫn lớp của bạn thông qua cài đặt biến môi trường hoặc sử dụng các bước dưới đây:

  1. Mở dấu nhắc lệnh.
  2. Thay đổi thư mục thành vị trí của tệp java mà bạn muốn biên dịch.
  3. Đặt classpath cho các tệp jar phụ thuộc của bạn như hình dưới đây:

    set classpath=C:\Users\sarath_sivan\Desktop\jars\servlet-api.jar; C:\Users\sarath_sivan\Desktop\jars\spring-jdbc-3.0.2.RELEASE; C:\Users\sarath_sivan\Desktop\jars\spring-aop-3.0.2.RELEASE;

  4. Bây giờ, bạn có thể biên dịch tệp java của mình. (chỉ huy:javac YourJavaFile.java :)

Hy vọng điều này sẽ giải quyết vấn đề phụ thuộc của bạn.


15

Sau đây là các bước,

  1. Sao chép tất cả các lọ và tệp .java của bạn trong cùng một thư mục (Sẽ dễ dàng đề cập đến tên tệp thay vì đề cập đến đường dẫn dài. Mặc dù bạn có thể giữ jar và .java trong các thư mục riêng biệt).

  2. Để biên dịch,

    javac -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>.java
  3. Để thực hiện,

    java -cp .:<file_1_name>.jar:<file_2_name>.jar <prog_name>

Tôi hi vọng cái này giúp được!


1
Cảm ơn bạn cũng đã chỉ ra cách thực thi. Dấu hai chấm lại có tác dụng gì? Đó là thư mục hiện tại và dấu tách tệp?
ThisClark

Có, đó là thư mục hiện tại và dấu phân tách tệp Unix (trên Windows thì đó là dấu chấm phẩy).
MathuSum Mut,

6

Thao tác này sẽ tạo tệp .class:

javac -classpath "[jarname with specified path]" [java filename]

Điều này sẽ thực thi tệp lớp:

java -cp [jarname with specified path]: [java filename]

1
lệnh java đang hiển thị lỗi gây ra bởi: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory Tôi muốn biên dịch ** javac -classpath "/home/scorncer/Downloads/spark-core-2.3.jar" MyFile.javavà chạy ** java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile.java also i tried java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile
Yash Agrawal

5

Thử cái này.

javac -cp .:jars/jar1:jars/jar2:jars/jar3 com/source/*.java

2

Bạn cần chỉ định các phụ thuộc trong thời gian biên dịch cũng như thời gian chạy

Để biên dịch, hãy sử dụng định dạng này

javac -cp "*.jar;classfile_path" filename.java

Thí dụ:

javac -cp "ojdbc6.jar;c:\programs" Main.java

Câu trả lời này, trong khi chính xác, dường như không thực sự thêm bất cứ điều gì mà các câu trả lời khác chưa nói. Nếu có một số khác biệt chính giữa câu trả lời này và câu trả lời khác, tốt hơn là bạn nên giải thích tại sao câu trả lời của bạn lại khác nhau.
DaveyDaveDave

Bạn đã đề cập đến việc chỉ định các phụ thuộc trong thời gian chạy cũng như thời gian biên dịch nhưng không giải thích cách chỉ định chúng trong thời gian chạy.
Michael Fulton

1

một số lần thay đổi sau hoạt động:

java -cp ".;%CLASSPATH%" classfilename 

Lưu ý: BẬT Windows. Để sử dụng linux $CLASSPATHthay thế.


1
javac -cp jars/jar1:jars/jar2:jars/jar3 abc.java

5
Mặc dù mã này có thể giải quyết câu hỏi, bao gồm giải thích về cách thức và lý do tại sao điều này giải quyết vấn đề sẽ thực sự giúp cải thiện chất lượng bài đăng của bạn và có thể dẫn đến nhiều phiếu bầu hơn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai, không chỉ người hỏi bây giờ. Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích và đưa ra dấu hiệu về những giới hạn và giả định nào được áp dụng.
tiếng bíp kép

0

Nếu bạn đang sử dụng Ubuntu:

/opt/JavaServices/sqlite $ export CLASSPATH=/opt/JarFiles/XXXX.jar:/opt/JarFiles/XXXX.jar:/opt/JavaServices/;javac SQLiteSample.java

Đi đến vị trí thư mục (Ngoài cấu trúc gói)

/opt/JavaServices $ export CLASSPATH=/opt/JarFiles/XXXXX.jar:/opt/JarFiles/XXXXX.jar:/opt/JavaServices/;java sqlite.SQLiteSample

Lưu ý: Vui lòng xem vị trí tệp và tên gói


-1

Cho cửa sổ

  1. kết nối với thư mục chứa tệp java trên dấu nhắc lệnh.
  2. đặt classpath (ở đây d = tên thư mục) đặt classpath = C: \ d1 \ d2 \ d3 \ d4 \ d5 \ d6 \ d7.jar;
  3. nhấn enter và
  4. bây giờ biên dịch tệp java javac filename.java
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.