我有一个小的实用程序scala构建与专用测试文件夹下的测试类.编译然后publish-local在我的本地存储库中创建包.
正如预期的那样,测试文件夹会自动从实用程序包的本地jar中排除.
但是,生成的POM仍包含sbt中定义的相关依赖项.SBT依赖:
libraryDependencies ++= Seq(
"org.scalactic" %% "scalactic" % "3.0.0" % Test,
"org.scalatest" %% "scalatest" % "3.0.0" % Test
)
Run Code Online (Sandbox Code Playgroud)
POM的部分:
<dependency>
<groupId>org.scalactic</groupId>
<artifactId>scalactic_2.11</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
范围显然需要进行测试,以防止使用此库的另一个项目(主)中的问题.特别是,主项目的测试否则包括这些测试库,这会导致版本冲突等.
由于这些依赖项仅适用于未包含的测试包,因此将它们列在POM中似乎很愚蠢.如何告诉SBT不要将这些测试范围依赖项包含在最终的POM中?
我有大量并行进程运行.似乎仅仅创建了并行scala Futures会造成内存泄漏.
示例代码如下.根据您的机器设置VM标志,以便在您有多个内核时,它不会在开始时直接转储," - Xmx100m -XX:+ HeapDumpOnOutOfMemoryError".
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Await
import scala.concurrent.duration._
object Bug extends App {
println("Memory leak")
while(true){
Future {
val data = new Array[Byte](1000000*1) // 1 MB
println(".")
}
}
}
Run Code Online (Sandbox Code Playgroud)
几分钟后,此代码将显着减慢.堆转储分析显示数组scala.concurrent.forkjoin.ForkJoinTask []似乎溢出.
以下链接似乎相关,但并未真正提供任何解决方案:https://issues.scala-lang.org/browse/SI-7336