I'm trying to create a script that uses the Slick Code Generator to map an entire database to a Scala file, running up a docker container, and executing the ddl on a database running inside of it, effectively rebuilding the database every time it's run.
This actually works great(I only have to edit the very first line of the file, removing the package declaration), but only if I trim the Tables.scala(the output file) down to just one mapping, it generates the associated table in a fresh instance of the database(using "Tables.ddl.createStatements").
The problem is that the full file is 8k+ lines of generated code, and every time it tries to compile (running "amm buildDatabase.sc"), this exception is thrown:
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)
I've tried giving the following
Running as jar:
java -Xms2g -Xmx2g -jar amm buildDatabase.sc
Altering JAVA_OPTS:
export SBT_OPTS="-Xmx2g -Xms2g"
Altering SBT_OPTS:
export SBT_OPTS="-Xmx2g -Xms2g"
...but nothing seems to work. This compiles(and runs!) using Intellij, with 512m of heap memory.
Note that because this file needs to be regenerated every time the script is run, I've separated the main file into three compilation blocks. I'm not sure if this has any relevance to my problem.
//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?")
Please help! Thank you. :)