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/
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
15 | 여러가지 방법으로 특정 jar파일을 exclude하지 못하는 경우 해당 jar파일을 제외시키는 방법 | 2016.08.11 | 287 |
14 | jar파일의 dependency찾는 프로그램 | 2016.08.11 | 400 |
13 | compile할때와 exclude할때 대상을 표현하는 명칭이 다르므로 주의할것 | 2016.08.10 | 942 |
12 | 외부 jar파일을 만들려고하는jar파일의 package로 포함하는 방법 | 2016.08.10 | 176 |
11 | 로컬의 라이브러리파일들을 dependency에 포함시키는 방법 | 2016.08.09 | 643 |
10 | gradle을 이용하여 jar파일 생성시 provided속성을 지정할 수 있게 설정하는 방법 | 2016.08.09 | 601 |
9 | [SBT] assembly시 "[error] deduplicate: different file contents found in the following:"오류 발생시 조치사항 | 2016.08.04 | 1036 |
8 | [SBT] SBT 사용법 정리(링크) | 2016.08.04 | 1033 |
7 | [SBT] project.sbt에 libraryDependencies에 필요한 jar를 지정했으나 sbt compile할때 클래스를 못찾는 오류가 발생했을때 조치사항 | 2016.08.03 | 1148 |
6 | build할때 unmappable character for encoding MS949 에러 발생시 조치사항 | 2016.08.03 | 885 |
» | [sbt] sbt-assembly를 이용하여 실행에 필요한 모든 j라이브러리를 포함한 fat jar파일 만들기 | 2016.07.11 | 2130 |
4 | [sbt] sbt 0.13.11 를 windows에 설치하고 scala프로그램을 compile해서 jar파일 만들기 | 2016.07.11 | 651 |
3 | centos에 sbt 0.13.5 설치 | 2016.05.30 | 810 |
2 | git설명 한글판 | 2015.12.09 | 502 |
1 | pom.xml에서 build.gradle로 변환 | 2015.09.14 | 653 |