I had a ridiculous battle with a set of .bat scripts that I wrote to launch java command line applications on Windows. I'm working on a suite of related little tools that I bundle into a zip file with a bunch of .jar files under a /lib/ folder, and launch scripts under a /bin/ folder that each look something like this:
@echo off if not defined JAVACMD set JAVACMD=java.exe if defined JAVA_HOME set JAVACMD="%JAVA_HOME%\bin\java.exe" %JAVACMD% "-Djava.util.logging.config.file=%~dps0..\config\logging.properties" -cp "%~dps0..\lib\*" run.my.App %*
So I'm trying to use the nifty java classpath * wildcard introduced with java 6, but I had a terrible time with windows insisting on expanding /lib/* in the shell regardless of how I tried to quote or escape the thing! I was driving myself crazy, when I finally got the genious idea to just add a semicolon, so /lib/*; doesn't look like a path to Windows Powershell or CMD (I guess), and the following works:
@echo off if not defined JAVACMD set JAVACMD=java.exe if defined JAVA_HOME set JAVACMD="%JAVA_HOME%\bin\java.exe" %JAVACMD% "-Djava.util.logging.config.file=%~dps0..\config\logging.properties" -cp "%~dps0..\lib\*;" run.my.App %*
What an amazingly stupid waste of time!
Thank you for this idea, I'm fighting with the same issue currently.
ReplyDeleteCould you tell me the version of java and windows you're using?
Hi Ankon - I was using jdk6 at the time (don't know which sub-version) on Windows 7 - Good luck!
ReplyDelete