我找了类似的问题,我发现了这个:
表达式类型DslEntry必须符合SBT文件中的Def.SettingsDefinition行enablePlugins(JavaServerAppPackaging)
我的问题很相似,但每一行都会发生.

当我尝试运行时,它会编译并成功运行.单击"导入项目"时,黄色通知不会消失,但项目会成功重新加载.例如,如果我重写任何行val _ = scalaVersion := "2.12.4",则错误消失,但看起来很糟糕.
我们有一个play2/scala用gitlab ci构建的应用程序.
我们.gitlab-ci.yml(至少重要的部分)看起来如下:
image: hseeberger/scala-sbt
variables:
SBT_GLOBAL_BASE_DIR: "$CI_PROJECT_DIR/cache/.sbt"
IVY2_CACHE_DIR: "$CI_PROJECT_DIR/cache/.ivy2"
SBT_BOOT_DIR: "$CI_PROJECT_DIR/cache/.sbt/boot"
M2_HOME_DIR: "$CI_PROJECT_DIR/cache/.m2"
before_script:
# Log the sbt version
- sbt sbt-version
build:
stage: build
script:
- ./build.sh
Run Code Online (Sandbox Code Playgroud)
用build.sh:
sbt -Dsbt.global.base=$SBT_GLOBAL_BASE_DIR \
-Dsbt.ivy.home=$IVY2_CACHE_DIR \
-Dsbt.boot.directory=$SBT_BOOT_DIR \
compile
Run Code Online (Sandbox Code Playgroud)
不幸的是,我们的管道总是运行大约30-40分钟,包括所有步骤(构建,验证,部署).大部分时间sbt通过一次又一次地下载真正烦人的事情来花费.
我可能不太了解,gitlab ci runners但根据我的理解,通过使用hseeberger/scala-sbt作为图像,sbt应该是全局可用的,不应该下载它.
然后gitlab的这个解决方案也没有必要.
无论如何,sbt每当服务器运行任何sbt命令时,如果在每次部署期间不会完全下载6次,我会很高兴.
有人可以解释我如何使用正确image或image正确的方式,或者我如何缓存这些sbt东西?
在过去的几天里,我docker和他一起战斗了很多gitlab ci.我发现这个问题与 …
在我的Scala项目中,几乎所有文件都有这些导入:
import eu.timepit.refined._
import eu.timepit.refined.api.Refined
import eu.timepit.refined.auto._
import eu.timepit.refined.numeric._
import spire.math._
import spire.implicits._
import com.wix.accord._
import com.wix.accord.dsl._
import codes.reactive.scalatime._
import better.files._
import java.time._
import scala.collection.mutable
...
...
Run Code Online (Sandbox Code Playgroud)
在Scala中干燥这个的最佳方法是什么?我可以为我的项目(使用某种sbt插件吗?)或在包级别指定所有这些?
我正在使用SBT 1.x构建一个scala项目(在scala 2.11中编写).有一些"scala版本"让我感到困惑.
SBT 1.x => scala 2.12
SBT plugin => scala 2.x
My project => scala 2.11
Run Code Online (Sandbox Code Playgroud)
请帮我弄清楚它们之间的区别或关系.在编译或运行项目时SBT如何区分它们?
我在用
scala 1.12.10
akka 2.6.3
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.1.0")
Run Code Online (Sandbox Code Playgroud)
但是,在执行时sbt assembly我得到:
java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release
at java.base/java.lang.System.setSecurityManager(System.java:416)
at sbt.TrapExit$.installManager(TrapExit.scala:53)
at sbt.StandardMain$.runManaged(Main.scala:109)
at sbt.xMain.run(Main.scala:76)
at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:111)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:131)
at xsbt.boot.Launch$.run(Launch.scala:111)
at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:37)
at xsbt.boot.Launch$.launch(Launch.scala:120)
at xsbt.boot.Launch$.apply(Launch.scala:20)
at xsbt.boot.Boot$.runImpl(Boot.scala:56)
at xsbt.boot.Boot$.main(Boot.scala:18)
at xsbt.boot.Boot.main(Boot.scala)
[error] [launcher] error during sbt launcher: java.lang.UnsupportedOperationException: The Security Manager is deprecated and will be removed in a future release
Run Code Online (Sandbox Code Playgroud)
运行java …
有没有办法为特定任务禁用SBT插件(AutoPlugin).
例如,我想在打包时禁用插件SCoverage.
我尝试过:
coverageEnabled in `package` := false
Run Code Online (Sandbox Code Playgroud)
但这不起作用.所以我寻找一种完全禁用该插件的方法.
我在sbt启动时遇到以下错误,当两个特定的sbt插件一起添加到其构建定义中的项目时.其中一个sbt插件是scalikejdbc,另一个是我自己的,显然它们在项目的构建定义中的相互包含导致sbt启动时出现此错误:
scala.reflect.internal.Types$TypeError: package macros contains object
and package with same name: blackbox
Run Code Online (Sandbox Code Playgroud)
显然,看起来每个插件都带有不同版本的scala.reflect.macros,从而导致此错误.我可以在sbt插件的罐子里戳,其中其中一个似乎带来了scala/reflect/macros/blackbox.class-
$ jar -tvf scalikejdbc-core_2.10/jars/scalikejdbc-core_2.10-2.4.2.jar | grep black
0 Sat Jun 11 15:51:10 IDT 2016 scala/reflect/macros/blackbox/
405 Sat Jun 11 15:51:04 IDT 2016 scala/reflect/macros/blackbox/package$.class
419 Sat Jun 11 15:51:04 IDT 2016 scala/reflect/macros/blackbox/package.class
Run Code Online (Sandbox Code Playgroud)
- 但是,在这个早期启动阶段很难正确地得出sbt加载的内容,以便确定这个包的哪个版本在这里涉及以及哪些依赖关系带来了它们.
感谢您关于如何进行此调查的建议!
并且为了完整起见 - 我在下面仅仅包括sbt给出的完整错误 - 但我真诚地怀疑它添加了任何信息,所以你可能会忽略它.
scala.reflect.internal.Types$TypeError: package macros contains object and package with same name: blackbox
one of them needs to be removed …Run Code Online (Sandbox Code Playgroud) 我的一些构建和插件使用私有部署凭据(有时从文件系统读取,有时通过 输入并保留在内存中InteractionService)。
虽然这可能是过度偏执,但我尽量小心地尽量减少使用私人信息的软件的攻击面,并且在这些构建中不必要地运行服务器,即使是在 localhost 或 UNIX 套接字上,也感觉很不卫生。
我已经寻找了一个可以在插件中设置的设置,该设置将禁用服务器启动,除非被构建覆盖。到目前为止还没有发现类似的东西。有这样的设定吗?
非常感谢!
更新:在 Eugene Yokota 的帮助下,从 sbt 1.1.1 开始,现在有一个布尔值autoStartServer设置。构建和插件可以通过设置来防止服务器自动启动autoStartServer := false。(startServer如果愿意,用户仍然可以通过运行手动启动服务器。)
我遇到了让SBT子项目识别插件提供的命令的问题.我有以下插件源:
object DemoPlugin extends AutoPlugin {
override lazy val projectSettings = Seq(commands += demoCommand)
lazy val demoCommand =
Command.command("demo") { (state: State) =>
println("Demo Plugin!")
state
}
}
Run Code Online (Sandbox Code Playgroud)
配置如下的项目使用哪个:
lazy val root = project in file(".")
lazy val sub = (project in file("sub")).
enablePlugins(DemoPlugin).
settings(
//...
)
Run Code Online (Sandbox Code Playgroud)
该插件当然列在project/plugins.sbt.但是,当我在项目中打开sbt时,我看到以下内容:
> sub/commands
[info] List(sbt.SimpleCommand@413d2cd1)
> sub/demo
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: demo (similar: doc)
[error] sub/demo
Run Code Online (Sandbox Code Playgroud)
更奇怪的是,使用consoleProject,我可以看到项目中的命令是由一个定义的DemoPlugin!
scala> (commands …Run Code Online (Sandbox Code Playgroud) 我正在使用 IntelliJ IDEA Ultimate 导入一个 SBT 项目,该项目在私有 Artifactory 中有一些插件。
[info] Resolving com.private#XXXX_X.X;X.X.X-SNAPSHOT ...
[error] Unable to find credentials for [Artifactory Realm @ artifactory-private.com].
[error] Unable to find credentials for [Artifactory Realm @ artifactory-private.com].
Run Code Online (Sandbox Code Playgroud)
我确实在 SBT 中配置了 Artifactory 凭据,并且如果我使用 sbt shell 构建项目,则工作正常;但是,IntelliJ 中的构建失败并且无法识别凭据。有人可以帮忙吗?
更新:当插件是快照版本时,这似乎是唯一的问题。
预先非常感谢您!
sbt ×10
sbt-plugin ×10
scala ×7
artifactory ×1
gitlab-ci ×1
import ×1
java ×1
maven ×1
sbt-assembly ×1
scala-macros ×1
scalikejdbc ×1
version ×1