Motivation:
Apache Calcite has an in-built Sql Parser. This plugin helps to keep the template files and configuration to a different project. Thus,allowing to have cleaner build structure and project dependencies.
Configurations:
-
codegenDirectory : Set a directory where fmpp template files and configurations are placed.
The recommended directory structure is just like in Calcitecodegen/
templates/
includes/
config.fmpp
default_config.fmpp -
outputTemplateDirectory : Directory where template file is generated.
-
outputDirectory : Directory where java sources files are generated.
-
packageName : Package for generated java files.
-
outputJar : Required java jar file for generated sources.
Usage:
-
compileParserSource : Compile java sources from $outputDirectory and project build's javaSource into $outputJar
-
generateParserSource : Create java sources from templates in $outputTemplateDirectory from $outputDirectory
-
generateParserTemplate : Create templates files from $codegenDirectory into $outputTemplateDirectory.
Each task aggregates dependent task.
Example:
import scala.reflect.io.{Directory, File} val project=project .in(file("example")) .enablePlugins(ParserGeneratorPlugin) .settings( codegenDirectory := Directory(baseDirectory.value / "src/main/codegen"), outputTemplateDirectory := Directory(target.value / "fmpp"), outputDirectory := Directory(target.value / "javacc"), packageName := "my.package", outputJar := File(target.value / "generated" / "my_example.jar"), javacOptions ++= Seq( "-classpath", (Compile / dependencyClasspath).value.map(file => file.data.getAbsolutePath).mkString(":") ) )