我的代码基本上是这样的:
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在不必将大型模型类或数据文件签入我的版本控制的情况下执行此操作?
我有一个有趣的问题,我基本上需要创建一个.jar(加上所有的类路径依赖项),其中包含一个 SBT 项目(加上它的任何子项目)的所有测试。这个想法是我可以只使用运行 jarjava -jar并且所有测试都将执行。
我听说这可能与 sbt-assembly 有关,但您必须手动运行您拥有assembly的每个 sbt 子项目(每个子项目都有自己的.jars),理想情况下,我只想运行一个命令,.jar为您碰巧拥有的每个 sbt root+sub 项目中的每个测试(以同样的方式,如果您test在带有子项目的 sbt 项目中运行,它将为所有内容运行测试)。
我们当前使用的测试框架是 specs2,但我不确定这是否有所不同。
有谁知道这是否可能?
我正在用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中类路径中的目录的资源映射?我正在尝试做什么的术语是什么?
我正在尝试使用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)
我正在使用 sbt 程序集创建一个库,用于内部目的。
我正在将此 jar 发布到本地工件安装,并且运行良好。
但是,我还没有弄清楚如何将源代码添加到程序集创建过程中,所以当我在intellij中导入它时,它也将可用(用于调试等)
谢谢!
嘿伙计们我正在尝试使用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) 我有一个非常标准的Scalatra项目,使用Logback进行日志记录.
在回归手册之后,我添加了一个logback-test.xml用于我的开发配置(调试日志),同时保持生产logback.xml.
但是,在使用xsbt-web-plugin运行带有代码重新加载的容器的开发中,我的应用程序似乎只是拿起了logback.xml.
我如何获得所需的行为?:
./sbt container:start)中,应用程序使用logback-test.xml目前这些似乎都不起作用.
我试图将命令行参数传递给我创建的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) 我有一个具有多个依赖项的项目,最终导致依赖于以下各项(我从sbt-dependency-graph plugin中获得了这些依赖项):
commons-beanutils:commons-beanutils:1.7.0commons-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)
好像对两个工件都应用了阴影处理。如何遮蔽特定的伪影?
我们在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)
由于工作的性质,我们有时可能不得不在尝试不同的事情时来回翻转几次。不可避免的是,我有时会忘记更改构建文件并浪费时间,这不是很多时间,但足以促使我提出这个问题。
因此,是否有人知道让构建文件根据触发器更新提供的值的方式(除了记住“做对了”)?例如,也许读取测试或实时的配置选项?
提前致谢。
sbt ×10
sbt-assembly ×10
scala ×9
apache-spark ×1
dependencies ×1
jar ×1
java ×1
logback ×1
slf4j ×1
specs2 ×1