我的快照部署有一个非常奇怪的问题:/5042065 com.github.fommil emokit 1.0-SNAPSHOT 20130226.204310 13 20130226204310 jar 1.0-20130226.204248-12
以下是关于 sbt 的编程技术问答
是否有一种简单的方法将Scala Jar(〜1MB)复制到服务器,然后将SBT拉动依赖项(〜40MB),并运行它? 我已经看过sbt-onejar和 sbt-semembly 在我的情况下,一个变为〜45MB的罐子花费太长以无法上传到服务器. 目前,我使用Capistrano从Github查看我的代码并进行编译.然后,我使用XSBT-start-Script-Plugin运行它 - 与Heroku管理此操作类似. 问题在于,该汇编需要很长时间(我正在使用EC2). EC2 Micro具有〜600MB RAM需要疯狂的长时间,有时会随机杀死该过程.我正在使用目前正在起作用的EC2小实例(1.7GB RAM),但是随着代码库的增加,我添加了更多服务器,它可能会变得有问题. 理想的工作流程将是在本地(或CI服务器上)编译Scala源,复制到服务器,SBT从上次构建开始添加了其他依赖项(现有的依赖项(现有的构建将来自本地的Cached Ivy Repo),然后提供给我使用
包装Scala应用程序在桌面PC上使用的最简单方法是什么?我猜那将是罐子文件的形式. 目前我正在使用SBT来编译和运行程序 我对安装了Scala的机器的解决方案感兴趣(以及其类路径中的库),以及只有Java的机器. 解决方案 包装Scala应用程序的最简单(也是最一致的)方法,即包装到JAR中(就像您使用普通Java应用程序一样).只要JAR由标准编译的Java类组成,即使您在包装盒中没有Scala运行时,您也可以运行" Scala" jar(您需要的只是Java Runtime和Class Path上的Scala-lang.jar).您可以在castast 中指定主类(通往应用程序功能的网关) Main-Class: mypackage.MyClass 这样,您就可以将其称为将jar名称传递给java.exe. java -jar myjar.jar 您可以其他解决方案 /sbt-native-packager/index.html 该插件
我需要为我的一个子项目构建一个罐子,包括依赖项,以便可以用作javaagent. 我有一个多模块的SBT项目,该特定模块是最低的一个(也是纯Java). 我可以(例如,带有 sbt-onejar ,看来这些工具确实被设计为出版后的一步,但是我确实需要一个(替换或其他)已发表的人工制品来包括依赖项(但仅适用于这个模块). 更新: 出版 - 组装是单个项目的说明,并且不容易转换为多项目. 解决方案 SBT组装的发布是一个单个项目的说明,并且不容易转化为多项目. 人们一直在使用SBT-Asembly&SBT释放发行胖罐,没有问题.这是2011年的博客文章: SBT创建的出版脂肪罐 - 组装.它归结为将addArtifact(Artifact(projectName, "assembly"), sbtassembly.AssemblyKeys.assembly)添加到您的build.sbt(请注意,博客有点过时AssemblyKeys现在直接是sbtassem
我有一个Akka应用程序,该应用程序使用resource/application.conf中定义的多个配置值(IP地址,端口号).我正在使用sbt-assembly插件来创建一个Uber Jar,然后部署此罐子. 有没有办法通过使用Uber Jar外部的另一个文件来覆盖整个application.conf文件? (即使用新conf文件中的值) 解决方案 有多种方法可以实现: 您要么设置classPath以从外部目录中include application.conf,然后在类似jar(例如jar)的其他类路径上出现在类路径上.为此,您可以使用常规java -classpath myconfdir:theapp.jar并明确指定主类. 您可以在conf文件中使用include "application"指令将另一个conf文件包含在文件中. 您可以在application.conf中设置环境变量,该变量将指向要包含的文件.您之后在外壳中设置Env. 您可
我正在尝试使用 sbt-assembly 使用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/SimpleL
当我用SBT 0.11编译我的Scala项目时,我会收到有关"未检查"警告的通知,但我看不到警告本身. 我看到的是 [warn] there were 8 unchecked warnings; re-run with -unchecked for details [warn] one warning found 我到底要"重新运行 - 刺",该怎么做? compile -unchecked,也不是compile unchecked和xsbt -unchecked似乎都起作用. 解决方案 我找到了答案在这里. 解决方案是添加 scalacOptions ++= Seq("-unchecked", "-deprecation") 到项目的build.sbt文件. 它也可以选择" -feature"作为选项,并与SBT 0.13 一起使用
scalavista或scala语法(官方) - 这些是我拥有的scala扩展. i在build.sbt中都有 , "org.scalatra" %% "scalatra-json" % "latest.integration" ,当我写 时 import org.scalatra.json._ 然后将其标记为错误,并说object scalatra is not a member of package org.这只是一个例子,我的代码充满了红波.那只是在Vscode中;当我从SBT运行程序时,它会编译并运行正常. 不应该知道依赖项吗? 解决方案 您应该安装 sbt-scalavista 为您的项目生成Scalavista配置.
我在我的Multi Project SBT存储库中具有Scala格式插件. addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.3.2") 因此,在SBT控制台中,如果我运行Scalafmt,则可以正常工作 我的build.sbt具有: scalafmtOnCompile := true 如果我在SBT中进行编译或手动编译,则不会在编译过程中格式化我的代码. 我的设置有什么问题? 另外,运行scalafmt可以正常工作,但它不会像我的depentencies.scala文件中格式化我的.scala文件.为什么忽略这些文件? 我也将与金属一起使用VS代码作为我的IDE. 解决方案 scalafmt 参见与金属在VSC中工作的信息 - 我的机器上的框 金属自动使用scaleafmt响应格式请求 根据编辑器,根据所定义的配置 .scalafmt.conf ...如果没
我试图与Scala语言的简单示例一起工作. 我成功安装了sbt.运行sbt -h时,我会从SBT看到帮助消息: Usage: sbt [options] -h | -help print this message -v | -verbose this runner is chattier -d | -debug set sbt log level to debug -no-colors disable ANSI color codes -sbt-create start sbt even if current directory contains no sbt project -sbt-dir path to global settings/plugins directory (default: ~/.sbt) -sbt-boot path to
我有一个多项目的结构,该结构以SBT 0.11.3构建.我想集中我的依赖版本,项目版本,工件,外壳提示等内容.这对于我在发布管理和版本控制方面的计划真的很有帮助.因此,我创建了一个插件,并将我的全局配置放在那里.我的项目从github读取它,并将其构建为插件.一切都很可爱. ./project/project/build.scala import sbt._ object PluginDef extends Build { override lazy val projects = Seq(root) lazy val root = Project("plugins", file(".")) dependsOn(versionPlugin) lazy val versionPlugin = uri("git://github.com/config.git") //changed the uri here } 因此,如果尚未使用SBT,请访问插件最新
是否有一种简单的方法可以比较SBT构建文件中的版本而无需手工制作.例如 scalacOptions if (sv >= "2.10.0") "-feature" :: Nil else Nil } (以上编译,但由于某种原因"2.9.2" >= "2.10.0" ...?!) 解决方案 由于SBT 1.2.0有一个内置的API: https://www.scala-sbt.org/1.0/docs/docs/sbt-1.2-release-notes.html#semantic forsemantion+semantic forsefersion+semantic forsefers+Seloter+Seloter+Seloter+Seloter+Seloter+Seloter+Selector+/A A > 例如,您可以做 VersionNumber("2.12.5").matchesSemVer(S
我在build.sbt中定义了一个自定义任务: val doSmth = taskKey[Unit]("smth") doSmth := { version := "1.0-SNAPSHOT" } 但不会更改版本.我实际想要的是拥有自定义SBT发布任务,该任务将始终发布与我添加的repo相同的版本.除此之外,正常sbt assembly过程使用增量版本方案.因此,我想制作将设置版本的任务,执行SBT发布,然后返回版本为以前的值.我已经完成了所有事情,但在更改版本中被阻止了.是否有任何方法可以从build.sbt? 这根本可以吗?我想我也可以从sbt publish命令复制代码(正如一个主题上提到的某人),但这是我认为最糟糕的解决方案. 谢谢 解决方案 我通过更改sbt publish任务的版本找到了一个可能的解决方案,但是在SBT中它确实很奇怪且不直觉.例如,我尝试了 version := sys.env.getOrElse("BUILD_NUMBE
我正在用SBT 1.x构建一个Scala项目(在Scala 2.11中写入).有几个" Scala版本",这使我感到困惑. SBT 1.x => scala 2.12 SBT plugin => scala 2.x My project => scala 2.11 请帮助我弄清楚它们之间有什么区别或关系.以及SBT在编译或运行项目时如何区分他们? 解决方案 SBT本身及其插件使用的Scala版本完全独立于用于编译项目中代码的Scala版本. SBT版本确定其使用的Scala版本: SBT 0.13使用Scala 2.10 SBT 1.x使用Scala 2.12 SBT 2.x将使用Scala 3 您可以在project/build.properties中设置此版本,例如: sbt.version = 1.1.1 您要使用的SBT插件必须与给定版本的SBT兼容(并且许多插件与0.13和1.x进行了交叉编译). 要设置
我正在寻找一个简单的方法来转换Verilog中的简单chisel3模块. 我在凿子的官方网页上使用GCD源代码. import chisel3._ class GCD extends Module { val io = IO(new Bundle { val a = Input(UInt(32.W)) val b = Input(UInt(32.W)) val e = Input(Bool()) val z = Output(UInt(32.W)) val v = Output(Bool()) }) val x = Reg(UInt(32.W)) val y = Reg(UInt(32.W)) when (x > y) { x := x -% y }.otherwise { y := y -% x } when
我有一个简单的单元测试,该测试使用SparkContext.我能够在Intellij Idea中运行单元测试,而没有任何问题.但是,当尝试从SBT Shell运行相同的测试时,我会收到以下错误: java.lang.NoClassDefFoundError: org/eclipse/jetty/server/bio/SocketConnector at org.apache.spark.HttpServer.org$apache$spark$HttpServer$$doStart(HttpServer.scala:74) at org.apache.spark.HttpServer$$anonfun$1.apply(HttpServer.scala:60) at org.apache.spark.HttpServer$$anonfun$1.apply(HttpServer.scala:60) at org.apache.spark.util.Util
我想禁用某些标记为"慢"的自动化测试,但允许用户使用简单的命令行启用执行.我想这是一个非常常见的用例. 给定此测试套件: import org.scalatest.FunSuite import org.scalatest.tagobjects.Slow class DemoTestSuite extends FunSuite { test("demo test tagged as slow", Slow) { assert(1 + 1 === 2) } test("demo untagged test") { assert(1 + 1 === 2) } } 默认情况下,sbt test将同时运行标记和未标记的测试. 如果我将以下内容添加到我的build.sbt: testOptions in Test += Tests.Argument("-l", "org.scalatest.tags.Slow") 然后,我得到了所
我有一个0.13.7 SBT项目,有几个子项目. 其中之一称为webapp,并且在webapp/src/test/java中具有许多JUnit测试. 运行时: sbt webapp/test 仅运行ScalaTest测试,但没有JUNIT测试. 我的build.sbt文件的片段: libraryDependencies ++= Seq( "com.novocode" % "junit-interface" % "0.11" % Test ) lazy val webapp = project settings( Seq( projectDependencies ++= Seq( .... "org.scalatest" %% "scalatest" % "2.2.2" % Test, "junit" %