标签: sbt-assembly

SBT:如何将类的实例打包为JAR?

我的代码基本上是这样的:

class FoodTrainer(images: S3Path) { // data is >100GB file living in S3
  def train(): FoodClassifier       // Very expensive - takes ~5 hours!
}

class FoodClassifier {          // Light-weight API class
  def isHotDog(input: Image): Boolean
}
Run Code Online (Sandbox Code Playgroud)

我想在JAR-assembly(sbt assembly)时,调用val classifier = new FoodTrainer(s3Dir).train()并发布JAR,该classifier实例可立即供下游库用户使用.

最简单的方法是什么?对此有哪些既定范式?我知道它是ML项目中一个相当常见的成语,用于发布经过训练的模型,例如http://nlp.stanford.edu/software/stanford-corenlp-models-current.jar

如何sbt assembly在不必将大型模型类或数据文件签入我的版本控制的情况下执行此操作?

java scala jar sbt sbt-assembly

7
推荐指数
1
解决办法
309
查看次数

创建包含 SBT 项目+子项目中所有测试的程序集 jar

我有一个有趣的问题,我基本上需要创建一个.jar(加上所有的类路径依赖项),其中包含一个 SBT 项目(加上它的任何子项目)的所有测试。这个想法是我可以只使用运行 jarjava -jar并且所有测试都将执行。

我听说这可能与 sbt-assembly 有关,但您必须手动运行您拥有assembly的每个 sbt 子项目(每个子项目都有自己的.jars),理想情况下,我只想运行一个命令,.jar为您碰巧拥有的每个 sbt root+sub 项目中的每个测试(以同样的方式,如果您test在带有子项目的 sbt 项目中运行,它将为所有内容运行测试)。

我们当前使用的测试框架是 specs2,但我不确定这是否有所不同。

有谁知道这是否可能?

scala sbt specs2 sbt-assembly sbt-native-packager

7
推荐指数
1
解决办法
231
查看次数

在jar中包含Hyperic Sigar库,同时为Scala项目使用sbt程序集

我正在用sbt构建一个Scala项目,并使用sbt-assembly插件创建一个胖jar.我可以通过添加以下内容来添加非托管jar(例如Sigar jar)build.sbt.

unmanagedJars in Compile +=
    file("lib/hyperic-sigar-1.6.4/sigar-bin/lib/sigar.jar")
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行它时,我收到以下错误,因为*.sojar不包含库.

no libsigar-amd64-linux.so in java.library.path
org.hyperic.sigar.SigarException: no libsigar-amd64-linux.so in java.library.path
    at org.hyperic.sigar.Sigar.loadLibrary(Sigar.java:172)
    at org.hyperic.sigar.Sigar.<clinit>(Sigar.java:100)


Exception in thread "main" java.lang.UnsatisfiedLinkError: org.hyperic.sigar.ptql.SigarProcessQuery.create(Ljava/lang/String;)V
    at org.hyperic.sigar.ptql.SigarProcessQuery.create(Native Method)
    at org.hyperic.sigar.ptql.ProcessQueryFactory.getQuery(ProcessQueryFactory.java:66)
    at org.hyperic.sigar.ptql.ProcessFinder.findSingleProcess(ProcessFinder.java:44)
Run Code Online (Sandbox Code Playgroud)

我想要包含的库是lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so,它们需要链接到jar中类路径中的目录.我知道做这样的映射的唯一方法是:

resourceDirectory in Compile <<=
    baseDirectory{ _ / "lib/hyperic-sigar-1.6.4/sigar-bin/lib" }
Run Code Online (Sandbox Code Playgroud)

