cygwin에서 classpath와 함께 java 콘솔 프로그램 실행하기
책(Groovy Recipes)을 보다가 간단한 groovy 프로그램을 groovyc로 컴파일한 후 실행하려고 했더니 잘 안된다.
$ java -classpath .:$GROOVY_HOME/embeddable/groovy-all-1.7.0.jar Greet
Exception in thread "main" java.lang.NoClassDefFoundError: Greet
Caused by: java.lang.ClassNotFoundException: Greet
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
보아하니 java 클래스로 컴파일된 groovy 파일을 실행하려면 필요한 groovy-all-1.7.0.jar 파일이 classpath로 안잡히는 거다.
cygwin에서 실행되는 java.exe는 윈도우용이라서 cygwin의 path 방식(유닉스 형식)을 이해할 수가 없다. 따라서 윈도우 방식의 path로 바꿔줘야한다.
$ java -classpath `cygpath -wp .:$GROOVY_HOME/embeddable/groovy-all-1.7.0.jar` Greet
Groovy Rocks!