2012-06-21 9 views
5

Stworzyłem plik wsadowy „run.bat”:jak odwołać wszystkie pliki jar w katalogu w moim pliku wsadowego

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

Ja zachowałem wszystkie pliki związane z klasy mojej aplikacji w „app .jar "i Start jest klasą, z której rozpoczyna się wykonywanie aplikacji. Mam ten plik "run.bat" i wszystkie słoiki, które mój "app.jar" chce odnieść w tym samym katalogu.
Zachowałem wszystkie te słoiki w folderze "Jars" i odnosząc się do nich w moim pliku "run.bat", jak pokazano powyżej. Jednakże, aby odnieść się do każdego pliku jar przez mój "run.bat", muszę podać ścieżkę jako ". \ Jars \ jarname.jar". Kiedy używam ". \ Jars \ *. Jar" słoiki nie są polecane przez "run.bat". Czy ktoś może podać alternatywę dla niego?

+1

myślę, że tu jesteś znajdziesz kilka wskazówek: http://stackoverflow.com/questions/1914493/add-jar-file-to-buildpath-in-windows-command-line – BigMike

+0

i przy okazji, dobre stare okno wsadowe DO polecenia może być również przydatne (zobacz http://stackoverflow.com/questions/180741/how-to-do-something-to-each-file-in-a-directory-w---batch-script) – BigMike

+0

@BigMike dobry punkt o wersji java . W systemach Linux jest to mniejszy problem ze względu na rozszerzenie nazwy pliku. Nie mam pewności, że Windows rozszerza się o +1 – Morfic

Odpowiedz

2

Właściwie wykonałeś tylko połowę pracy, używając * .jar. Musisz również przekazać je do java jako ścieżkę klasy: java -cp $CLASSPATH mypackage.mysubpackage.Start. (W systemie Windows Myślę, że użycie zmiennej w skrypcie to% CLASSPATH%)

Później edit: spójrz na komentarze BigMike dotyczących Twojego pytania. Jeśli używasz wersji java < 1.6, może trzeba użyć pętli zbudowanie kompletnego% CLASSPATH% łącznie z każdego słoika za pełną nazwą indywidualnie, bo zgaduję, że powłoki systemu Windows' nie robi expansions podobnie jak * nix systemy.

+0

Mimo to Java odczyta zmienną środowiskową% CLASSPATH%, czyż nie? – trojanfoe

+1

Masz rację, powinien przeczytać ją automatycznie.Ale ponieważ ustawienie ścieżki klasy może być trudne, zaleca się użycie najlepszej opcji 'java -cp'. Pozwala to również określić ścieżkę klas indywidualnie dla każdej aplikacji bez wpływu na pozostałe aplikacje, natomiast modyfikacja zmiennej środowiskowej będzie mieć globalny wpływ. – Morfic

+0

zgadzam się z Grove, mieszanie ze zmiennymi env w Windowsie może być wielkim bólem (aaah tęsknię za dobrym starym autoexec.bat) – BigMike

2

Możesz użyć pętli, aby utworzyć ścieżkę klasy wsadowo, na przykład poniżej.

@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 ze względu na polecenie FOR;) – BigMike

+0

+1: @ guanxiaohua2k6, powinieneś dodać dodatkowe ' exit/b' po przerwie, aby uniknąć wejścia w podprogram 'add_jar' po zakończeniu pętli' for'. –

+0

OK, dziękuję. Dodałem to. – guanxiaohua2k6

1

Można spróbować czegoś, co jest podane w linku poniżej http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

Zrozumienie ścieżka klasy symboli wieloznacznych odcinku.

„Wpis ścieżki klasy, która zawiera * nie będzie pasował do plików klasę do pasuje do obu klas i plików JAR w jednym katalogu foo, użyj foo; foo/* lub foo/;. foo kolejność wybrany określa, czy zajęcia i zasoby w foo są ładowane przed plików JAR w foo, lub odwrotnie . Podfoldery a nie szuka się rekursywnie. Na przykład, foo/ wygląda dla plików JAR tylko w foo, a nie w foo/bar, foo/baz itp”

Więc w twoim przypadku trzeba zrobić:

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

i nie

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

przewidziane wszystkie słoiki wymagany jest obecne są w. \ Folder słoiki

Powiązane problemy