我正在尝试创建一个脚本,使用Slick Code Generator将整个数据库映射到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?")
请帮忙!谢谢。 :)