2014-12-02 11 views
7

wewnątrz pliku bat Mam następujący:Jak zatrzymać mylne argumenty programu Java z argumentami maszyny wirtualnej?

java -Ddatabase.host=127.0.0.1 -Xms128M -Xmx1024M com.temp.util.manual.serial.Assignment -folder C:\temp\ -destination C:\temp\out.csv

W -folder i -destination params mają być przekazywane do głównej metody klasy Przypisanie miano, lecz są one interpretowane jako VM args .

Próbowałem umieszczać cytaty wokół params bezskutecznie, a wyszukiwanie nie ujawnia odpowiedzi.

pojawia się następujący błąd:

Unrecognized option: -'destination' 
Error: Could not create the Java Virtual Machine. 
Error: A fatal exception has occurred. Program will exit. 
Press any key to continue . . . 

@echo off 
setlocal EnableDelayedExpansion EnableExtensions 
set FILETYPE=%~n0 
set CLASSPATH=jar1.jar 
set CLASSPATH=%CLASSPATH%;anotherjar.jar 
echo %CLASSPATH% 
java -DjobName=%FILETYPE% -Ddatabase.host=127.0.0.1 -Ddatabase.name=db1 -Ddatabase.username=user1 -Ddatabase.password=password1 -Xms128M -Xmx1024M com.temp.util.manual.serial.Assignment -folder C:\\temp\\ -destination C:\\temp\\out.csv 
call Cleanup.bat 
endlocal 
+0

Zauważam, że nie określasz ścieżki klasy. Czy twoje argumenty są w dokładnie takiej kolejności? –

+0

Ustaliłem ścieżkę klasy przed podaną linią. Tak, argumenty są w tej kolejności. –

+2

Pokaż nam swój plik wsadowy. Ukrywasz coś ... – icza

Odpowiedz

2

Myślę, że Twój problem ma więcej wspólnego z przekazywaniem zmiennych. Usuń EnableDelayedExpansion EnableExtensions

+0

To działa. Pomyślałem, że potrzebuję "EnableDelayedExpansion EnableExtensions", ponieważ w Cleanup.bat używałem "echo! FILETYPE!" a to się nie udało, ale zmieniono na "echo% FILETYPE%", a usunięcie "EnableDelayedExpansion EnableExtensions" spowoduje, że java będzie działać, a wszystkie moje zmienne będą poprawnie drukowane. –

0

Komenda java ma następującą składnię:

java [ options ] class [ arguments ] 
java [ options ] -jar file.jar [ arguments ] 

Więc w twoim przypadku (klasa) Wydaje się, że klasa nie została znaleziona. Prawdopodobnie ze względu na brakującą ścieżkę klasy.

java -cp . ... com.temp.util.manual.serial.Assignment ... 

Może lepiej nie polegać na zmiennej CLASSPATH, użyj -jar i polegać na META-INF/MANIFEST.MF.

+2

Dlaczego narzekałby na nierozpoznaną opcję, zamiast na nieodnalezienie klasy? Zdaję sobie sprawę, że nie możemy zrobić nic lepszego, niż zaszaleć w tej kwestii, ale to nie wyjaśnia problemu. – ajb

+1

@ajb tak czytając komentarze, brzmi to trochę rzucająco. Może usunąć opcje, przetestować, a następnie zacząć dodawać opcje. Nawet inna główna klasa miałaby sens. –

+1

Jeśli usuniemy "-DjobName =% FILETYPE% -Ddatabase.host = 127.0.0.1 -Ddatabase.name = db1 -Ddatabase.username = user1 -Ddatabase.password = password1" uruchomi program, mimo że będzie bombardował dla innych powody. –

Powiązane problemy