2012-02-22 67 views
70

Tôi có 3 tệp jar và 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 cách sử dụng dấu nhắc lệnh?Cách gộp tệp jar bằng tệp java và biên dịch trong dấu nhắc lệnh

+7

nhập "javac -help" –

+2

http://docs.oracle.com/javase/6/docs/technotes/tools/index.html#basic –

+2

hy vọng [this] (http://stackoverflow.com/questions/1064481/newbie-question-how-to-include-jar-files-when-compiling) giúp bạn .. –

Trả lời

12

Cố gắng thêm tất cả các file jar phụ thuộc vào đường dẫn lớp của bạn thông qua các thiết lập 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 đến vị trí của bạn java tệp mà bạn muốn biên dịch.
  3. Set classpath cho các tập tin 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 file java của bạn. (lệnh: javac YourJavaFile.java)

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

67

Bạn có thể bao gồm tệp jar của mình trong lệnh "javac" bằ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 thiết lập các 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à các 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 tin.

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 tại this blog.

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' đã hoạt động đối với tôi. Tôi đã sử dụng mac. Tôi đọc ở đâu đó rằng ':' được sử dụng cho unix. – Sri

+1

Tôi đã sử dụng lệnh này nhưng khi cố truy cập lớp hiện tại trong tệp jar, tôi nhận được ClassNotFoundException. –

9

Cú pháp sẽ làm việc trên cửa sổ dos lệnh:

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

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? –

11

Vui lòng thử trên Linux

javac -cp jarfile source file 

VÍ DỤ: -

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

Khi tôi thử ** VÍ DỤ: - **, với '.:/Jars' được thay 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: flag không hợp lệ:/location/of/first/jar/file.jar'. –

+0

http://stackoverflow.com/questions/27915204/javac-invalid-flag-activation-1-1-jar xin vui lòng refere này, nó có thể giải quyết vấn đề của bạn – Jamsheer

4

này sẽ tạo ra tập tin .class:

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

này sẽ thực thi tập tin lớp:

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

java lệnh là 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.java' và ** chạy ** 'java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile.java cũng tôi đã thử java -cp /home/scorncer/Downloads/spark-core-2.3.jar: MyFile' –

3

Hãy thử này.

javac -cp .:jars/jar1:jars/jar2:jars/jar3 com/source/*.java 
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 

Đến thư mục vị trí (Out of 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 ý: Xin vui lòng xem các tập tin địa điểm và tên gói

Các vấn đề liên quan