2014-12-02 2 views
7

All'interno di un file bat ho il seguente:Come interrompere gli argomenti del programma Java in errore per gli argomenti VM?

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

I -folder e -destination params dovrebbero essere passato al metodo principale della classe Assegnazione essere chiamato, ma invece essi vengono interpretati come VM Args .

Ho provato a mettere le virgolette intorno ai parametri inutilmente, e la ricerca non rivela una risposta.

ottengo il seguente errore:

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

Mi accorgo che non si specifica un percorso di classe. I tuoi argomenti sono esattamente in quell'ordine? –

+0

Ho stabilito il percorso di classe prima della linea data. Sì, gli argomenti sono in questo ordine. –

+2

Mostraci il tuo file batch. Stai nascondendo qualcosa ... – icza

risposta

2

Penso che il tuo problema abbia più a che fare con il passaggio delle variabili. Rimuovi EnableDelayedExpansion EnableExtensions

+0

Questo funziona. Quindi pensavo di aver bisogno di "EnableDelayedExpansion EnableExtensions" perché in Cleanup.bat stavo usando "echo! FILETYPE!" e che stava fallendo, ma cambiarlo in "echo% FILETYPE%" e rimuovere "EnableDelayedExpansion EnableExtensions" farà funzionare java e tutte le variabili da stampare in modo appropriato. –

0

Il comando java ha la seguente sintassi:

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

Quindi nel tuo caso (classe) sembra che la classe non è stata trovata. Probabilmente a causa della mancanza del percorso di classe.

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

Forse meglio non fare affidamento sulla variabile CLASSPATH, utilizzare -jar e si basano su un META-INF/MANIFEST.MF.

+2

Perché si lamenterebbe di un'opzione non riconosciuta, invece di una classe non trovata? Mi rendo conto che non possiamo fare di meglio che prendere pugnalate al problema, ma questo non sembra spiegare il problema. – ajb

+1

@ajb sì leggendo i commenti suona un po 'vistoso. Forse rimuovere le opzioni, testare e quindi iniziare ad aggiungere opzioni. Anche un'altra classe principale avrebbe senso. –

+1

Se rimuovo "-DjobName =% FILETYPE% -Ddatabase.host = 127.0.0.1 -Ddatabase.name = db1 -Ddatabase.username = utente1 -Ddatabase.password = password1" eseguirà il programma anche se bombarderà per altri motivi. –