<
sbt打包程序
>
上一篇

Elasticsearch自定义分词器
下一篇

Linux常用命令
sbt打包scala程序

Assembly Jar(组合Jar)与普通Jar的区别就是Assembly Jar会将所有的依赖都打进Jar中,最后生成的包比较大

打包spark程序步骤如下,sbt版本0.13.17:

1. 在project下创建plugins.sbt,并添加内容
    addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")
    
2. 修改build.sbt文件,添加以下内容
    assemblyJarName in assembly := "first-spark-assembly.jar" # 配置jar的名字
    assemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false) # 把scala本身排除在组合jar之外,因为spark已经包含了scala

3. 运行 sbt clean assembly

依赖项,%%表示测试时需要,一般为%; % “provided”表示此依赖不打入最终的jar文件内,提交到spark集群中所有spark相关的jar不需要打入到Assembly Jar中

libraryDependencies+="org.apache.spark"%%"spark-core"%"2.2.0"%"provided"

使用阿里云的仓库

resolvers+="aliyun Maven Repository"at"http://maven.aliyun.com/nexus/content/groups/public"
externalResolvers:= Resolver.withDefaultResolvers(resolvers.value,mavenCentral=false)

指定java版本

javacOptions++=Seq("-source","1.8","-target","1.8")

指定主函数

mainClass in Compile:=Some("org.apache.spark.WordCount")

如果有些jar包maven仓库没有,而工程中确实要用到,你可以在项目根录下建立lib文件夹,将额外的jar放进去即可。
或者可以自定义lib文件夹的名称,例如:

unmanagedBase := "mylib"

然后将用到的jar包放到工程根目录的mylib文件夹下,sbt会自动将lib下的jar包中的类加到最终的Assembly Jar中。

sbt打包错误

Unable to find credentials for [Sonatype Nexus Repository Manager @ nx.company.cn]

解决方案:build.sbt文件中添加
credentials += Credentials("Sonatype Nexus Repository Manager", "nx.company.cn", "user", "password")

sbt-native-packager

1. 在project下创建plugins.sbt,并添加内容
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.15")

2. 在build.sbt中开启插件支持,JavaAppPackaging只是一种,下面是举例
enablePlugins(JavaAppPackaging)

3. sbt <config-scope>:<config-type>

	例:sbt universal:packageBin

	universal:packageBin - Generates a universal zip file
	universal:packageZipTarball - Generates a universal tgz file
	debian:packageBin - Generates a deb
	docker:publishLocal - Builds a Docker image using the local Docker server
	rpm:packageBin - Generates an rpm
	universal:packageOsxDmg - Generates a DMG file with the same contents as the universal zip/tgz.
	windows:packageBin - Generates an MSI

sbt-native-packager使用参见官方文档

Top
Foot