이 제목의 에러가 발생했다면 실행가능한 jar 파일 (혹은 fat-jar)를 빌드하는 과정에서 발생한 문제일 것입니다.
이는 Jar 파일로 만들려는 라이브러리 중에 하나가, META-INF/DEPENDENCIES 라는 이름의 파일을 두개 이상 가지고 있기 때문입니다.
따라서, 같은 이름의 파일이 나오면 어떻게 할 지 대처방안을 제시해주면 해결 됩니다.
예시,
plugins {
id 'java'
}
group = 'com.example'
version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.slf4j:slf4j-simple:1.7.30'
implementation 'org.apache.hadoop:hadoop-client:3.3.6'
implementation 'org.apache.kafka:kafka-clients:2.5.1'
}
jar{
enabled=true
archiveClassifier = '' // use empty string
from { // 의존성 포함
configurations.runtimeClasspath.collect {
it.isDirectory() ? it : zipTree(it)
}
}
duplicatesStrategy = DuplicatesStrategy.EXCLUDE // 중복처리 전력 제시해주는 부분
}
하지만, 이렇게 하면 META-INF/DEPENDENCIES 중 일부를 유실함으로, 클래스로드가 정상적으로 안되는 경우도 있습니다.
저의 경우 하둡의 파일시스템 클래스중 distributed file system(DFS이 로드 되지 않고 로컬 파일시스템만이 로드 되었습니다. DFS 클래스를 지칭하는 META-INF/DEPENDENCIES이 유실되었기 때문입니다.
configuration.set("fs.hdfs.impl",
org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()
);
이를 소스 코드에 직접 클래스를 설정해주어 유실된 메타파일이 필요없게 설정해줄 수 있었습니다. 소스코드가 더 늘어난다는 문제점이 있고 앞으로도 같은 문제가 반복될 수 있어 아쉽지만 일단은 해결되었으니 더 나은 해결책을 찾는다면 추후에 추가하겠습니다.