마니의 공부방/Java

[maven] local repository dependency 추가

메이븐 중앙 리포지토리에서 관리되고 있지 않은 라이브러리를 maven 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>
	...
</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\cruxon\.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 명령어를 실행시켜야 하는 수고가 필요하다.

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

 

example

코드수정중에 있습니다.