Maven - 의존성 관리시 주의사항

8 June 2020 · 1 minute read

Maven 프로젝트는 외부 모듈을 참조할때 maven repository로부터 참조 대상을 POM 파일의 의존성 항목에 추가해서 관리한다.

<dependencies>
    <dependency>
        <groupId>$groupId</groupId>
        <artifactId>$artifactId</artifactId>
        <version>$version</version>
    </dependency>
</dependencies>

참조로 하는 모듈은 maven import시 프로젝트의 classpath에 참조 대상 라이브러리로 추가되고, 만약 그 모듈이 다시 참조하는 모듈이 있는 경우 그 모듈도 classpath에 함께 추가된다.

이로인해 발생하는 주의해야 할 부분이 발생한다.

따라서 어떤 모듈을 의존성에 추가할때, 하위 참조 모듈은 classpath에 추가되지 않도록 설정하거나 -(1) 상위 모듈을 제거할 때 하위 참조 모듈을 명시적으로 의존성에 추가 -(2) 해줘야 한다.

(1)의 경우

<dependency>
    <groupId>$groupId</groupId>
    <artifactId>$artifactId</artifactId>
    <version>$version</version>
    <exclusions>
    <exclusion>
        <groupId>$child_groupId</groupId>
        <artifactId>$child_artifactId</artifactId>
    </exclusion>
    </exclusions>
</dependency>

exclusion 항목에 모듈 groupId, artifactId를 지정하면 된다.

(2)의 경우

<dependency>
    <groupId>$child_groupId</groupId>
    <artifactId>$child_artifactId</artifactId>
    <version>$child_version</version>
</dependency>

이와 같이 하위 모듈을 의존성에 추가하고 상위 모듈은 제거한다.

교휸

POM의 의존성을 변경하거나 제거할 때에는 추가할 때 보다 참조 오류가 발생하지 않을지 신중히 작업해야 한다. 커밋을 하기 전, Maven 캐시와 먼저 빌드된 타겟 디렉토리는 완전히 삭제하고 제빌드해서 빌드 오류 여부를 반드시 확인한다. (IDE에서 maven reimport, rebuild proejct 두 가지만 확실히 해줘도 충분할 듯 하다. 😂)

Updated 8 June 2020