sbt-assembly 发布 Scala 项目

sbt-assembly 是一个非常实用的sbt插件,可以将当前项目的二进制包以及依赖的所有第三方库都打包成一个jar包发布,即one-jar, 对于那种直接运行的应用程序很方便。

sbt版本:0.13.5 

使用方法如下:

1、手工建立 ./project/assembly.sbt(用于下载sbt-assembly插件):

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

 2、手工建立 ./assembly.sbt(注意:文件放在根目录下,主要作用是对assembly进行设置):

import AssemblyKeys._ // put this at the top of the file

assemblySettings

// your assembly settings here

3、运行assembly任务,生成./target/scala_x.x.x/projectname-assembly-x.x.x.jar

> assembly


一个可参考的assembly配置:
import AssemblyKeys._


assemblySettings


jarName in assembly := "gogo.jar"


test in assembly := {}


mainClass in assembly := Some( "barnes.BoundMat01")


assemblyOption in packageDependency ~= { _.copy(appendContentHash = true) }


mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
  {
    case PathList(ps @ _*) if ps.last endsWith "axiom.xml" => MergeStrategy.filterDistinctLines
    case PathList(ps @ _*) if ps.last endsWith "Log.class" => MergeStrategy.first
    case PathList(ps @ _*) if ps.last endsWith "LogConfigurationException.class" => MergeStrategy.first
    case PathList(ps @ _*) if ps.last endsWith "LogFactory.class" => MergeStrategy.first
    case PathList(ps @ _*) if ps.last endsWith "SimpleLog$1.class" => MergeStrategy.first
    case x => old(x)
  }
}
出现错误的解决方法:
    错误信息如下
[error] (*:assembly) deduplicate: different file contents found in the following:
[error] /home/mslinn/.ivy2/cache/org.fusesource.jansi/jansi/jars/jansi-1.4.jar:org/fusesource/jansi/Ansi$1.class
[error] /home/mslinn/.ivy2/cache/org.scala-lang/jline/jars/jline-2.10.2.jar:org/fusesource/jansi/Ansi$1.class
   解决方法:
   首先,用 sbt-dependency-graph插件打印项目的依赖关系,确定上述错误中的jar包之间的关系。
   然后,在assembly的配置文件中,根据具体情况配置  mergeStrategy 。

参考:
1、https://github.com/sbt/sbt-assembly
2、https://github.com/sbt/sbt-assembly/issues/92






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值