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!

신고