这会导致*.so库被添加到jar的根目录,但不会添加到特定目录.如何指定要映射lib/hyperic-sigar-1.6.4/sigar-bin/lib/*.so到jar中类路径中的目录的资源映射?我正在尝试做什么的术语是什么?

scala sbt sbt-assembly

6
推荐指数
1
解决办法
3429
查看次数

sbt-assembly安装

我正在尝试使用sbt-assembly并且无法安装它.

从自述文件中逐字逐句地添加了项目/ plugins.sbt和依赖项:

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

然后我添加了一个build.sbt文件,其中包含自述文件的内容:

import AssemblyKeys._ //将它放在文件的顶部

assemblySettings

启动sbt时出现此错误:

[error] /Users/me/git/stest/project/Build.scala:29:not found:value assemblySettings [error] .settings(assemblySettings:_*)[error] ^ [error]发现一个错误[错误]( compile:compile)编译失败

我回去尝试了另一个在另一个stackoverflow帖子中看到的替代:

SEQ(assemblySettings:_*)

同样的问题.有任何想法吗?(Scala 2.10.0)

scala sbt sbt-assembly

6
推荐指数
1
解决办法
5156
查看次数

将源添加到 sbt 程序集

我正在使用 sbt 程序集创建一个库,用于内部目的。

我正在将此 jar 发布到本地工件安装,并且运行良好。

但是,我还没有弄清楚如何将源代码添加到程序集创建过程中,所以当我在intellij中导入它时,它也将可用(用于调试等)

谢谢!

scala sbt sbt-assembly

6
推荐指数
1
解决办法
490
查看次数

SBT Assembly - 重复数据删除错误和排除错误

嘿伙计们我正在尝试使用sbt-assembly构建一个带依赖关系的JAR.但我一次又一次地遇到这个错误.我尝试过多种不同的东西,但我最终到了这里.我是SBT的新手,希望得到一些帮助.这是build.sbt和assembly.sbt文件.

build.sbt

seq(assemblySettings: _*)

name := "StreamTest"

version := "1.0"

scalaVersion := "2.10.4"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.1.0"

libraryDependencies += "org.apache.spark" % "spark-streaming-kinesis-asl_2.10" % "1.1.0"
Run Code Online (Sandbox Code Playgroud)

项目/ assembly.sbt

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
Run Code Online (Sandbox Code Playgroud)

当我运行sbt assembly命令时,我收到以下错误.

[info] Including: joda-time-2.5.jar
[info] Checking every *.class/*.jar file's SHA-1.
[info] Merging files...
[warn] Merging 'about_files/LICENSE.txt' with strategy 'rename'
[warn] Merging 'about_files/NOTICE.txt' with strategy 'rename'
[warn] Merging 'META-INF/NOTICE.txt' with strategy 'rename'
[warn] Merging 'META-INF/NOTICE' with strategy 'rename'
[warn] Merging 'org/xerial/snappy/native/README' with strategy 'rename'
[warn] Merging …
Run Code Online (Sandbox Code Playgroud)

scala sbt sbt-assembly

6
推荐指数
1
解决办法
1万
查看次数

如何使用SBT和Scala正确管理开发和生产中的logback配置?

我有一个非常标准的Scalatra项目,使用Logback进行日志记录.

回归手册之后,我添加了一个logback-test.xml用于我的开发配置(调试日志),同时保持生产logback.xml.

但是,在使用xsbt-web-plugin运行带有代码重新加载的容器的开发中,我的应用程序似乎只是拿起了logback.xml.

我如何获得所需的行为?:

  1. 在开发模式(./sbt container:start)中,应用程序使用logback-test.xml
  2. 使用SBT-assembly组装成拉链时,请排除测试配置.

目前这些似乎都不起作用.

scala logback slf4j sbt sbt-assembly

6
推荐指数
1
解决办法
4289
查看次数

命令行参数不适用于sbt-assembly jar

我试图将命令行参数传递给我创建的JAR sbt-assembly.这些-Dconfig.file=application.conf都不是-Dconfig.trace=loads

我的确切命令是

java -jar googleScraper-assembly-0.0.1.jar -Dconfig.trace=loads -Dconfig.resource=application.conf

这是我的build.sbt

lazy val googleScraper = project.in(file("google-data-scraper"))
  .settings(commonSettings:_*)
  .settings(
    version := "0.0.1",
    assemblyMergeStrategy in assembly := {
      case m if m.toLowerCase.endsWith("manifest.mf") => MergeStrategy.discard
      case m if m.toLowerCase.matches("meta-inf.*\\.sf$") => MergeStrategy.discard
      case "log4j.properties" => MergeStrategy.discard
      case m if m.toLowerCase.startsWith("meta-inf/services/") => MergeStrategy.filterDistinctLines
      case "reference.conf" => MergeStrategy.concat
      case "application.conf" => MergeStrategy.concat
      case _ => MergeStrategy.first
    },
    libraryDependencies ++= Seq(
      "com.typesafe" % "config" % "1.3.0",
      "com.typesafe.play" % "play_2.11" % "2.3.9",
      "com.typesafe.play" % "play-ws_2.11" % …
Run Code Online (Sandbox Code Playgroud)

scala sbt sbt-assembly typesafe-config

6
推荐指数
1
解决办法
2211
查看次数

如何使用commons-beanutils对beanutils依赖项进行重复数据删除?

我有一个具有多个依赖项的项目,最终导致依赖于以下各项(我从sbt-dependency-graph plugin中获得了这些依赖项):

  • commons-beanutils:commons-beanutils:1.7.0
  • commons-beanutils:commons-beanutils-core:1.8.0

因此,当我尝试使用sbt-assembly构建胖JAR时,它将失败,并出现以下重复数据删除错误:

[error] deduplicate: different file contents found in the following:
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils/jars/someuser-beanutils-1.7.0.jar:org/apache/commons/beanutils/BasicDynaBean.class
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar:org/apache/commons/beanutils/BasicDynaBean.class
Run Code Online (Sandbox Code Playgroud)

由于我需要两个依赖项,因此我尝试使用以下规则对其中之一进行着色:

ShadeRule.rename("org.apache.commons.beanutils.**" -> "shadedstuff.beanutils.@1").inLibrary("commons-beanutils" % "commons-beanutils" % "1.7.0").inAll
Run Code Online (Sandbox Code Playgroud)

但是然后我得到以下错误:

[error] deduplicate: different file contents found in the following:
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils/jars/someuser-beanutils-1.7.0.jar:shadedstuff/beanutils/BasicDynaBean.class
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar:shadedstuff/beanutils/BasicDynaBean.class
Run Code Online (Sandbox Code Playgroud)

好像对两个工件都应用了阴影处理。如何遮蔽特定的伪影?

dependencies sbt maven-shade-plugin sbt-assembly

6
推荐指数
1
解决办法
972
查看次数

从提供的内容动态更改sbt构建文件中的库依赖关系

我们在scala应用程序中经常使用spark。如果我在本地测试,我的库依赖项是:

  libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.6.1",
 libraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "1.6.1" ,
Run Code Online (Sandbox Code Playgroud)

而我正在构建要使用的jar来部署:

  libraryDependencies += "org.apache.spark" % "spark-core_2.10" % "1.6.1" % "provided",
libraryDependencies += "org.apache.spark" % "spark-sql_2.10" % "1.6.1" % "provided",
Run Code Online (Sandbox Code Playgroud)

由于工作的性质,我们有时可能不得不在尝试不同的事情时来回翻转几次。不可避免的是,我有时会忘记更改构建文件并浪费时间,这不是很多时间,但足以促使我提出这个问题。

因此,是否有人知道让构建文件根据触发器更新提供的值的方式(除了记住“做对了”)?例如,也许读取测试或实时的配置选项?

提前致谢。

scala sbt sbt-assembly apache-spark

6
推荐指数
1
解决办法
731
查看次数