본문 바로가기
개발툴

third party library 사설 리포지토리 없이 dependency 추가하기

by 탁구치는 개발자 2014. 6. 2.

메이븐 중앙 리포지토리에서 관리되고 있지 않은 라이브러리를 maven dependency에 추가해 주고 싶을 경우가 있다.

회사에서 제공해 주는 jar 파일을 현재 개발중인 메이븐 프로젝트에 추가해 줘야 하는 상황이 발생하였고, 이와 같이 maven 리포지토리에 저장되어 있지 않은 jar 파일을 메이븐 프로젝트에서 사용하기 위해서는 사설 리포지토리를 구축해야지만 dependency를 추가한 후 해당 jar 파일을 사용할 수 있는 것으로 알고 있었다.


헌데 사설 리포지토리를 구축하지 않아도 third party library를 dependency 해 줄 수 있는 방법이 있었다.

메이븐 프로젝트의 특정 디렉토리를 repository로 등록하는 방법이다.

<repositories>

<repository>

<id>My-Project</id>

<name>My-Project Custom Jars</name>

<url>file://${project.basedir}/ext_lib</url>

</repository>

<repository>

<id>springsource-repo</id>

<url>http://repo.springsource.org/release</url>

</repository>

<repository>

<id>jboss-repo</id>

<url>https://repository.jboss.org/nexus/content/groups/public/</url>

</repository>

</repositories>


위에 추가된 repository중 url이 file로 시작되는 설정이 특정 디렉토리를 repository로 등록하는 부분이다.

${project.basedir} 은 pom.xml 파일이 존재하는 프로젝트의 이름을 가져온다.


제공 받은 CompanyLib-1.0.0.jar 파일의 패키지가 com.company.platform.core 와 같다면 다음과 같이 ext_lib 디렉토리 하위에 com/company/platform/core/CompanyLib/1.0.0 디렉토리를 생성한다.

그런 후 해당 디렉토리에 CompanyLib-1.0.0.jar 파일을 넣어주면 끝.


pom.xml에 다음과 같이 dependency를 추가해 준다.

<dependency>

<groupId>com.company.platform.core</groupId>

<artifactId>CompanyLib</artifactId>

<version>1.0.0</version>

<scope>compile</scope>

</dependency>


일단 위와 같이 설정을 하면 pom.xml 에서는 Missing artifact com.company.platform.core:CompanyLib:jar:1.0.0 와 같은 에러 메세지를 출력하게 되는데 이는 로컬 리포지토리에 해당 라이브러리가 배포되어 있지 않아서 발생되는 현상이다.

즉, pom.xml 파일에 정의되어 있는 dependency 설정들은 모두 local repository의 디렉토리를 참조하게 되는데 내 로컬 PC의 C:\Users\nklee\.m2\repository 경로에 com/company/platform/core/CompanyLib/1.0.0/CompanyLib-1.0.0.jar 파일이 존재하지 않기 때문에 발생되는 것이다.


이를 해결하기 위해서는 maven goal(mvn package) 을 실행시켜서 로컬리포지토리에 CompanyLib-1.0.0.jar파일을 배포시키면 된다.


이처럼 third party library를 maven local repository에 배포시키기 위해서는 다른 개발자들도 로컬에서 mvn package goal 명령어를 실행시켜야 하는 수고가 필요하다.

하지만 사설리포지토리를 설치할 수 없는 환경이거나 단 한 개의 라이브러리를 위해서 사설 리포지토리를 셋팅해야 하는것 보다는 좋은 대안이 될 수 있을 것 같다.