相关疑难解决方法(0)

使用sbt-assembly进行汇编合并策略问题

我正在尝试使用sbt-assembly将scala项目转换为可部署的胖jar .当我在sbt中运行我的程序集任务时,我收到以下错误:

Merging 'org/apache/commons/logging/impl/SimpleLog.class' with strategy 'deduplicate'
    :assembly: deduplicate: different file contents found in the following:
    [error] /Users/home/.ivy2/cache/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar:org/apache/commons/logging/impl/SimpleLog.class
    [error] /Users/home/.ivy2/cache/org.slf4j/jcl-over-slf4j/jars/jcl-over-slf4j-1.6.4.jar:org/apache/commons/logging/impl/SimpleLog.class
Run Code Online (Sandbox Code Playgroud)

现在来自sbt-assembly文档:

如果多个文件共享相同的相对路径(例如,多个依赖项JAR中名为application.conf的资源),则默认策略是验证所有候选项具有相同的内容,否则出错.可以使用以下内置策略之一或编写自定义策略在每个路径的基础上配置此行为:

  • MergeStrategy.deduplicate 是上面描述的默认值
  • MergeStrategy.first 选择classpath顺序中的第一个匹配文件
  • MergeStrategy.last 挑选最后一个
  • MergeStrategy.singleOrError 在冲突时出现错误消息
  • MergeStrategy.concat 简单地连接所有匹配的文件并包含结果
  • MergeStrategy.filterDistinctLines 也可以连接,但在此过程中会留下重复的内容
  • MergeStrategy.rename 重命名源自jar文件的文件
  • MergeStrategy.discard 只是丢弃匹配的文件

通过这个我设置我的build.sbt如下:

import sbt._
import Keys._
import sbtassembly.Plugin._
import AssemblyKeys._
name := "my-project"
version := "0.1"
scalaVersion := "2.9.2"
crossScalaVersions := Seq("2.9.1","2.9.2")

//assemblySettings
seq(assemblySettings: _*)

resolvers ++= Seq(
    "Typesafe Releases Repository" at "http://repo.typesafe.com/typesafe/releases/",
    "Typesafe Snapshots Repository" at "http://repo.typesafe.com/typesafe/snapshots/",
    "Sonatype Repository" at …
Run Code Online (Sandbox Code Playgroud)

deployment scala executable-jar sbt sbt-assembly

26
推荐指数
4
解决办法
3万
查看次数

标签 统计

deployment ×1

executable-jar ×1

sbt ×1

sbt-assembly ×1

scala ×1