Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.
sbt [SBT] assembly시 "[error] deduplicate: different file contents found in the following:"오류 발생시 조치사항
1. assembly에 전체 jar를 포함하지 않도록 하는 경우
가. 메세지 내용
[error] deduplicate: different file contents found in the following:
[error]
C:Usersgooper.ivy2cacheorg.springframeworkspring-webjarsspring-web-4.0.5.RELEASE.jar:org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.class
[error] C:Usersgooper.ivy2cacheorg.springframeworkspring-webmvcjarsspring-webmvc-2.5.4.jar:org/springframework/web/multipart/support/DefaultMultipartHttpServletRequest.class
나. 조치사항
: libraryDependencies에서 "provided"를 지정해서 assembly에 포함되지 않도록 함
"org.springframework" % "spring-web" % "4.0.5.RELEASE" % "provided" ,
"org.springframework" % "spring-webmvc" % "4.0.5.RELEASE" % "provided",
2. provided를 지정해서 assembly에서 제외할 수는 없고 일부 jar파일만 제외해야 하는 상황
가. 메세지 내용
java.lang.RuntimeException: deduplicate: different file contents found in the following:
C:Usersgooper.ivy2cachestaxstax-apijarsstax-api-1.0.1.jar:javax/xml/XMLConstants.class
C:Usersgooper.ivy2cachexml-apisxml-apisjarsxml-apis-1.4.01.jar:javax/xml/XMLConstants.class
deduplicate: different file contents found in the following:
C:Usersgooper.ivy2cachestaxstax-apijarsstax-api-1.0.1.jar:javax/xml/namespace/NamespaceContext.class
C:Usersgooper.ivy2cachexml-apisxml-apisjarsxml-apis-1.4.01.jar:javax/xml/namespace/NamespaceContext.class
deduplicate: different file contents found in the following:
C:Usersgooper.ivy2cachestaxstax-apijarsstax-api-1.0.1.jar:javax/xml/namespace/QName.class
C:Usersgooper.ivy2cachexml-apisxml-apisjarsxml-apis-1.4.01.jar:javax/xml/namespace/QName.class
....
나. 조치사항
: 포함되는 jar를 찾아서 exclude를 지정한다.
libraryDependencies에서 ("org.apache.jena" % "jena-core" % "3.1.0").exclude("stax", "stax-apis").exclude("xml-apis", "xml-apis")를 지정해준다.
*참고 : https://mvnrepository.com에서 "stax-api"를 검색하며 해당 jar의 groupId와 artifactId를 확인해서
exclude(groupId, artifactId)를 지정해주면된다.
*어떤 jar가 문제되는 jar를 포함하고 있는지 확인하기가 힘든데.. provided로 지정되지 않은 jar에 exclude를 지정해서 "sbt assembly"를
수행해서 정상적으로 assembly되는 케이스를 반복해서 찾아야함.