Maven 의존성 전달 예제

Maven 프로젝트에서 의존성 전달 메커니즘을 확인하는 실습입니다.

단계1: 프로젝트 생성

Eclipse에서 새로운 Maven 프로젝트를 생성합니다.

  • 파일 > 새 프로젝트 > Maven 프로젝트 선택
  • 기본 워크스페이스 사용 체크
  • maven-archetype-quickstart 템플릿 선택
  • 프로젝트 매개변수 설정 후 완료

프로젝트 구조 설정:

  • 그룹 ID: 조직 식별자 (패키지 구조와 일치)
  • 아티팩트 ID: 프로젝트 이름
  • 버전: 프로젝트 버전
  • 패키징: 기본 jar 형식

세 개의 프로젝트(testDep.AAA, testDep.BBB, testDep.CCC)를 각각 생성합니다.

단계2: 의존 관계 설정

pom.xml 파일에 의존성을 정의합니다. BBB는 AAA에 의존, CCC는 BBB에 의존하는 구조로 설정합니다.

AAA 프로젝트의 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.aaa</groupId>
  <artifactId>projectA</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

BBB 프로젝트의 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.bbb</groupId>
  <artifactId>projectB</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.example.aaa</groupId>
      <artifactId>projectA</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>
</project>

CCC 프로젝트의 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.ccc</groupId>
  <artifactId>projectC</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.example.bbb</groupId>
      <artifactId>projectB</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>    
  </dependencies>
</project>

단계3: 빌드 및 로컬 저장소 설치

필요한 라이브러리가 저장소에 존재해야 합니다. 다음 명령어로 설치합니다.

AAA 프로젝트 빌드:

  • pom.xml 파일 선택 후 Maven Build 실행
  • Goals: compile 또는 clean compile 입력

AAA 설치:

  • pom.xml 파일 선택 후 Maven Install 실행

BBB 설치 결과:

[INFO] Installing projectB-0.0.1-SNAPSHOT.jar to local repository
[INFO] Installing projectB-0.0.1-SNAPSHOT.pom to local repository

CCC 빌드 결과:

[INFO] Building projectC 0.0.1-SNAPSHOT
[INFO] Nothing to compile - all classes are up to date
[INFO] BUILD SUCCESS

단계4: 의존성 전달 확인

의존성 트리 분석:

  • projectB는 projectA를 직접 의존
  • projectC는 projectB를 통해 projectA를 간접 의존

단계5: 의존성 제외 설정

projectC의 pom.xml에 다음 내용 추가하여 projectA 제외:

<exclusions> 
  <exclusion>
    <groupId>com.example.aaa</groupId>        
    <artifactId>projectA</artifactId> 
  </exclusion> 
</exclusions>

수정된 pom.xml:

<dependency>
  <groupId>com.example.bbb</groupId>
  <artifactId>projectB</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <exclusions> 
    <exclusion>
      <groupId>com.example.aaa</groupId>        
      <artifactId>projectA</artifactId> 
    </exclusion> 
  </exclusions>        
</dependency>

제외 후 빌드 결과:

[INFO] Nothing to compile - all classes are up to date
[INFO] BUILD SUCCESS

태그: maven Dependency Management Project Configuration POM File Build Process

5월 30일 13:44에 게시됨