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