Exception in thread 'main' java.lang.NoClassDefFoundError 혹은 Could not find the main class 에러

By | 2월 4, 2012

이 에러에 대해서 검색해 보면 주로 자바 컴파일러의 버전에 관한 이야기가 많이 나온다.
그러나 나는 배치 실행 스크립트를 개발하던 중, 초보적인 실수 때문에 이 에러를 접하게 되었었는데...

그 문제란 바로 따옴표 문제였다.

. 이나 - 등 특수문자 비스무리 한 것들이 들어간 파일경로들의 묶음이 클래스패스로 들어갈 경우나,
배치 실행파일의 각각의 인수들을 따옴표로 묶어주지 않을 경우, 잘못 인식하는 상황이 발생하는 것이었다.

* 배치 cmd 파일 예시

    @echo off
    
    SET JAVA_HOME=C:\FrameOne\jdk1.6.0_29
    SET PATH=%PATH%;%JAVA_HOME%\bin;
    
    SET BATCH_HOME=C:\FrameOne\workspace\ProjectName-Batch
    
    SET BATCH_CONFIG=%BATCH_HOME%\src\config\system\projectNameBatch.xml
    SET BACKOFFICE_CONFIG=C:\FrameOne\workspace\ProjectName-Backoffice\src\config\system\projectNameBackoffice.xml
    
    @REM CORE classpath
    SET CP="
    SET CP=%CP%;C:\FrameOne\workspace\FrameOne-core-1.0\build\classes;
    
    @REM log4sql
    SET CP=%CP%;C:\FrameOne\workspace\ProjectName-Library\frameone\lib\log4sql.jar;
    
    SET CP=%CP%;%BATCH_HOME%\inf\lib\asm-3.2.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\aspectjrt.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\aspectjweaver-1.6.2.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\cglib-2.2.jar;
    @REM SET CP=%CP%;%BATCH_HOME%\inf\lib\cgvsms-lib.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\commons-beanutils-1.7.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\commons-collections-3.2.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\commons-configuration-1.6.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\commons-digester-1.8.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\commons-io-1.4.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\commons-lang-2.4.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\commons-logging-1.1.1.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\dom4j-1.6.1.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\ibatis-2.3.4.726.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\javaee.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\junit-4.4.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\log4j-1.2.15.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\mail.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\miplatform-3.2.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\ojdbc6.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\ooxml-schemas-1.0.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\poi-3.5.jar;                                       
    SET CP=%CP%;%BATCH_HOME%\inf\lib\poi-ooxml-3.5.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\spring-2.5.6.jar;
    @REM SET CP=%CP%;%BATCH_HOME%\inf\lib\ucf-lib.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\lib\xbean.jar;
    SET CP=%CP%;%BATCH_HOME%\inf\classes;
    
    SET CP=%CP%;"
    
    @REM ECHO CP=%CP%
    
    @REM 각각의 치환되는 인수들을 이 cmd파일의 인수로 입력할 때에도 따옴표로 묶어주는 것이 좋다!
 
    %JAVA_HOME%\bin\java -classpath %CP% -Dconfig=%BATCH_CONFIG%,%BACKOFFICE_CONFIG% -Dbatch.name=%2 -Drundate=%3 -Duserdata=%4 -Djobno=%5 frameone.core.batch.common.BatchOnDemandExecutor %1 > C:/tmp/batchOnDemand.log 
    
    PAUSE

 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments