Biểu mẫu ngắn: Nếu chính của bạn nằm trong một tệp jar, có thể bạn sẽ cần một đường dẫn '-jar thêm To / yourJar / YourJarsName.jar' được khai báo rõ ràng để làm cho nó hoạt động (ngay cả khi 'YourJarsName.jar' nằm trên đường dẫn lớp) (hoặc , bày tỏ để trả lời câu hỏi ban đầu đã được hỏi 5 năm trước: bạn không cần phải phân phối lại từng bình một cách rõ ràng, nhưng dường như, ngay cả với java6, bạn cần phải xác định lại bình của mình ...)
Hình thức dài: (Tôi đã nói rõ điều này đến mức tôi hy vọng ngay cả những người xen kẽ vào java cũng có thể sử dụng điều này)
Giống như nhiều người ở đây, tôi đang sử dụng nhật thực để xuất các tệp: (Tệp-> Xuất -> 'Tệp JAR có thể chạy'). Có ba tùy chọn về ưu đãi 'Xử lý thư viện' (Juno):
opt1: "Extract required libraries into generated JAR"
opt2: "Package required libraries into generated JAR"
opt3: "Copy required libraries into a sub-folder next to the generated JAR"
Thông thường, tôi sử dụng opt2 (và opt1 chắc chắn đã phá vỡ), tuy nhiên mã gốc trong một trong các lọ tôi đang sử dụng Tôi đã phát hiện ra các ngắt với thủ thuật "jarinjar" tiện dụng mà nhật thực tận dụng khi bạn chọn tùy chọn đó. Ngay cả sau khi nhận ra tôi cần opt3, và sau đó tìm mục nhập StackOverflow này, tôi vẫn phải mất một thời gian để tìm ra cách khởi chạy chính của mình bên ngoài nhật thực, vì vậy đây là cách hữu ích cho tôi, vì nó hữu ích cho người khác ...
Nếu bạn đặt tên jar của mình: "fooBarTheJarFile.jar" và tất cả được đặt thành xuất thành thư mục: "/ theFully / QualPath / toYourChosenDir".
(có nghĩa là trường 'Xuất đích' sẽ đọc: '/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar')
Sau khi bạn nhấn xong, bạn sẽ thấy nhật thực, sau đó đặt tất cả các thư viện vào một thư mục có tên 'fooBarTheJarFile_lib' trong thư mục xuất đó, cung cấp cho bạn một cái gì đó như:
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar01.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar02.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar03.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar04.jar
Sau đó, bạn có thể khởi chạy từ mọi nơi trên hệ thống của mình với:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" -jar /theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
. .} 'mà bạn muốn chạy từ bên ngoài java)
Cạm bẫy cần chú ý: là việc có 'fooBarTheJarFile.jar' trong danh sách các lọ trên đường dẫn lớp được khai báo của bạn là không đủ. Bạn cần khai báo rõ ràng '-jar' và xác định lại vị trí của bình đó.
ví dụ: điều này phá vỡ:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar;/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" somepackages.inside.yourJar.leadingToTheMain.TheClassWithYourMain
trình bày lại với các đường dẫn tương đối:
cd /theFully/qualifiedPath/toYourChosenDir/;
BREAKS: java -cp "fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" -jar package.path_to.the_class_with.your_main.TheClassWithYourMain
WORKS: java -cp ".;fooBarTheJarFile_lib/*" -jar fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(sử dụng phiên bản java "1.6.0_27"; thông qua OpenJDK 64-Bit Server VM trên ubfox 12.04)