我正在尝试创建一个脚本,该脚本使用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?")
请帮忙!谢谢你。:)