반응형

Maven - External Dependencies


(원문 위치 : http://www.tutorialspoint.com/maven/maven_external_dependencies.htm )

이제 Maven이 Maven Repositories의 개념([004] 강좌 참조)을 사용하여 의존관계(dependency) 관리를 하는 것을 알았지만, 만약 의존관계가 원격저장소와 중앙조장소에서 가능하지 않는 상황이 발생한다면? Maven은 'External dependency'의 개념을 사용하여 이같은 scenario에 대한 답을 제공한다.

예를 들면, 이전강좌에서 만든 프로젝트를 아래와 같이 변경해보자.
    - 소스폴더에 lib폴더를 추가한다.
    - lib폴더에 아무 jar파일을 복사한다. 여기서는 LDAP 운영을 위한 helper library인 ldapjdk.jar를 사용했다.

이제 프로젝트 구조는 아래와 같이 보일 것이다.
external repository project structure
여기서 프로젝트에 구체적인 library를 가지고 있다. 이는 매우 평범한 사례이고 다운로드하기 위한 maven에 대해 어떠한 저장소에서도 가능하지 않는 jar를 포함할 수 있다.(** Maven framework에 의해 자동으로 다운로드 받기 힘든 jar파일을 이야기 하고 있는 것 같다.) 만약 코드가 Maven과 함께 이 library를 사용하고 있다면 Maven build는 컴파일 단계동안 이 library에 대한 참조 또는 다운로드를 할 수 없기 때문에 실패할 것이다.

이런 상황을 제어하기위해, 아래 방법을 사용하여 pom.xml에 external dependency를 추가한다.
<project xmlns="http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.bank</groupId>
   <artifactId>consumerBanking</artifactId>
   <packaging>jar</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>consumerBanking</name>
   <url>http://maven.apache.org</url>

   <dependencies>
      <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
      </dependency>

      <dependency>
         <groupId>ldapjdk</groupId>
         <artifactId>ldapjdk</artifactId>
         <scope>system</scope>
         <version>1.0</version>
         <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
      </dependency>
   </dependencies>

</project>
위 예제에서 dependencies아래 두번째 dependency 요소를 보자. 이것은 External Dependency에 대한 아래 주요개념을 명확하게 한다.
  • External dependencies (library jar location) can be configured in pom.xml in same way as other dependencies. (External dependencies - library jar 위치 - 는 다른 의존관계와 동일한 방법으로 pom.xml에 설정되어 질 수 있다.)

  • Specify groupId same as name of the library. (library이름과 동일한 groupId를 명시한다.)

  • Specify artifactId same as name of the library. (library이름과 동일한 artifactId를 명시한다.)

  • Specify scope as system. (system으로 범위-scope-를 명시한다.)

  • Specify system path relative to project location. (프로젝트 위치와 관계된 system 경로를 명시한다.)



반응형

+ Recent posts