2012-06-21 16 views
5

Tôi đã tạo ra một tập tin batch "run.bat":làm thế nào để tham khảo tất cả các file jar trong một thư mục trong tập tin batch của tôi

set CLASSPATH=%CLASSPATH%.;.\Jars\app.jar;.\Jars\a.jar;.\Jars\b.jar;.\Jars\c.jar;.\Jars\d.jar; 
java mypackage.mysubpackage.Start 
pause 

Tôi đã giữ tất cả các file lớp liên quan đến ứng dụng của tôi trong "ứng dụng .jar "và Start là lớp từ nơi ứng dụng bắt đầu thực thi. Tôi có tệp "run.bat" này và tất cả các lọ mà "app.jar" của tôi muốn tham chiếu trong cùng một thư mục.
Tôi giữ tất cả các lọ này trong thư mục "Chum" và đề cập đến nó trong tệp "run.bat" của tôi như được hiển thị ở trên. Tuy nhiên, để tham khảo từng tệp jar bằng "run.bat" của tôi, tôi cần chỉ định đường dẫn là ". \ Jars \ jarname.jar". Khi tôi đang sử dụng ". \ Jars \ *. Jar" các lọ không được gọi bởi "run.bat". Có ai có thể cung cấp giải pháp thay thế cho nó không?

+1

tôi nghĩ rằng ở đây bạn sẽ tìm thấy một số gợi ý hơn http://stackoverflow.com/questions/1914493/add-jar-file-to-buildpath-in-windows-command-line – BigMike

+0

và btw, hàng loạt cửa sổ cũ tốt CHO lệnh có thể hữu ích quá (xem http://stackoverflow.com/questions/180741/how-to-do-something-to-each-file-in-a-directory-with-a-batch-script) – BigMike

+0

@BigMike điểm tốt về phiên bản java . Trong các hệ thống Linux nó ít của một vấn đề do mở rộng tên tập tin. Không chắc chắn các cửa sổ cũng mở rộng một số +1 – Morfic

Trả lời

2

Thực ra bạn chỉ thực hiện một nửa công việc bằng * .jar. Bạn cũng cần chuyển chúng sang java dưới dạng classpath: java -cp $CLASSPATH mypackage.mysubpackage.Start. (trên cửa sổ tôi nghĩ việc sử dụng biến trong tập lệnh là% CLASSPATH%)

Chỉnh sửa sau: hãy xem nhận xét của BigMike về câu hỏi của bạn. Nếu bạn đang sử dụng phiên bản java < 1.6, bạn có thể cần phải sử dụng vòng lặp để xây dựng một% CLASSPATH% hoàn chỉnh, bao gồm tên đầy đủ của mỗi cái, vì tôi đoán rằng vỏ của Windows không làm expansions giống như * nix hệ thống.

+0

Java sẽ đọc biến môi trường% CLASSPATH%, đúng không? – trojanfoe

+1

Bạn chính xác, nó sẽ tự động đọc nó.Nhưng vì việc đặt classpath có thể phức tạp, nên bạn nên sử dụng tùy chọn 'java -cp'. Điều này cũng cho phép bạn chỉ định đường dẫn lớp riêng cho từng ứng dụng của bạn mà không ảnh hưởng đến phần còn lại của các ứng dụng hiện có, trong khi sửa đổi biến môi trường sẽ có tác động toàn cầu. – Morfic

+0

đồng ý với Grove, rối tung với các biến env trên Windows có thể là một nỗi đau lớn (aaah tôi nhớ tốt autoexec.bat cũ) – BigMike

2

Bạn có thể thử sử dụng vòng lặp để tạo đường dẫn lớp theo lô, chẳng hạn như bên dưới.

@echo off 
for %%jar in (.\Jars\*.jar) do call :add_jar %%jar 

java -cp %CLASSPATH%;%JARS% mypackage.mysubpackage.Start 
pause 

exit /b 

:add_jar 
set JARS=%JARS%;%1 
exit /b 
+1

+1 vì lợi ích của lệnh FOR;) – BigMike

+0

+1: @ guanxiaohua2k6, bạn nên thêm một bổ sung ' exit/b' sau khi tạm dừng để tránh vào chương trình con 'add_jar' sau khi vòng lặp' for' kết thúc. –

+0

OK, cảm ơn. Tôi đã thêm nó. – guanxiaohua2k6

1

Bạn có thể thử một cái gì đó được đưa ra trong liên kết dưới đây http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

đường dẫn lớp Hiểu kí tự đại diện phần:.

"Một mục nhập đường dẫn lớp có chứa * sẽ không phù hợp với các tệp class Để phù hợp với cả hai lớp và các tệp JAR trong một thư mục foo, sử dụng lệnh foo; foo/* hoặc foo/; lệnh này được xác định xem các lớp và tài nguyên trong foo có được tải trước các tệp JAR trong foo hay ngược lại hay không. Subdirectories a không được tìm kiếm đệ quy. Ví dụ, foo/ tìm kiếm các tập tin JAR chỉ trong foo, không phải trong foo/bar, foo/baz vv"

Vì vậy, trong trường hợp của bạn, bạn nên làm:

set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\* 

không

set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\*.jar 

cung cấp tất cả các lọ bạn cần có mặt trong. \ Chum thư mục