메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


1. sbt-assembly 추가(project/assembly.sbt파일에 아래 내용을 추가함)

  addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.3")


2. project.sbt(혹은 build.sbt) 파일에 아래의 내용을 추가한다.

(scala 2.10.4에 spark 1.5.0을 사용하는 하는 프로그램을 작성하는 경우임)


import sbtassembly.AssemblyPlugin._


name := "icbms"


version := "1.0"


 //scalaVersion := "2.11.8"

scalaVersion := "2.10.4"


resolvers += "Akka Repository" at "http://repo.akka.io/releases/"


libraryDependencies ++= Seq(

("org.apache.spark" %% "spark-core" % "1.5.0" % "provided")

.exclude("org.mortbay.jetty", "servlet-api").

    exclude("commons-beanutils", "commons-beanutils-core").

    exclude("commons-collections", "commons-collections").

    exclude("commons-logging", "commons-logging").

    exclude("com.esotericsoftware.minlog", "minlog").exclude("com.codahale.metrics", "metrics-core")

,

"org.apache.spark" %% "spark-sql" % "1.5.0" ,

"org.apache.spark" % "spark-streaming_2.10" % "1.6.2",

"org.apache.spark" % "spark-streaming-kafka_2.10" % "1.6.2" ,

"org.apache.avro" % "avro" % "1.7.7" 

)


assemblyMergeStrategy in assembly := {

    case PathList("javax", "servlet", xs @ _*) => MergeStrategy.last

    case PathList("javax", "activation", xs @ _*) => MergeStrategy.last

    case PathList("org", "apache", xs @ _*) => MergeStrategy.last

    case PathList("com", "google", xs @ _*) => MergeStrategy.last

    case PathList("com", "esotericsoftware", xs @ _*) => MergeStrategy.last

    case PathList("com", "codahale", xs @ _*) => MergeStrategy.last

    case PathList("com", "yammer", xs @ _*) => MergeStrategy.last

    case "about.html" => MergeStrategy.rename

    case "META-INF/ECLIPSEF.RSA" => MergeStrategy.last

    case "META-INF/mailcap" => MergeStrategy.last

    case "META-INF/mimetypes.default" => MergeStrategy.last

    case "plugin.properties" => MergeStrategy.last

    case "log4j.properties" => MergeStrategy.last

    case x =>

        val oldStrategy = (assemblyMergeStrategy in assembly).value

        oldStrategy(x)

}


3. fat jar만들기(프로젝트의 project 폴더에서 아래의 명령을 실행한다)

 sbt clean

 sbt update

 sbt compile

 sbt package

 sbt assembly


혹은 sbt clean update compile package assembly 를 연속 실행해도 된다.



* 참고 : https://github.com/sbt/sbt-assembly/

위로