'Jdbc Driver class not found'에 해당되는 글 1건

  1. 2009.11.10 Maven SQL Plugin 사용시 JDBC Driver 찾지 못하는 문제
6장 Maven을 이용한 빌드 자동화 ⅱ 
01. SQL 플러그인으로 데이타베이스 통합하기 

실행도중 해결하지 못한 문제다.
SQL 플러그인으로 개발 과정에서의 데이타 베이스 관련 문제를 해결할수 있는 방편중 하나이다.
테스트/개발 기간에 사용하는 데이타베이스를 프로젝트를 Deploy하는 시기에 초기화를 하는 과정이었다.

JDBC Driver를 찾지 못하는 문제가 계속 발생하였다.

1. Local Repository 검색
pom.xml에 의해 선언된 라이브러리는 Repository에 저장되게 되는데
그 위치는 MAVEN_HOME의 settings.xml에 선언된다. 
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ~/.m2/repository
     <localRepository>D:\MyDev\MavenRepository_test</localRepository>
  -->
     <localRepository>~/.m2/repository</localRepository>
유저 홈디렉토리에 저장되게 되는데 XP라서 C:\Documents and Settings\Administrator\.m2 디렉토리에 저장되게 되는데, 공백이 들어가서 문제가 생기나 싶어서, 다른 디렉토리로 변경하여 빌드해봄.
<localRepository>D:/MyDev/MavenRepository</localRepository>
결과는 동일함. mysql을 사용했었는데 connector를 찾지 못함.

2. pom.xml 설정 체크 및 변경
<project>
...
   <dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.5</version>
<scope>compile</scope>
<systemPath>D:/MyDev/MavenRepository_test/mysql/mysql-connector-java/5.0.5/mysql-connector-java-5.0.5.jar</systemPath>
</dependency>
   </dependencies>
...
</project>
프로젝트 엘리먼트 자식엘리먼트로 <dependencies>아래 설정하고 
  <properties>
<jdbc.host>localhost</jdbc.host>
<jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
<jdbc.dbname>mywebproject</jdbc.dbname>
<jdbc.username>root</jdbc.username>
<jdbc.password>vudghkfmf</jdbc.password>
  </properties>
로 <properties>에서 정의하고 <plugin>에서 불러다 사용하는 것으로 되어있었지만,
Maven 사이트의 예제대로 변경.
다음이 Maven예제 스타일.
<plugin>
.....
  <configuration>
          <driver>com.mysql.jdbc.Driver</driver>
          <url>jdbc:mysql://${jdbc.host}/${jdbc.dbname}</url>
          <username>${jdbc.username}</username>
          <password>${jdbc.password}</password>
  </configuration>

   <executions>
<execution>
<id>process-test-resources</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<driver>${jdbc.driver}</driver>
<url>jdbc:mysql://${jdbc.host}/mysql</url>
<sqlCommand>drop database ${jdbc.dbname}</sqlCommand>
<autocommit>true</autocommit>
<onError>continue</onError>
</configuration>
</execution>
...
<plugin>의 하위 엘리먼트로 <configuration> 엘리먼트에서 DB url, 계정, 패스워드등을 설정하는 스타일로 변경.

하지만, build시 오류는 계속 발생함.

3. 구글링 결과
비슷한 케이스를 검색한 결과, MAVEN_HOME/lib에 jdbc 드라이버를 넣고 빌드하는 경우는 오류가 나지 않았다.
같은 방법으로 로컬 저장소에 있는 jar파일을 복사하여 빌드하니 빌드가 이루어짐.
의문점은 의존성(dependency)을 정의하여 필요한 라이브러리를 다운로드 할수 있는데, 왜 Driver 클래스를 찾을수 없다고 나오는지 의문임. 의존성에 따라서 다운받은 jar파일을 사용하면 될것아닌지....

ps.
..참 따라하기 힘든 책이다 ㅋㅋ. 환경이 변하고, 버전이 업되기 때문에 따라하는데 오류 속출...



Posted by 영겁회귀