0

我正在尝试创建一个脚本,该脚本使用Slick 代码生成器将整个数据库映射到 Scala 文件,运行 docker 容器,并在其中运行的数据库上执行 ddl,每次运行时都有效地重建数据库.

这实际上很好用(我只需要编辑文件的第一行,删除包声明),但只有当我将 Tables.scala(输出文件)缩减为一个映射时,它才会在数据库的新实例(使用“Tables.ddl.createStatements”)。

问题是整个文件是 8k+ 行生成的代码,每次尝试编译(运行“amm buildDatabase.sc”)时,都会抛出这个异常:

java.lang.OutOfMemoryError: Java heap space
  java.lang.reflect.Array.newArray(Native Method)
  java.lang.reflect.Array.newInstance(Array.java:75)
  scala.collection.mutable.ArrayOps.slice(ArrayOps.scala:48)
  scala.collection.mutable.ArrayOps.slice$(ArrayOps.scala:44)
  scala.collection.mutable.ArrayOps$ofChar.slice(ArrayOps.scala:227)
  scala.collection.IndexedSeqOptimized.drop(IndexedSeqOptimized.scala:140)
  scala.collection.IndexedSeqOptimized.drop$(IndexedSeqOptimized.scala:140)
  scala.collection.mutable.ArrayOps$ofChar.drop(ArrayOps.scala:227)
  ammonite.interp.LineNumberModifier$LineNumberCorrector$2$.transform(AmmonitePlugin.scala:233)
  ammonite.interp.LineNumberModifier$LineNumberCorrector$2$.transform(AmmonitePlugin.scala:226)
  scala.reflect.api.Trees$Transformer.$anonfun$transformTrees$1(Trees.scala:2559)
  scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2559)
  scala.reflect.internal.Trees.itransform(Trees.scala:1358)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
  ammonite.interp.LineNumberModifier$LineNumberCorrector$2$.transform(AmmonitePlugin.scala:228)
  ammonite.interp.LineNumberModifier$LineNumberCorrector$2$.transform(AmmonitePlugin.scala:226)
  scala.reflect.internal.Trees.itransform(Trees.scala:1356)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
  ammonite.interp.LineNumberModifier$LineNumberCorrector$2$.transform(AmmonitePlugin.scala:228)
  ammonite.interp.LineNumberModifier$LineNumberCorrector$2$.transform(AmmonitePlugin.scala:226)
  scala.reflect.internal.Trees.itransform(Trees.scala:1358)
  scala.reflect.internal.Trees.itransform$(Trees.scala:1347)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
  scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
  scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
  ammonite.interp.LineNumberModifier$LineNumberCorrector$2$.transform(AmmonitePlugin.scala:228)

我试过给以下

作为 jar 运行:

java -Xms2g -Xmx2g -jar amm buildDatabase.sc

更改 JAVA_OPTS:

export SBT_OPTS="-Xmx2g -Xms2g"  

更改 SBT_OPTS:

export SBT_OPTS="-Xmx2g -Xms2g"              

...但似乎没有任何效果。这使用 Intellij 编译(并运行!),具有 512m 的堆内存。

注意,因为每次运行脚本都需要重新生成这个文件,所以我把主文件分成了三个编译块。我不确定这是否与我的问题有关。

//Add 3rd party repo
import coursier.MavenRepository
interp.repositories() ++= Seq(MavenRepository("https://maven.alfresco.com/nexus/content/groups/public"))

@ //recompile

import $file.RefreshTables, RefreshTables.refreshTableDefinitions
refreshTableDefinitions()

@ //recompile

import $file.Constants, Constants._
import $file.Utils, Utils.startContainerAndCreateDatabase
import $file.CreateTables, CreateTables.createTables

startContainerAndCreateDatabase(DATABASE_NAME)
createTables()

println("done?")

请帮忙!谢谢你。:)

4

0 回答 0