2016-03-14 14 views
5

Jestem całkowicie nowym programistą wsadowym Windows. Co chcę osiągnąć, to napisać skrypt startowy dla aplikacji Java. Mimo, że nie uruchomić aplikację Java, ale wypisujeWindows batch & java: Łączenie -XX: Komenda OnOutOfMemoryError i parametry wsadowe

Wykorzystanie: Java [-options] Klasa args [...]

(wykonać klasę)

lub Java [-options] -jar jarfile [args ...]

(aby wykonać plik jar)

...

co oznacza, że ​​moje parametry nie są poprawnie rozpoznane.


Oto moja MCVE za scenariusz nie-obrotowego:

set memory=600000 
java -XX:OnOutOfMemoryError="taskkill /PID %p" -Xmx%memory%K -jar MyApp.jar 

W realnym scenariuszu memory obliczana jest, aby ustawić optymalną maksymalną wielkość sterty dla aplikacji.


Pozostawienie jednego z dwóch parametrów powoduje uruchomienie aplikacji. Więc

java -XX:OnOutOfMemoryError="taskkill /PID %p" -jar MyApp.jar 

i

set memory=600000 
java -Xmx%memory%K -jar MyApp.jar 

prace, ale muszę oba parametry do pracy w jednej rozmowy.

+0

spróbuj umieścić '@echo on' /' @ echo off' w swojej skrypt ([opisany tutaj] (http://stackoverflow.com/a/10237457/3788176)) i zobacz, jakie polecenie faktycznie wykonuje w przypadku "obu parametrów". –

+0

Dzięki za wejście! Użycie '@echo on' powoduje drukowanie' java -XX: OnOutOfMemoryError = "taskkill/PID memoryK -jar MyApp.jar', co wskazuje na błąd z' '', który nie jest już zamknięty, oraz parametr, który jest nie dodane ('% pamięci%)' ... –

+2

Wygląda na to, że '%' w '% p' jest uważane za" otwarcie "'% 'dla podstawienia - myślę, że' %% 'jest tokenem dla pojedynczego'% '(jak w' metody podobne do printf'ów). –

Odpowiedz

2

Jeśli umieścisz w swoim skrypcie @echo on i @echo off, zobaczysz, jakie polecenie jest aktualnie wykonywane.

Mówisz, że otrzymany polecenia:

java -XX:OnOutOfMemoryError="taskkill /PID memoryK -jar MyApp.jar 

który sprawia, że ​​wyglądają jak % z %p jest uważany za „otwarcie” % zastąpienia.

Oprócz kwot niezbilansowanych oznacza to, że skutecznie nie dajesz komendy uruchamiającej java - w rzeczywistości jest to w ciągu znaków -XX:OnOutOfMemoryError.

Spróbuj zastąpienie jednego % z %% - według this question, czyli jak napisać dosłownego % w pliku BAT:

java -XX:OnOutOfMemoryError="taskkill /PID %%p" -Xmx%memory%K -jar MyApp.jar 
+0

Właśnie napisałem komentarz, to rozwiązuje problem! Pierwsze '%' w parametrze OnOutOfMemoryError musiało zostać zmienione za pomocą '%%'. Dzięki! –

+0

Bez problemu. Proszę rozważyć akceptację odpowiedzi :) –

+2

Nie, nie będę! Żartuję, po prostu muszę poczekać kilka minut, zanim będę mógł to zrobić: P –

Powiązane problemy