2016-11-19 1 views
0

sbt 어셈블리 및 기본 패키지 도구 플러그인을 가져온 스칼라 프로젝트가 있습니다.sbt DIST 및 어셈블리 명령 통합

이제 sbt assembly을 수행 할 수 있으며 내 프로젝트에 뚱뚱한 병을 만듭니다.

내가 원하는 경우 sbt dist이 팻 항아리는 zip 파일과 같은 기본 형식으로 패키지 된 패키지입니다.

그러나 내 프로젝트에 대해 sbt dist을 수행하면 모든 jar 파일이 포함 된 zip 파일이 만들어집니다. 내 뚱뚱한 병을 고르 진 않아.

내가 뚱뚱한 항아리를 원한다는 이유는 sbt dist이 맹목적으로 병합 전략없이 모든 것을 패키징하고 출력이 오류로 실패한다는 것입니다. build.sbt에서 병합 전략을 작성했기 때문에 내 뚱뚱한 항아리가 잘 작동합니다.

하지만 dist 명령으로 팻말을 포장 할 수는 없습니다.

답변

0

답을 찾았습니다. build.sbt 프로젝트 설정에 다음을 추가하십시오.

// add this on top of file 
import com.typesafe.sbt.SbtNativePackager._ 

// add this to project settings 
mappings in Universal := { 
    // universalMappings: Seq[(File,String)] 
    val universalMappings = (mappings in Universal).value 
    val fatJar = (assembly in Compile).value 

    // removing means filtering 
    // notice the "!" - it means NOT, so only keep those that do NOT have a name ending with "jar" 
    val filtered = universalMappings filter { 
    case (file, name) => ! name.endsWith(".jar") 
    } 

    // add the fat jar to our sequence of things that we've filtered 
    filtered :+ (fatJar -> ("lib/" + fatJar.getName))