Java Web Application 개발은 대부분 Eclipse 를 사용 해서 개발 한다. 소스 파일 작성은 확실히 편리 하다. 하지만 Tomcat 을 사용 할때 문제점 이 있다.
1. Class 파일의 로딩 지연 현상
개발 진행 중에 Start, Stop, reStart 를 하루에도 몇십번? 씩은 하고 있다. 서버가 Start 될 때 이런 문구를 발견 하게 된다. ClassNotFoundException, NoClassDefFoundError 확인 하기 위해 파일을 찾아 본다. 실제로 Class 가 있고, Build 도 되어 있다. 결국 Clean Tomcat Work Directory 를 하고 난 후에야 해결이 된다.
2. Java Library 충돌
최근에 프로젝트를 진행 하면서 경험한 부분 이다. dom4j 라이브러리를 사용 하는대 2가지 버전이 Dependency 되어 있었다. Eclipse Tomcat 사용 할 때는 정상적으로 동작 한다. 하지만 Maven Build 하여 서버에 적용 하면 아니러니 하게도 ClassCastException 이 발생 한다. 흔히 Local 개발 환경에서는 정상 동작 하는대 실제 서비스를 적용 하는 환경에서 발생 하는 에러의 일부분은 이와 같은 사례 이다.
mvn dependency:tree
라이브러리를 사용할 때 의존성에 대한 검사를 하는 습관을 갖게 되면 라이브러리 간에 충돌은 줄일 수 있다.
위 두가지 사례를 들었다. Eclipse 에서도 배포가 가능 하겠지만, 개발 환경이 항상 Eclipse 를 사용 하고 있을 수는 없을 것이다. Maven 은 직접 소스를 build 해서 war 로 만들 수 있다. 개발자가 불편을 감안 하고 직접 Tomcat 에 deploy 하여 실제 서비스 환경과 비슷한 환경에서 테스트를 진행 할 수 있고, 좀 더 편리한 환경에서 테스트를 하고 싶다면, Tomcat Plugin 을 사용하면 된다.
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <version>1.1</version> <configuration> <mode>war</mode> <port>8080</port> <path>/</path> <charset>UTF-8</charset> <uriEncoding>UTF-8</uriEncoding> </configuration> </plugin>
pom.xml 에 추가 하자.
mvn clean tomcat:run
packing 이 war 로 선언 되어 있다면, war 로 Build 한 후 서버가 시작 될 것이다.
D:\Project\workspace\whitelife>mvn clean tomcat:run -Denv=local [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building whitelife web application [INFO] task-segment: [clean, tomcat:run] [INFO] ------------------------------------------------------------------------ [INFO] [clean:clean {execution: default-clean}] [INFO] Deleting directory D:\Project\workspace\whitelife\target [INFO] Preparing tomcat:run [debug] execute contextualize [INFO] [resources:resources {execution: default-resources}] [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 28 resources [INFO] Copying 5 resources [INFO] [compiler:compile {execution: default-compile}] [INFO] Changes detected - recompiling the module! [INFO] Compiling 80 source files to D:\Project\workspace\whitelife\target\classes [INFO] [tomcat:run {execution: default-cli}] [INFO] Running war on http://localhost:8080/ [INFO] Creating Tomcat server configuration at D:\Project\workspace\whitelife\target\tomcat 2014. 11. 7 오전 11:29:16 org.apache.catalina.startup.Embedded start 정보: Starting tomcat server 2014. 11. 7 오전 11:29:16 org.apache.catalina.core.StandardEngine start 정보: Starting Servlet Engine: Apache Tomcat/6.0.29 2014. 11. 7 오전 11:29:16 org.apache.catalina.core.ApplicationContext log 정보: Initializing Spring root WebApplicationContext 2014-11-07 11:29:16,934 INFO ContextLoader - Root WebApplicationContext: initialization started
http://localhost:8080/ 에 접속 하여 확인 해보자.
위 방법을 사용 하면서 Eclipse 는 본연의 모습을 찾아 가는 것 같고, Maven 은 Project 에 대한 매니저 역할을 하는 것 같아 보인다.
개발자 마다 개인의 스타일이 있고, 편한 방법이 있다. 정답은 없지만, 본인이 편리하게 사용할 수 있는 방법으로 개발 하면 될 것이다.
'Maven' 카테고리의 다른 글
Maven Tomcat Plugin 사용 할 때 log4jdbc 에러 해결 방법 (0) | 2014.10.30 |
---|---|
Eclipse에 Maven 연동 후 경고 창이 뜰 경우. (0) | 2012.11.12 |
Eclipse에서 Maven Project 생성하기 (0) | 2012.11.09 |
Eclipse와 Maven 연동하기 (0) | 2012.11.08 |