Moved the project to Gradle. Still missing:
- SuppressFBWarnings is not commented.
- Versions might still be mixed up here and there (i.e. "version" and "mavenVersion")
OSGI differences:
- OSGI plugin adds "Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))""
- "Export-Package" has a lot less "uses" per package.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a40850e..d97fbf8 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -29,46 +29,35 @@
jobs:
build:
- runs-on: ubuntu-latest
-
+ strategy:
+ matrix:
+ os: [windows-latest, ubuntu-latest]
+ runs-on: ${{ matrix.os }}
+ concurrency: main_tests_${{ github.ref }}
steps:
- - name: Checkout
- uses: actions/checkout@v4
-
+ - name: Welcome Message
+ run: 'echo "Started with parameters: ${{ matrix.os }} because ${{ github.event_name }} on ${{ github.ref }}"'
+ - uses: actions/checkout@v4
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
java-version: 8
distribution: temurin
-
- name: Set up JDK 16
uses: actions/setup-java@v3
with:
java-version: 16
distribution: zulu
+ - name: Validate Gradle wrapper
+ uses: gradle/wrapper-validation-action@v1.1.0
+ - name: Run Build
+ id: build_step
+ run: './gradlew --continue clean build -PsignPublication=false'
+ - name: Upload Failed Report
+ uses: actions/upload-artifact@v2.3.1
+ if: failure() && steps.build_step.outcome == 'failure'
+ with:
+ name: test-reports-${{ matrix.os }}
+ path: build/reports/**
+ retention-days: 30
- - name: Prepare build.properties
- shell: bash
- run: >-
- echo "boot.classpath.j2se1.8=${JAVA_HOME_8_X64}/jre/lib/rt.jar" >> build.properties;
- echo "mvnCommand=$(which mvn)" >> build.properties;
- echo "gpgCommand=$(which gpg)" >> build.properties;
-
- - name: Create a gpg key for signing
- shell: bash
- run: >-
- gpg --quick-gen-key --batch --passphrase '' github-build@apache.invalid;
- echo "batch" >> "/home/runner/.gnupg/gpg.conf";
- echo "pinentry-mode=loopback" >> "/home/runner/.gnupg/gpg.conf";
-
- - name: Prepare ant with ivy
- shell: bash
- run: ant download-ivy
-
- - name: Build with Ant and ivy
- shell: bash
- run: ant ci -Dci=true
-
- - name: RAT check
- shell: bash
- run: ant rat
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 0000000..3126172
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,883 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.nio.charset.StandardCharsets
+import java.nio.file.FileVisitResult
+import java.nio.file.Files
+import java.nio.file.SimpleFileVisitor
+import java.nio.file.attribute.BasicFileAttributes
+import java.time.Instant
+import java.time.ZoneOffset
+import java.time.format.DateTimeFormatter
+import java.util.Properties
+import java.util.TreeSet
+import java.util.stream.Collectors
+
+buildscript {
+ dependencies {
+ classpath("org.apache.freemarker.docgen:freemarker-docgen-core:0.0.2-SNAPSHOT")
+ }
+}
+
+plugins {
+ `java-library`
+ `maven-publish`
+ signing
+ id("biz.aQute.bnd.builder") version "6.1.0"
+ id("org.nosphere.apache.rat") version "0.7.0"
+}
+
+group = "org.freemarker"
+
+val buildTimeStamp = Instant.now()
+val buildTimeStampUtc = buildTimeStamp.atOffset(ZoneOffset.UTC)
+val versionFileTokens = mapOf(
+ "timestampNice" to buildTimeStampUtc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")),
+ "timestampInVersion" to buildTimeStampUtc.format(DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'"))
+)
+val resourceTemplatesDir = file("freemarker-core/src/main/resource-templates")
+val versionPropertiesTemplate = Properties()
+Files.newBufferedReader(resourceTemplatesDir.toPath().resolve("freemarker").resolve("version.properties"), StandardCharsets.ISO_8859_1).use {
+ versionPropertiesTemplate.load(it)
+}
+val versionProperties = HashMap<String, String>()
+versionPropertiesTemplate.forEach { (key, value) ->
+ var updatedValue = value.toString()
+ for (token in versionFileTokens) {
+ updatedValue = updatedValue.replace("@${token.key}@", token.value)
+ }
+ versionProperties[key.toString()] = updatedValue.trim()
+}
+version = versionProperties["mavenVersion"]!!
+val displayVersion = versionProperties["version"]!!
+
+val freemarkerCompilerVersionOverrideRef = providers.gradleProperty("freemarkerCompilerVersionOverride")
+val defaultJavaVersion = freemarkerCompilerVersionOverrideRef
+ .orElse(providers.gradleProperty("freemarkerDefaultJavaVersion"))
+ .getOrElse("8")
+val testJavaVersion = providers.gradleProperty("freeMarkerTestJavaVersion")
+ .getOrElse("16")
+val testRunnerJavaVersion = providers.gradleProperty("freeMarkerTestRunnerJavaVersion")
+ .getOrElse(testJavaVersion)
+val javadocJavaVersion = providers.gradleProperty("freeMarkerJavadocJavaVersion")
+ .getOrElse(defaultJavaVersion)
+val doSignPackages = providers.gradleProperty("signPublication").map { it.toBoolean() }.orElse(true)
+
+java {
+ withSourcesJar()
+ withJavadocJar()
+
+ toolchain {
+ languageVersion.set(JavaLanguageVersion.of(defaultJavaVersion))
+ }
+}
+
+tasks.withType<JavaCompile>().configureEach {
+ options.encoding = "UTF-8"
+}
+
+data class JavaccReplacePattern(val relPath: String, val pattern: String, val replacement: String) : java.io.Serializable
+
+open class CompileJavacc @Inject constructor(
+ private val fs: FileSystemOperations,
+ private val exec: ExecOperations,
+ layout: ProjectLayout,
+ objects: ObjectFactory
+) : DefaultTask() {
+
+ @InputDirectory
+ val sourceDirectory: DirectoryProperty
+
+ @OutputDirectory
+ val destinationDirectory: DirectoryProperty
+
+ @InputFiles
+ var classpath: FileCollection
+
+ @Input
+ val fileNameOverrides: SetProperty<String>
+
+ @Input
+ val replacePatterns: SetProperty<JavaccReplacePattern>
+
+ init {
+ this.sourceDirectory = objects.directoryProperty().value(layout.projectDirectory.dir("src/main/javacc"))
+ this.destinationDirectory = objects.directoryProperty().value(layout.buildDirectory.dir("generated/javacc-tmp"))
+ this.classpath = objects.fileCollection()
+ this.fileNameOverrides = objects.setProperty()
+ this.replacePatterns = objects.setProperty()
+ }
+
+ @TaskAction
+ fun compileFiles() {
+ fs.delete { delete(destinationDirectory) }
+
+ val destRoot = destinationDirectory.get().asFile
+ val javaccClasspath = classpath
+
+ sourceDirectory.asFileTree.visit(object : EmptyFileVisitor() {
+ override fun visitFile(fileDetails: FileVisitDetails) {
+ val outputDir = fileDetails.relativePath.parent.getFile(destRoot)
+ Files.createDirectories(outputDir.toPath())
+
+ val execResult = exec.javaexec {
+ classpath = javaccClasspath
+ mainClass.set("org.javacc.parser.Main")
+ args = listOf(
+ "-OUTPUT_DIRECTORY=$outputDir",
+ fileDetails.file.toString()
+ )
+ isIgnoreExitValue = true
+ }
+
+ val exitCode = execResult.exitValue
+ if (exitCode != 0) {
+ throw IllegalStateException("Javacc failed with error code: $exitCode")
+ }
+ }
+ })
+
+ val fileNameOverridesSnapshot = fileNameOverrides.get()
+ val deletedFileNames = HashSet<String>()
+
+ Files.walkFileTree(destRoot.toPath(), object : SimpleFileVisitor<java.nio.file.Path>() {
+ override fun visitFile(file: java.nio.file.Path, attrs: BasicFileAttributes): FileVisitResult {
+ val fileName = file.fileName.toString()
+ if (fileNameOverridesSnapshot.contains(fileName)) {
+ deletedFileNames.add(fileName)
+ Files.delete(file)
+ }
+ return FileVisitResult.CONTINUE
+ }
+ })
+
+ val unusedFileNames = TreeSet(fileNameOverridesSnapshot)
+ unusedFileNames.removeAll(deletedFileNames)
+ if (unusedFileNames.isNotEmpty()) {
+ logger.warn("Javacc did not generate the following files, even though they are marked as overriden: ${unusedFileNames}")
+ }
+
+ replacePatterns.get().groupBy { it.relPath }.forEach { (relPath, patternDefs) ->
+ val file = destRoot.toPath().resolve(relPath.replace("/", File.separator))
+
+ val encoding = StandardCharsets.ISO_8859_1
+ val origContent = String(Files.readAllBytes(file), encoding)
+ var adjContent = origContent
+ for (patternDef in patternDefs) {
+ val prevContent = adjContent
+ adjContent = adjContent.replace(patternDef.pattern, patternDef.replacement)
+ if (prevContent == adjContent) {
+ logger.warn("$file was not modified, because it does not contain the requested token: '${patternDef.pattern}'")
+ }
+ }
+
+ if (origContent != adjContent) {
+ Files.write(file, adjContent.toByteArray(encoding))
+ }
+ }
+ }
+}
+
+val compileJavacc = tasks.register<CompileJavacc>("compileJavacc") {
+ sourceDirectory.set(file("freemarker-core/src/main/javacc"))
+ destinationDirectory.set(buildDir.toPath().resolve("generated").resolve("javacc").toFile())
+ classpath = configurations.detachedConfiguration(dependencies.create("net.java.dev.javacc:javacc:7.0.12"))
+ fileNameOverrides.addAll(
+ "ParseException.java",
+ "TokenMgrError.java"
+ )
+
+ val basePath = "freemarker/core"
+ replacePatterns.addAll(
+ JavaccReplacePattern(
+ "${basePath}/FMParser.java",
+ "enum",
+ "ENUM"
+ ),
+ JavaccReplacePattern(
+ "${basePath}/FMParserConstants.java",
+ "public interface FMParserConstants",
+ "interface FMParserConstants"
+ ),
+ JavaccReplacePattern(
+ "${basePath}/Token.java",
+ "public class Token",
+ "class Token"
+ ),
+ // FIXME: This does nothing at the moment.
+ JavaccReplacePattern(
+ "${basePath}/SimpleCharStream.java",
+ "public final class SimpleCharStream",
+ "final class SimpleCharStream"
+ )
+ )
+}
+
+fun <T> concatLists(vararg lists: List<T>): List<T> {
+ val concatenated = ArrayList<T>()
+ for (list in lists) {
+ concatenated.addAll(list)
+ }
+ return concatenated
+}
+
+val allSourceSetNames = ArrayList<String>()
+
+fun configureSourceSet(sourceSetName: String, defaultCompilerVersionStr: String) {
+ allSourceSetNames.add(sourceSetName)
+
+ val compilerVersion = freemarkerCompilerVersionOverrideRef
+ .orElse(providers.gradleProperty("java${defaultCompilerVersionStr}CompilerOverride"))
+ .getOrElse(defaultCompilerVersionStr)
+ .let { JavaLanguageVersion.of(it) }
+
+ val baseDirName = if (sourceSetName == SourceSet.MAIN_SOURCE_SET_NAME) "core" else sourceSetName
+
+ val sourceSet = sourceSets.maybeCreate(sourceSetName)
+ sourceSet.java.setSrcDirs(listOf("freemarker-${baseDirName}/src/main/java"))
+ sourceSet.resources.setSrcDirs(listOf("freemarker-${baseDirName}/src/main/resources"))
+
+ val mainSourceSet = sourceSets.named(SourceSet.MAIN_SOURCE_SET_NAME).get()
+
+ if (sourceSetName == SourceSet.MAIN_SOURCE_SET_NAME) {
+ sourceSet.java.srcDir(compileJavacc)
+ } else {
+ tasks.named<Jar>(mainSourceSet.sourcesJarTaskName) {
+ from(sourceSet.allSource)
+ }
+
+ val compileOnlyConfigName = "${sourceSetName}${JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME.capitalize()}"
+
+ configurations.getByName(compileOnlyConfigName) {
+ extendsFrom(configurations.named(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME).get())
+ }
+
+ tasks.named<Jar>(JavaPlugin.JAR_TASK_NAME) {
+ from(sourceSet.output)
+ }
+
+ tasks.named<Javadoc>(JavaPlugin.JAVADOC_TASK_NAME) {
+ source(sourceSet.java)
+ }
+
+ dependencies {
+ add(compileOnlyConfigName, mainSourceSet.output)
+ testImplementation(sourceSet.output)
+ }
+ }
+
+ if (compilerVersion != java.toolchain.languageVersion.get()) {
+ tasks.named<JavaCompile>(sourceSet.compileJavaTaskName) {
+ javaCompiler.set(javaToolchains.compilerFor {
+ languageVersion.set(compilerVersion)
+ })
+ }
+ }
+}
+
+configureSourceSet(SourceSet.MAIN_SOURCE_SET_NAME, "8")
+configureSourceSet("jsp20", "8")
+configureSourceSet("jsp21", "8")
+configureSourceSet("jython20", "8")
+configureSourceSet("jython22", "8")
+configureSourceSet("jython25", "8")
+configureSourceSet("core16", "16")
+
+sourceSets {
+ test {
+ val baseDir = "freemarker-test/src/test"
+ java.setSrcDirs(listOf("${baseDir}/java"))
+ resources.setSrcDirs(listOf("${baseDir}/resources"))
+ }
+}
+
+tasks.named<JavaCompile>(sourceSets["test"].compileJavaTaskName) {
+ javaCompiler.set(javaToolchains.compilerFor {
+ languageVersion.set(JavaLanguageVersion.of(testJavaVersion))
+ })
+}
+
+tasks.named<Javadoc>(JavaPlugin.JAVADOC_TASK_NAME) {
+ val coreExcludes = setOf(
+ "LocalContext.java",
+ "CollectionAndSequence.java",
+ "Comment.java",
+ "DebugBreak.java",
+ "Expression.java",
+ "LibraryLoad.java",
+ "Macro.java",
+ "ReturnInstruction.java",
+ "StringArraySequence.java",
+ "TemplateElement.java",
+ "TemplateObject.java",
+ "TextBlock.java",
+ "ReturnInstruction.java",
+ "TokenMgrError.java"
+ )
+
+ val logExcludes = setOf(
+ "SLF4JLoggerFactory.java",
+ "CommonsLoggingLoggerFactory.java"
+ )
+
+ val compileJavaccDestDir = compileJavacc.get().destinationDirectory.get().asFile
+ setSource(source.filter { f ->
+ val fileName = f.name
+ val parentDirName = f.parentFile?.name
+ !(f.startsWith(compileJavaccDestDir) ||
+ fileName.startsWith("_") && fileName.endsWith(".java") ||
+ fileName == "SunInternalXalanXPathSupport.java" ||
+ parentDirName == "core" && coreExcludes.contains(fileName) ||
+ parentDirName == "template" && fileName == "EmptyMap.java" ||
+ parentDirName == "log" && logExcludes.contains(fileName)
+ )
+ })
+}
+
+tasks.named<Test>(JavaPlugin.TEST_TASK_NAME) {
+ val processResourcesName = sourceSets[SourceSet.TEST_SOURCE_SET_NAME].processResourcesTaskName
+ val resourcesDestDir = tasks.named<ProcessResources>(processResourcesName).get().destinationDir.toString()
+ systemProperty("freemarker.test.resourcesDir", resourcesDestDir)
+
+ javaLauncher.set(javaToolchains.launcherFor {
+ languageVersion.set(JavaLanguageVersion.of(testRunnerJavaVersion))
+ })
+}
+
+configurations {
+ compileOnly {
+ exclude(group = "xml-apis", module = "xml-apis")
+ }
+ testImplementation {
+ // Excluding to avoid test failures due to SAX parser conflict.
+ exclude(group = "pull-parser", module = "pull-parser")
+ }
+
+ register("combinedClasspath") {
+ extendsFrom(named("jython25CompileOnly").get())
+ extendsFrom(named("jsp21CompileOnly").get())
+ }
+
+ testImplementation {
+ extendsFrom(named("jython25CompileOnly").get())
+ }
+}
+
+tasks.named<Jar>(sourceSets.named(SourceSet.MAIN_SOURCE_SET_NAME).get().sourcesJarTaskName) {
+ from(compileJavacc.flatMap { it.sourceDirectory })
+ from(resourceTemplatesDir)
+
+ from(files("LICENSE", "NOTICE")) {
+ into("META-INF")
+ }
+}
+
+
+tasks.named<ProcessResources>("processResources") {
+ with(copySpec {
+ from(resourceTemplatesDir)
+ filter<org.apache.tools.ant.filters.ReplaceTokens>(mapOf("tokens" to versionFileTokens))
+ })
+}
+
+val rmicOutputDir: java.nio.file.Path = buildDir.toPath().resolve("rmic")
+
+tasks.register("rmic") {
+ val rmicClasspath = objects.fileCollection()
+
+ val sourceSet = sourceSets[SourceSet.MAIN_SOURCE_SET_NAME]
+ val compileTaskName = sourceSet.compileJavaTaskName
+ val compileTaskRef = tasks.named<JavaCompile>(compileTaskName)
+
+ rmicClasspath.from(compileTaskRef.map { it.classpath })
+ rmicClasspath.from(compileTaskRef.map { it.outputs })
+
+ inputs.files(rmicClasspath)
+ outputs.dir(rmicOutputDir)
+
+ doLast {
+ val allClassesDirs = sourceSet.output.classesDirs
+
+ val rmicRelSrcPath = listOf("freemarker", "debug", "impl")
+ val rmicSrcPattern = "Rmi*Impl.class"
+
+ val rmicRelSrcPathStr = rmicRelSrcPath.joinToString(separator = File.separator)
+ val classesDir = allClassesDirs.find { candidateDir ->
+ Files.newDirectoryStream(candidateDir.toPath().resolve(rmicRelSrcPathStr), rmicSrcPattern).use { files ->
+ val firstFile = files.first { Files.isRegularFile(it) }
+ firstFile != null
+ }
+ }
+
+ if (classesDir != null) {
+ ant.withGroovyBuilder {
+ "rmic"(
+ "classpath" to rmicClasspath.asPath,
+ "base" to classesDir.toString(),
+ "destDir" to rmicOutputDir.toString(),
+ "includes" to "${rmicRelSrcPath.joinToString("/")}/$rmicSrcPattern",
+ "verify" to "yes",
+ "stubversion" to "1.2"
+ )
+ }
+ } else {
+ throw IllegalStateException("Couldn't find classes dir in ${allClassesDirs.asPath}")
+ }
+ }
+}
+
+// This source set is only needed, because the OSGI plugin supports only a single sourceSet.
+// We are deleting it, because otherwise it would fool IDEs that a source root has multiple owners.
+val osgiSourceSet = sourceSets.create("osgi") {
+ val otherSourceSets = allSourceSetNames.map { name -> sourceSets.named(name).get() }
+
+ java {
+ setSrcDirs(otherSourceSets.flatMap { s -> s.java.srcDirs })
+ }
+ resources {
+ setSrcDirs(otherSourceSets.flatMap { s -> s.resources.srcDirs })
+ }
+}
+val osgiClasspath = configurations.named("combinedClasspath").get()
+osgiSourceSet.compileClasspath = osgiClasspath
+osgiSourceSet.runtimeClasspath = osgiClasspath
+sourceSets.remove(osgiSourceSet)
+
+tasks.named<Jar>(JavaPlugin.JAR_TASK_NAME) {
+ from(rmicOutputDir)
+
+ configure<aQute.bnd.gradle.BundleTaskExtension> {
+ bndfile.set(file("osgi.bnd"))
+
+ setSourceSet(osgiSourceSet)
+ properties.putAll(versionProperties)
+ properties.put("moduleOrg", project.group.toString())
+ properties.put("moduleName", project.name)
+ }
+}
+
+tasks.named<Javadoc>(JavaPlugin.JAVADOC_TASK_NAME) {
+ javadocTool.set(javaToolchains.javadocToolFor {
+ languageVersion.set(JavaLanguageVersion.of(javadocJavaVersion))
+ })
+
+ val javadocEncoding = StandardCharsets.UTF_8
+
+ options {
+ locale = "en_US"
+ encoding = javadocEncoding.name()
+ windowTitle = "FreeMarker ${displayVersion} API"
+
+ val extraOptions = this as StandardJavadocDocletOptions
+ extraOptions.links("https://docs.oracle.com/en/java/javase/16/docs/api/")
+
+ extraOptions.author(true)
+ extraOptions.version(true)
+ extraOptions.docEncoding = javadocEncoding.name()
+ extraOptions.charSet = javadocEncoding.name()
+ extraOptions.docTitle = "FreeMarker ${displayVersion}"
+
+ // There are too many to check
+ extraOptions.addStringOption("Xdoclint:-missing", "-quiet")
+ }
+
+ classpath = files(configurations.named("combinedClasspath"))
+
+ doLast {
+ val stylesheetPath = destinationDir!!.toPath().resolve("stylesheet.css")
+ logger.info("Fixing JDK 8 ${stylesheetPath}")
+
+ val ddSelectorStart = "(?:\\.contentContainer\\s+\\.(?:details|description)|\\.serializedFormContainer)\\s+dl\\s+dd\\b.*?\\{[^\\}]*\\b"
+ val ddPropertyEnd = "\\b.+?;"
+
+ val fixRules = listOf(
+ Pair(Regex("/\\* (Javadoc style sheet) \\*/"), "/\\* \\1 - JDK 8 usability fix regexp substitutions applied \\*/"),
+ Pair(Regex("@import url\\('resources/fonts/dejavu.css'\\);\\s*"), ""),
+ Pair(Regex("['\"]DejaVu Sans['\"]"), "Arial"),
+ Pair(Regex("['\"]DejaVu Sans Mono['\"]"), "'Courier New'"),
+ Pair(Regex("['\"]DejaVu Serif['\"]"), "Arial"),
+ Pair(Regex("(?<=[\\s,:])serif\\b"), "sans-serif"),
+ Pair(Regex("(?<=[\\s,:])Georgia,\\s*"), ""),
+ Pair(Regex("['\"]Times New Roman['\"],\\s*"), ""),
+ Pair(Regex("(?<=[\\s,:])Times,\\s*"), ""),
+ Pair(Regex("(?<=[\\s,:])Arial\\s*,\\s*Arial\\b"), ""),
+ Pair(Regex("(${ddSelectorStart})margin${ddPropertyEnd}"), "\\1margin: 5px 0 10px 20px;"),
+ Pair(Regex("(${ddSelectorStart})font-family${ddPropertyEnd}"), "\\1")
+ )
+
+ var stylesheetContent = String(Files.readAllBytes(stylesheetPath), javadocEncoding)
+ for (rule in fixRules) {
+ val prevContent = stylesheetContent
+ stylesheetContent = stylesheetContent.replace(rule.first, rule.second)
+
+ if (prevContent == stylesheetContent) {
+ logger.warn("Javadoc style sheet did not contain anything matching: ${rule.first}")
+ }
+ }
+
+ Files.write(stylesheetPath, stylesheetContent.toByteArray(javadocEncoding))
+ }
+}
+
+fun registerManualTask(taskName: String, locale: String, offline: Boolean) {
+ val manualTaskRef = tasks.register(taskName) {
+ val inputDir = file("freemarker-manual/src/main/docgen/${locale}")
+ inputs.dir(inputDir)
+
+ val outputDir = buildDir.toPath().resolve("manual-${if (offline) "offline" else "online"}").resolve(locale)
+ outputs.dir(outputDir)
+
+ description = if (offline) "Build the Manual for offline use" else "Build the Manual to be upload to the FreeMarker homepage"
+
+ doLast {
+ val transform = org.freemarker.docgen.core.Transform()
+ transform.offline = offline
+ transform.sourceDirectory = inputDir
+ transform.destinationDirectory = outputDir.toFile()
+
+ transform.execute()
+ }
+ }
+
+ tasks.named(LifecycleBasePlugin.BUILD_TASK_NAME) { dependsOn(manualTaskRef) }
+}
+
+registerManualTask("manualOffline", "en_US", true)
+registerManualTask("manualOnline", "en_US", false)
+
+afterEvaluate {
+ // We are setting this, so the pom.xml will be generated properly
+ System.setProperty("line.separator", "\n")
+}
+
+publishing {
+ repositories {
+ maven {
+ val snapshot = project.version.toString().endsWith("-SNAPSHOT")
+ val defaultDeployUrl = if (snapshot) "https://repository.apache.org/content/repositories/snapshots" else "https://repository.apache.org/service/local/staging/deploy/maven2"
+ setUrl(providers.gradleProperty("freemarkerDeployUrl").getOrElse(defaultDeployUrl))
+ name = providers.gradleProperty("freemarkerDeployServerId").getOrElse("apache.releases.https")
+ }
+ }
+
+ publications {
+ val mainPublication = create<MavenPublication>("main") {
+ from(components.getByName("java"))
+ pom {
+ withXml {
+ val headerComment = asElement().ownerDocument.createComment("""
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+ """.trimIndent().prependIndent(" ")
+ )
+ asElement().insertBefore(headerComment, asElement().firstChild)
+ }
+
+ packaging = "jar"
+ name.set("Apache FreeMarker")
+ description.set("""
+
+ Google App Engine compliant variation of FreeMarker.
+ FreeMarker is a "template engine"; a generic tool to generate text output based on templates.
+ """.trimIndent().prependIndent(" ") + "\n "
+ )
+ url.set("https://freemarker.apache.org/")
+
+ organization {
+ name.set("Apache Software Foundation")
+ url.set("http://apache.org")
+ }
+
+ licenses {
+ license {
+ name.set("Apache License, Version 2.0")
+ url.set("http://www.apache.org/licenses/LICENSE-2.0.txt")
+ distribution.set("repo")
+ }
+ }
+
+ scm {
+ connection.set("scm:git:https://git-wip-us.apache.org/repos/asf/freemarker.git")
+ developerConnection.set("scm:git:https://git-wip-us.apache.org/repos/asf/freemarker.git")
+ url.set("https://git-wip-us.apache.org/repos/asf?p=freemarker.git")
+ tag.set("v${project.version}")
+ }
+
+ issueManagement {
+ system.set("jira")
+ url.set("https://issues.apache.org/jira/browse/FREEMARKER/")
+ }
+
+ mailingLists {
+ mailingList {
+ name.set("FreeMarker developer list")
+ post.set("dev@freemarker.apache.org")
+ subscribe.set("dev-subscribe@freemarker.apache.org")
+ unsubscribe.set("dev-unsubscribe@freemarker.apache.org")
+ archive.set("http://mail-archives.apache.org/mod_mbox/freemarker-dev/")
+ }
+ mailingList {
+ name.set("FreeMarker commit and Jira notifications list")
+ post.set("notifications@freemarker.apache.org")
+ subscribe.set("notifications-subscribe@freemarker.apache.org")
+ unsubscribe.set("notifications-unsubscribe@freemarker.apache.org")
+ archive.set("http://mail-archives.apache.org/mod_mbox/freemarker-notifications/")
+ }
+ mailingList {
+ name.set("FreeMarker management private")
+ post.set("private@freemarker.apache.org")
+ }
+ }
+ }
+ }
+ if (doSignPackages.get()) {
+ signing.sign(mainPublication)
+ }
+ }
+}
+
+val distArchiveBaseName = "apache-${name}"
+val distDir = buildDir.toPath().resolve("distributions")
+
+fun registerSignatureTask(archiveTask: TaskProvider<Tar>) {
+ val signTask = tasks.register(archiveTask.name + "Signature") {
+ val archiveFileRef = archiveTask.flatMap { task -> task.archiveFile }
+
+ inputs.file(archiveFileRef)
+ outputs.file(archiveFileRef.map { f -> File(f.asFile.toString() + ".asc") })
+
+ doLast {
+ signing.sign(archiveTask.get().archiveFile.get().asFile)
+ }
+ }
+
+ tasks.named(LifecycleBasePlugin.BUILD_TASK_NAME) {
+ dependsOn(archiveTask)
+
+ if (doSignPackages.get()) {
+ dependsOn(signTask)
+ }
+ }
+}
+
+fun registerCommonFiles(tar: Tar) {
+ tar.from("README.md") {
+ val displayVersion = versionProperties.get("version")!!
+ filter { content -> content.replace("{version}", displayVersion) }
+ }
+
+ tar.from(files("NOTICE", "RELEASE-NOTES"))
+}
+
+val distBin = tasks.register<Tar>("distBin") {
+ compression = Compression.GZIP
+ archiveBaseName.set(distArchiveBaseName)
+ destinationDirectory.set(distDir.toFile())
+ archiveAppendix.set("bin")
+
+ registerCommonFiles(this)
+
+ from("src/dist/bin") {
+ exclude("rat-excludes")
+ }
+
+ val jarFile = tasks.named<Jar>("jar").flatMap { jar -> jar.archiveFile }
+ from(jarFile) {
+ rename { name -> "freemarker.jar" }
+ }
+
+ from(tasks.named("manualOffline")) {
+ into("documentation/_html")
+ }
+
+ from(tasks.named(JavaPlugin.JAVADOC_TASK_NAME)) {
+ into("documentation/_html/api")
+ }
+}
+registerSignatureTask(distBin)
+
+val distSrc = tasks.register<Tar>("distSrc") {
+ compression = Compression.GZIP
+ archiveBaseName.set(distArchiveBaseName)
+ destinationDirectory.set(distDir.toFile())
+ archiveAppendix.set("src")
+
+ registerCommonFiles(this)
+
+ from(files("LICENSE"))
+
+ from(projectDir) {
+ includeEmptyDirs = false
+ include(
+ "src/**",
+ "*/src/**",
+ "**/*.kts",
+ "*.txt",
+ "osgi.bnd",
+ "rat-excludes"
+ )
+ exclude(
+ "/build",
+ "/*/build",
+ "/gradle/wrapper",
+ "/gradlew*",
+ "**/*.bak",
+ "**/*.~*",
+ "*/*.*~"
+ )
+ }
+}
+registerSignatureTask(distSrc)
+
+fun readExcludeFile(excludeFile: File): List<String> {
+ Files.lines(excludeFile.toPath()).use { lines ->
+ return lines
+ .map { it.trim() }
+ .filter { !it.startsWith("#") && !it.isEmpty() }
+ .collect(Collectors.toList())
+ }
+}
+
+tasks.withType<org.nosphere.apache.rat.RatTask>() {
+ doLast {
+ println("RAT (${name} task) report was successful: ${reportDir.get().asFile.toPath().resolve("index.html").toUri()}")
+ }
+}
+
+tasks.named<org.nosphere.apache.rat.RatTask>("rat") {
+ inputDir.set(projectDir)
+ excludes.addAll(readExcludeFile(file("rat-excludes")))
+}
+
+fun registerDistRatTask(taskName: String, excludeFile: File, srcArchiveTaskRef: TaskProvider<Tar>) {
+ val inputTaskName = "${taskName}Prep"
+ val ratInputTask = tasks.register<Sync>(inputTaskName) {
+ dependsOn(srcArchiveTaskRef)
+
+ destinationDir = buildDir.toPath().resolve("rat-prep").resolve(taskName).toFile()
+ from(tarTree(srcArchiveTaskRef.flatMap { it.archiveFile }))
+ }
+
+ val ratTask = tasks.register<org.nosphere.apache.rat.RatTask>(taskName) {
+ dependsOn(ratInputTask)
+
+ group = LifecycleBasePlugin.VERIFICATION_GROUP
+ description = "RAT report for the output of ${srcArchiveTaskRef.name}"
+ inputDir.set(layout.dir(ratInputTask.map { it.destinationDir }))
+ excludes.addAll(readExcludeFile(excludeFile))
+ }
+ tasks.named(LifecycleBasePlugin.CHECK_TASK_NAME) {
+ dependsOn(ratTask)
+ }
+}
+
+registerDistRatTask("ratDistBin", file("src/dist/bin/rat-excludes"), distBin)
+registerDistRatTask("ratDistSrc", file("rat-excludes"), distSrc)
+
+// Choose the Jetty version very carefully, as it should implement the same Servlet API, JSP API, and EL API
+// what we declare below, because the same classes will come from Jetty as well. For example, Jetty depends
+// on org.mortbay.jasper:apache-el, which contains the javax.el classes, along with non-javax.el classes, so you
+// can't even exclude it. Similarly, org.eclipse.jetty:apache-jsp contains the JSP API javax.servlet.jsp classes,
+// yet again along with other classes. Anyway, this mess is temporary, as we will migrate to Jakarta, and only
+// support that.
+val jettyVersion = "9.4.53.v20231009"
+val slf4jVersion = "1.6.1"
+val springVersion = "2.5.6.SEC03"
+val tagLibsVersion = "1.2.5"
+
+dependencies {
+ compileOnly("jaxen:jaxen:1.0-FCS")
+ compileOnly("saxpath:saxpath:1.0-FCS")
+ compileOnly("xalan:xalan:2.7.0")
+ compileOnly("jdom:jdom:1.0b8")
+ compileOnly("ant:ant:1.6.5") // FIXME: This could be moved to "jython20CompileOnly"
+ compileOnly("rhino:js:1.6R1")
+ compileOnly("avalon-logkit:avalon-logkit:2.0")
+ compileOnly("org.slf4j:slf4j-api:${slf4jVersion}")
+ compileOnly("org.slf4j:log4j-over-slf4j:${slf4jVersion}")
+ compileOnly("org.slf4j:jcl-over-slf4j:${slf4jVersion}") // FIXME: This seems to be unused
+ compileOnly("commons-logging:commons-logging:1.1.1") // FIXME: This seems to be unused
+ compileOnly("org.zeroturnaround:javarebel-sdk:1.2.2")
+ compileOnly("com.google.code.findbugs:annotations:3.0.0")
+ compileOnly("org.dom4j:dom4j:2.1.3")
+
+ "jsp20CompileOnly"("javax.servlet.jsp:jsp-api:2.0")
+ "jsp20CompileOnly"("javax.servlet:servlet-api:2.4")
+
+ "jsp21CompileOnly"(sourceSets["jsp20"].output)
+ "jsp21CompileOnly"("javax.servlet.jsp:jsp-api:2.1")
+ "jsp21CompileOnly"("javax.servlet:servlet-api:2.5")
+
+ "jython20CompileOnly"("jython:jython:2.1")
+
+ "jython22CompileOnly"(sourceSets["jython20"].output)
+ "jython22CompileOnly"("org.python:jython:2.2.1")
+
+ "jython25CompileOnly"(sourceSets["jython20"].output)
+ "jython25CompileOnly"("org.python:jython:2.5.0")
+
+ testImplementation("junit:junit:4.12")
+ testImplementation("org.hamcrest:hamcrest-library:1.3")
+ testImplementation("ch.qos.logback:logback-classic:1.1.2")
+ testImplementation("commons-io:commons-io:2.7")
+ testImplementation("com.google.guava:guava:29.0-jre")
+ testImplementation("org.eclipse.jetty:jetty-server:${jettyVersion}")
+ testImplementation("org.eclipse.jetty:jetty-webapp:${jettyVersion}")
+ testImplementation("org.eclipse.jetty:jetty-util:${jettyVersion}")
+ testImplementation("org.eclipse.jetty:apache-jsp:${jettyVersion}")
+ // Jetty also contains the servlet-api and jsp-api classes
+
+ testImplementation("displaytag:displaytag:1.2") {
+ exclude(group = "com.lowagie", module = "itext")
+ // We manage logging centrally:
+ exclude(group = "org.slf4j", module = "slf4j-log4j12")
+ exclude(group = "rg.slf4j", module = "jcl104-over-slf4j")
+ exclude(group = "log4j", module = "log4j")
+ }
+
+ // JSP JSTL (not included in Jetty):
+ testImplementation("org.apache.taglibs:taglibs-standard-impl:${tagLibsVersion}")
+ testImplementation("org.apache.taglibs:taglibs-standard-spec:${tagLibsVersion}")
+
+ // Override Java 9 incompatible version (coming from displaytag):
+ testImplementation("commons-lang:commons-lang:2.6")
+
+ testImplementation("org.springframework:spring-core:${springVersion}") {
+ exclude(group = "commons-logging", module = "commons-logging")
+ }
+ testImplementation("org.springframework:spring-test:${springVersion}") {
+ exclude(group = "commons-logging", module = "commons-logging")
+ }
+}
diff --git a/build.properties.sample b/build.properties.sample
deleted file mode 100644
index dd796c3..0000000
--- a/build.properties.sample
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# Copy this file to "build.properties" before editing!
-boot.classpath.j2se1.8=C:/Program Files/Java/jdk1.8.0_66/jre/lib/rt.jar
-mvnCommand=C:/Program Files (x86)/maven3/bin/mvn.bat
-gpgCommand=C:/Program Files (x86)/GNU/GnuPG/pub/gpg.exe
\ No newline at end of file
diff --git a/build.xml b/build.xml
deleted file mode 100644
index c16e571..0000000
--- a/build.xml
+++ /dev/null
@@ -1,955 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<project basedir="." default="jar" name="freemarker"
- xmlns:ivy="antlib:org.apache.ivy.ant"
- xmlns:javacc="http://javacc.dev.java.net/"
- xmlns:docgen="http://freemarker.org/docgen"
- xmlns:bnd="http://www.aqute.biz/bnd"
- xmlns:rat="antlib:org.apache.rat.anttasks"
- xmlns:u="http://freemarker.org/util"
- xmlns:unless="ant:unless"
->
-
- <!-- ================================================================== -->
- <!-- Properties -->
- <!-- ================================================================== -->
-
- <!-- Maven project coordinates: -->
- <property name="mavenGroupId" value="org.freemarker" />
- <property name="mavenArtifactId" value="freemarker-gae" />
- <!-- Ivy project coordinates: -->
- <property name="moduleOrg" value="org.freemarker" />
- <property name="moduleName" value="freemarker" />
- <property name="moduleBranch" value="2.3" />
-
- <!-- Will be overidden on the Continous Integration server: -->
- <property name="server.ivy.repo.root" value="${basedir}/build/dummy-server-ivy-repo" />
-
- <property file="build.properties"/>
- <condition property="has.explicit.boot.classpath.j2se1.8">
- <isset property="boot.classpath.j2se1.8"/>
- </condition>
- <condition property="has.all.explicit.boot.classpaths">
- <and>
- <isset property="has.explicit.boot.classpath.j2se1.8"/>
- </and>
- </condition>
- <available property="atLeastJDK8" classname="java.util.function.Predicate"/>
-
- <!-- When boot.classpath.j* is missing, these will be the defaults: -->
- <!-- Note: Target "dist" doesn't allow using these. -->
- <property name="boot.classpath.j2se1.8" value="${sun.boot.class.path}" />
-
- <!-- For checking the correctness of the boot.classpath.j2se* -->
- <available classpath="${boot.classpath.j2se1.8}"
- classname="java.time.Instant" ignoresystemclasses="true"
- property="boot.classpath.j2se1.8.correct"
- />
-
- <!-- Set up version/timestamp filters and the version property: -->
- <tstamp>
- <format property="timestampNice" pattern="yyyy-MM-dd'T'HH:mm:ss'Z'"
- timezone="UTC" />
- <format property="timestampInVersion" pattern="yyyyMMdd'T'HHmmss'Z'"
- timezone="UTC" />
- </tstamp>
- <filter token="timestampInVersion" value="${timestampInVersion}" />
- <filter token="timestampNice" value="${timestampNice}" />
- <mkdir dir="build"/>
- <!-- Copying is needed to substitute the timestamps. -->
- <copy
- file="src/main/resources/freemarker/version.properties"
- tofile="build/version.properties.tmp"
- filtering="true"
- overwrite="true"
- />
- <property file="build/version.properties.tmp" />
- <delete file="build/version.properties.tmp" />
- <filter token="version" value="${version}" />
-
- <property name="dist.dir" value="build/dist" />
- <property name="dist.archiveBaseName" value="apache-${mavenArtifactId}-${mavenVersion}" />
- <property name="dist.bin.dir" value="${dist.dir}/bin/${dist.archiveBaseName}-bin" />
- <property name="dist.src.dir" value="${dist.dir}/src/${dist.archiveBaseName}-src" />
-
- <!-- ================================================================== -->
- <!-- Initialization -->
- <!-- ================================================================== -->
-
-
- <target name="clean" description="get rid of all generated files">
- <delete dir="build" />
- <delete dir="META-INF" />
- </target>
-
- <target name="clean-classes" description="get rid of compiled classes">
- <delete dir="build/classes" />
- <delete dir="build/test-classes" />
- <delete dir="build/coverage/classes" />
- </target>
-
- <target name="init">
- <mkdir dir="build"/>
- </target>
-
- <property name="ivy.install.version" value="2.5.0" />
- <property name="ivy.home" value="${user.home}/.ant" />
- <property name="ivy.jar.dir" value="${ivy.home}/lib" />
- <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />
- <target name="download-ivy">
- <mkdir dir="${ivy.jar.dir}"/>
- <get src="https://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
- dest="${ivy.jar.file}" usetimestamp="true"/>
- </target>
-
- <!-- ================================================================= -->
- <!-- Compilation -->
- <!-- ================================================================= -->
-
- <target name="javacc" depends="init" unless="parser.uptodate"
- description="Build the parser from its grammar file"
- >
- <ivy:cachepath conf="parser" pathid="ivy.dep" />
- <taskdef name="generate" classname="org.apache.tools.ant.taskdefs.optional.javacc.JavaCC"
- uri="http://javacc.dev.java.net/"
- classpathref="ivy.dep"
- />
-
- <property name="_javaccOutputDir"
- value="build/generated-sources/java/freemarker/core/"
- />
-
- <mkdir dir="${_javaccOutputDir}" />
- <ivy:retrieve conf="parser" pattern="build/javacc-home.tmp/[artifact].[ext]" />
- <javacc:generate
- target="src/main/javacc/FTL.jj"
- outputdirectory="${_javaccOutputDir}"
- javacchome="build/javacc-home.tmp"
- />
- <delete dir="build/javacc-home.tmp" />
-
- <replace
- file="${_javaccOutputDir}/FMParserConstants.java"
- token="public interface FMParserConstants"
- value="interface FMParserConstants"
- />
- <replace
- file="${_javaccOutputDir}/FMParserTokenManager.java"
- token="public class FMParserTokenManager"
- value="class FMParserTokenManager"
- />
- <replace
- file="${_javaccOutputDir}/Token.java"
- token="public class Token"
- value="class Token"
- />
- <replace
- file="${_javaccOutputDir}/SimpleCharStream.java"
- token="public final class SimpleCharStream"
- value="final class SimpleCharStream"
- />
- <replace
- file="${_javaccOutputDir}/FMParser.java"
- token="enum"
- value="ENUM"
- />
-
- <!-- As we have a modified version in src/main/java: -->
- <move
- file="${_javaccOutputDir}/ParseException.java"
- tofile="${_javaccOutputDir}/ParseException.java.ignore"
- />
- <move
- file="${_javaccOutputDir}/TokenMgrError.java"
- tofile="${_javaccOutputDir}/TokenMgrError.java.ignore"
- />
- </target>
-
- <target name="compile" depends="javacc">
- <fail unless="boot.classpath.j2se1.8.correct"><!--
- -->The "boot.classpath.j2se1.8" property value (${boot.classpath.j2se1.8}) <!--
- -->seems to be an incorrect boot classpath. Please fix it in <!--
- -->the <projectDir>/build.properties file, or wherever you <!--
- -->set it.<!--
- --></fail>
- <echo level="info"><!--
- -->Using boot classpaths: <!--
- -->Java 8: ${boot.classpath.j2se1.8}<!--
- -->Java 16: Current JDK classpath<!--
- --></echo>
-
- <!-- Comment out @SuppressFBWarnings, as it causes compilation warnings in dependent Gradle projects -->
- <delete dir="build/src-main-java-filtered" />
- <mkdir dir="build/src-main-java-filtered" />
- <copy toDir="build/src-main-java-filtered">
- <fileset dir="src/main/java" excludes="**/AdhocTest*" />
- </copy>
- <replaceregexp
- flags="gs" encoding="utf-8"
- match='(@SuppressFBWarnings\(.+?"\s*\))' replace="/*\1*/"
- >
- <fileset dir="build/src-main-java-filtered" includes="**/*.java" />
- </replaceregexp>
- <replaceregexp
- flags="gs" encoding="utf-8"
- match='(import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;)' replace="// \1"
- >
- <fileset dir="build/src-main-java-filtered" includes="**/*.java" />
- </replaceregexp>
-
- <mkdir dir="build/classes" />
-
- <!-- Note: the "build.base" conf doesn't include optional FreeMarker dependencies. -->
- <ivy:cachepath conf="build.base" pathid="ivy.dep" />
- <javac destdir="build/classes" deprecation="off"
- debug="on" optimize="off" target="1.8" source="1.8" encoding="utf-8"
- includeantruntime="false"
- classpathref="ivy.dep"
- bootclasspath="${boot.classpath.j2se1.8}"
- excludes="
- freemarker/core/_Java?*Impl.java,
- freemarker/ext/jsp/**,
- freemarker/ext/servlet/**,
- freemarker/cache/WebappTemplateLoader.java,
-
- freemarker/ext/jython/**,
- freemarker/template/utility/JythonRuntime.java,
- freemarker/ext/ant/**"
- >
- <src>
- <pathelement location="build/src-main-java-filtered" />
- <pathelement location="build/generated-sources" />
- </src>
- </javac>
-
- <ivy:cachepath conf="build.base" pathid="ivy.dep" />
- <javac srcdir="build/src-main-java-filtered" destdir="build/classes" deprecation="off"
- debug="on" optimize="off" release="16" encoding="utf-8"
- includeantruntime="false"
- classpathref="ivy.dep"
- includes="freemarker/core/_Java16Impl.java"
- />
-
- <ivy:cachepath conf="build.jsp2.0" pathid="ivy.dep.jsp2.0" />
- <javac srcdir="build/src-main-java-filtered" destdir="build/classes" deprecation="off"
- debug="on" optimize="off" target="1.8" source="1.8" encoding="utf-8"
- includeantruntime="false"
- classpathref="ivy.dep.jsp2.0"
- bootclasspath="${boot.classpath.j2se1.8}"
- includes="
- freemarker/ext/jsp/**,
- freemarker/ext/servlet/**,
- freemarker/cache/WebappTemplateLoader.java"
- excludes="
- freemarker/ext/jsp/_FreeMarkerPageContext21.java,
- freemarker/ext/jsp/FreeMarkerJspFactory21.java,
- freemarker/ext/jsp/FreeMarkerJspApplicationContext.java"
- />
-
- <!-- There's no build.jsp2.0, as those classes are part of the common build subset. -->
-
- <ivy:cachepath conf="build.jsp2.1" pathid="ivy.dep.jsp2.1" />
- <javac srcdir="build/src-main-java-filtered" destdir="build/classes" deprecation="off"
- debug="on" optimize="off" target="1.8" source="1.8" encoding="utf-8"
- includeantruntime="false"
- classpathref="ivy.dep.jsp2.1"
- bootclasspath="${boot.classpath.j2se1.8}"
- includes="
- freemarker/ext/jsp/_FreeMarkerPageContext21.java,
- freemarker/ext/jsp/FreeMarkerJspFactory21.java,
- freemarker/ext/jsp/FreeMarkerJspApplicationContext.java"
- />
-
- <ivy:cachepath conf="build.jython2.0" pathid="ivy.dep.jython2.0" />
- <javac srcdir="build/src-main-java-filtered" destdir="build/classes" deprecation="off"
- debug="on" optimize="off" target="1.8" source="1.8" encoding="utf-8"
- includeantruntime="false"
- classpathref="ivy.dep.jython2.0"
- bootclasspath="${boot.classpath.j2se1.8}"
- includes="
- freemarker/ext/ant/**,
- freemarker/template/utility/JythonRuntime.java,
- freemarker/ext/jython/**"
- excludes="
- freemarker/ext/jython/_Jython22VersionAdapter.java,
- freemarker/ext/jython/_Jython25VersionAdapter.java"
- />
-
- <ivy:cachepath conf="build.jython2.2" pathid="ivy.dep.jython2.2" />
- <javac srcdir="build/src-main-java-filtered" destdir="build/classes" deprecation="off"
- debug="on" optimize="off" target="1.8" source="1.8" encoding="utf-8"
- includeantruntime="false"
- classpathref="ivy.dep.jython2.2"
- bootclasspath="${boot.classpath.j2se1.8}"
- includes="
- freemarker/ext/jython/_Jython22VersionAdapter.java"
- />
-
- <ivy:cachepath conf="build.jython2.5" pathid="ivy.dep.jython2.5" />
- <javac srcdir="build/src-main-java-filtered" destdir="build/classes" deprecation="off"
- debug="on" optimize="off" target="1.8" source="1.8" encoding="utf-8"
- includeantruntime="false"
- classpathref="ivy.dep.jython2.5"
- bootclasspath="${boot.classpath.j2se1.8}"
- includes="
- freemarker/ext/jython/_Jython25VersionAdapter.java"
- />
-
- <copy toDir="build/classes">
- <fileset dir="src/main/resources"
- excludes="
- freemarker/version.properties"
- />
- </copy>
- <copy toDir="build/classes" filtering="true" overwrite="true">
- <fileset dir="src/main/resources"
- includes="
- freemarker/version.properties"
- />
- </copy>
- <copy toDir="build/classes/META-INF">
- <fileset dir="src/dist/jar/META-INF" includes="*" />
- </copy>
- <delete dir="build/src-main-java-filtered" />
- </target>
-
- <target name="compileTest" depends="compile">
- <mkdir dir="build/test-classes" />
-
- <ivy:cachepath conf="build.test" pathid="ivy.dep.build.test" />
- <javac srcdir="src/test/java" destdir="build/test-classes" deprecation="off"
- debug="on" optimize="off" release="16" encoding="utf-8"
- includeantruntime="false"
- classpath="build/classes"
- classpathref="ivy.dep.build.test"
- />
- <copy toDir="build/test-classes">
- <fileset dir="src/test/resources"
- excludes=""
- />
- </copy>
- </target>
-
- <target name="jar" depends="compile">
- <ivy:cachepath pathid="ivy.dep" conf="bnd" />
- <taskdef resource="aQute/bnd/ant/taskdef.properties"
- uri="http://www.aqute.biz/bnd"
- classpathref="ivy.dep"
- />
-
- <!-- Hack: This file should be excluded, but I can't explain that to bnd. -->
- <!-- We don't have this file in 2.4.X... yet?
- <move
- file="build/classes/freemarker/core/SecureRendererImpl.class"
- tofile="build/SecureRendererImpl.class.tmp"
- preservelastmodified="true" overwrite="true"
- />
- -->
- <bnd:bnd
- files="osgi.bnd" eclipse="false"
- output="build/freemarker.jar"
- />
- <!-- Revert previous hack... -->
- <!-- We don't have this file in 2.4.X... yet?
- <move
- file="build/SecureRendererImpl.class.tmp"
- tofile="build/classes/freemarker/core/SecureRendererImpl.class"
- preservelastmodified="true" overwrite="true"
- />
- -->
- </target>
-
- <!-- ================================================================= -->
- <!-- Testing -->
- <!-- ================================================================= -->
-
- <target name="test" depends="compileTest" description="Run test cases">
- <mkdir dir="build/junit-reports" />
- <ivy:cachepath conf="run.test" pathid="ivy.dep.run.test" />
- <junit haltonfailure="on" logfailedtests="true" fork="true" forkmode="once">
- <classpath>
- <pathelement path="build/test-classes" />
- <pathelement path="build/classes" />
- <path refid="ivy.dep.run.test" />
- </classpath>
- <formatter type="plain" />
- <formatter type="xml" />
- <batchtest todir="build/junit-reports">
- <fileset dir="src/test/java">
- <include name="**/*Test.java" />
- <include name="**/*TestSuite.java" />
- <exclude name="**/Abstract*.java" />
- </fileset>
- </batchtest>
- </junit>
- </target>
-
- <!-- ================================================================= -->
- <!-- Generate docs -->
- <!-- ================================================================= -->
-
- <target name="javadoc" depends="compile" description="Build the JavaDocs">
- <mkdir dir="build/api" />
- <delete includeEmptyDirs="yes">
- <fileset dir="build/api" includes="**/*" />
- </delete>
- <!-- javadoc with <fileset> has bugs, so we create a filtered copy: -->
- <copy todir="build/javadoc-sources">
- <fileset dir="src/main/java">
- <exclude name="**/_*.java" />
- <exclude name="**/SunInternalXalanXPathSupport.java" />
- <!-- Remove classes that are, I suppose, only accidentally public: -->
- <exclude name="**/core/LocalContext.java" />
- <exclude name="**/core/CollectionAndSequence.java" />
- <exclude name="**/core/Comment.java" />
- <exclude name="**/core/DebugBreak.java" />
- <exclude name="**/core/Expression.java" />
- <exclude name="**/core/LibraryLoad.java" />
- <exclude name="**/core/Macro.java" />
- <exclude name="**/core/ReturnInstruction.java" />
- <exclude name="**/core/StringArraySequence.java" />
- <exclude name="**/core/TemplateElement.java" />
- <exclude name="**/core/TemplateObject.java" />
- <exclude name="**/core/TextBlock.java" />
- <exclude name="**/core/ReturnInstruction.java" />
- <exclude name="**/core/TokenMgrError.java" />
- <exclude name="**/template/EmptyMap.java" />
- <exclude name="**/log/SLF4JLoggerFactory.java" />
- <exclude name="**/log/CommonsLoggingLoggerFactory.java" />
- </fileset>
- </copy>
-
- <!-- conf="IDE": as that has to contain all depedencies -->
- <ivy:cachepath conf="IDE" pathid="ivy.dep" />
- <javadoc
- sourcepath="build/javadoc-sources"
- destdir="build/api"
- doctitle="FreeMarker ${version}"
- packagenames="
- freemarker.debug, freemarker.template.*,
- freemarker.core.*, freemarker.ext.*,
- freemarker.cache.*, freemarker.log.*"
- use="true"
- version="true"
- author="true"
- windowtitle="FreeMarker ${version} API"
- classpath="build/classes"
- classpathref="ivy.dep"
- failonerror="true"
- charset="UTF-8"
- docencoding="UTF-8"
- encoding="UTF-8"
- locale="en_US"
- >
- <link href="https://docs.oracle.com/en/java/javase/16/docs/api/"/>
- </javadoc>
- <delete dir="build/javadoc-sources" />
- </target>
-
- <!-- ====================== -->
- <!-- Manual -->
- <!-- ====================== -->
-
- <macrodef name="manual" uri="http://freemarker.org/util">
- <attribute name="offline" />
- <attribute name="locale" />
- <sequential>
- <ivy:cachepath conf="manual" pathid="ivy.dep" />
- <taskdef resource="org/freemarker/docgen/ant/antlib.properties"
- uri="http://freemarker.org/docgen"
- classpathref="ivy.dep"
- />
-
- <docgen:transform
- srcdir="src/manual/@{locale}" destdir="build/manual/@{locale}"
- offline="@{offline}"
- />
- </sequential>
- </macrodef>
-
- <target name="manualOffline" depends="init" description="Build the Manual for offline use" >
- <u:manual offline="true" locale="en_US" />
- </target>
-
- <target name="manualOnline" depends="init" description="Build the Manual to be upload to the FreeMarker homepage" >
- <u:manual offline="false" locale="en_US" />
- </target>
-
- <target name="manualOffline_zh_CN" depends="init" description="Build the Manual for offline use" >
- <u:manual offline="true" locale="zh_CN" />
- </target>
-
- <target name="manualOnline_zh_CN" depends="init" description="Build the Manual to be upload to the FreeMarker homepage" >
- <u:manual offline="false" locale="zh_CN" />
- </target>
-
-
- <!-- ===================== -->
- <!-- Distribution building -->
- <!-- ===================== -->
-
- <target name="dist"
- description="Build the FreeMarker distribution files"
- >
- <fail
- unless="has.all.explicit.boot.classpaths"
- message="All boot.classpath properties must be set in build.properties for dist!"
- />
- <fail unless="atLeastJDK8" message="The release should be built with JDK 8+ (you may need to set JAVA_HOME)" />
- <antcall target="clean" /> <!-- To improve the reliability -->
- <antcall target="_dist" />
- </target>
-
- <target name="_dist"
- depends="test, jar, javadoc, manualOffline"
- >
- <delete dir="${dist.dir}" />
-
- <!-- ..................................... -->
- <!-- Binary distribution -->
- <!-- ..................................... -->
-
- <mkdir dir="${dist.bin.dir}" />
-
- <!-- Copy txt-s -->
- <copy todir="${dist.bin.dir}" includeEmptyDirs="no">
- <fileset dir="." defaultexcludes="no">
- <include name="README.md" />
- <!-- LICENSE is binary-distribution-specific, and is copied later. -->
- <include name="NOTICE" />
- <include name="RELEASE-NOTES" />
- </fileset>
- </copy>
- <replace
- file="${dist.bin.dir}/README.md"
- token="{version}"
- value="${version}"
- />
- <!-- Copy binary-distribution-specific files: -->
- <copy todir="${dist.bin.dir}/">
- <fileset dir="src/dist/bin/">
- <exclude name="rat-excludes" />
- </fileset>
- </copy>
-
- <!-- Copy binary -->
- <copy file="build/freemarker.jar" tofile="${dist.bin.dir}/freemarker.jar" />
-
- <!-- Copy documentation -->
- <mkdir dir="${dist.bin.dir}/documentation" />
-
- <!--
- The US English Manual is the source of any translations and thus it's the
- only one that is guaranteed to be up to date when doing the release, so we
- only pack that into it.
- -->
- <copy todir="${dist.bin.dir}/documentation/_html" includeEmptyDirs="no">
- <fileset dir="build/manual/en_US" />
- </copy>
- <copy todir="${dist.bin.dir}/documentation/_html/api" includeEmptyDirs="no">
- <fileset dir="build/api" />
- </copy>
-
- <u:packageAndSignDist
- srcDir="${dist.bin.dir}/.."
- archiveNameWithoutExt="${dist.archiveBaseName}-bin"
- />
-
- <!-- ..................................... -->
- <!-- Source distribution -->
- <!-- ..................................... -->
-
- <mkdir dir="${dist.src.dir}" />
-
- <!-- Copy extensionless files: -->
- <copy todir="${dist.src.dir}" includeEmptyDirs="no">
- <fileset dir="." defaultexcludes="no">
- <include name="README.md" />
- <include name="LICENSE" />
- <include name="NOTICE" />
- <include name="RELEASE-NOTES" />
- </fileset>
- </copy>
- <replace
- file="${dist.src.dir}/README.md"
- token="{version}"
- value="${version}"
- />
-
- <copy todir="${dist.src.dir}" includeEmptyDirs="no">
- <fileset dir="." defaultexcludes="no">
- <exclude name="**/*.bak" />
- <exclude name="**/*.~*" />
- <exclude name="**/*.*~" />
- <include name="src/**" />
- <include name="*.xml" />
- <include name="*.sample" />
- <include name="*.txt" />
- <include name="osgi.bnd" />
- <include name=".git*" />
- <include name="rat-excludes" />
- </fileset>
- </copy>
-
- <u:packageAndSignDist
- srcDir="${dist.src.dir}/.."
- archiveNameWithoutExt="${dist.archiveBaseName}-src"
- />
- </target>
-
- <macrodef name="packageAndSignDist" uri="http://freemarker.org/util">
- <attribute name="srcDir" />
- <attribute name="archiveNameWithoutExt" />
- <sequential>
- <local name="archive.tar"/>
- <property name="archive.tar" value="build/dist/@{archiveNameWithoutExt}.tar" />
- <local name="archive.gzip"/>
- <property name="archive.gzip" value="${archive.tar}.gz" />
- <delete file="${archive.tar}" />
- <tar tarfile="${archive.tar}" basedir="@{srcDir}" />
- <delete file="${archive.gzip}" />
- <gzip zipfile="${archive.gzip}" src="${archive.tar}" />
- <delete file="${archive.tar}" />
-
- <echo>Signing "${archive.gzip}"...</echo>
- <!-- gpg may hang if it exists: -->
- <delete file="${archive.gzip}.asc" />
- <exec executable="${gpgCommand}" failonerror="true">
- <arg value="--armor" />
- <arg value="--output" />
- <arg value="${archive.gzip}.asc" />
- <arg value="--detach-sig" />
- <arg value="${archive.gzip}" />
- </exec>
-
- <echo>*** Signature verification: ***</echo>
- <exec executable="${gpgCommand}" failonerror="true">
- <arg value="--verify" />
- <arg value="${archive.gzip}.asc" />
- <arg value="${archive.gzip}" />
- </exec>
- <local name="signatureGood" />
- <local name="signatureGood.y" />
- <input
- validargs="y,n"
- addproperty="signatureGood"
- unless:set="ci"
- >Is the above signer the intended one for Apache releases?</input>
- <condition property="signatureGood.y" unless:set="ci">
- <equals arg1="y" arg2="${signatureGood}"/>
- </condition>
- <fail unless:set="ci" unless="signatureGood.y" message="Task aborted by user." />
-
- <echo>Creating checksum file for "${archive.gzip}"...</echo>
- <checksum file="${archive.gzip}" fileext=".sha512" algorithm="SHA-512" forceOverwrite="yes" />
- </sequential>
- </macrodef>
-
- <target name="maven-pom">
- <echo file="build/pom.xml"><![CDATA[<?xml version="1.0" encoding="utf-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache</groupId>
- <artifactId>apache</artifactId>
- <version>17</version>
- </parent>
-
- <groupId>${mavenGroupId}</groupId>
- <artifactId>${mavenArtifactId}</artifactId>
- <version>${mavenVersion}</version>
-
- <packaging>jar</packaging>
-
- <name>Apache FreeMarker</name>
- <description>
- Google App Engine compliant variation of FreeMarker.
- FreeMarker is a "template engine"; a generic tool to generate text output based on templates.
- </description>
- <url>https://freemarker.apache.org/</url>
- <organization>
- <name>Apache Software Foundation</name>
- <url>http://apache.org</url>
- </organization>
-
- <licenses>
- <license>
- <name>Apache License, Version 2.0</name>
- <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
- <distribution>repo</distribution>
- </license>
- </licenses>
-
- <scm>
- <connection>scm:git:https://git-wip-us.apache.org/repos/asf/freemarker.git</connection>
- <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/freemarker.git</developerConnection>
- <url>https://git-wip-us.apache.org/repos/asf?p=freemarker.git</url>
- <tag>v${version}</tag>
- </scm>
-
- <issueManagement>
- <system>jira</system>
- <url>https://issues.apache.org/jira/browse/FREEMARKER/</url>
- </issueManagement>
-
- <mailingLists>
- <mailingList>
- <name>FreeMarker developer list</name>
- <post>dev@freemarker.apache.org</post>
- <subscribe>dev-subscribe@freemarker.apache.org</subscribe>
- <unsubscribe>dev-unsubscribe@freemarker.apache.org</unsubscribe>
- <archive>http://mail-archives.apache.org/mod_mbox/freemarker-dev/</archive>
- </mailingList>
- <mailingList>
- <name>FreeMarker commit and Jira notifications list</name>
- <post>notifications@freemarker.apache.org</post>
- <subscribe>notifications-subscribe@freemarker.apache.org</subscribe>
- <unsubscribe>notifications-unsubscribe@freemarker.apache.org</unsubscribe>
- <archive>http://mail-archives.apache.org/mod_mbox/freemarker-notifications/</archive>
- </mailingList>
- <mailingList>
- <name>FreeMarker management private</name>
- <post>private@freemarker.apache.org</post>
- </mailingList>
- </mailingLists>
-
- <dependencies>
- <!-- no required dependencies -->
- </dependencies>
-</project>
-]]></echo>
- </target>
-
- <target name="maven-install" depends="jar, maven-pom"
- description="Installs the jar into the local maven repo (without signing)">
- <exec executable="${mvnCommand}" failonerror="true">
- <arg value="install:install-file" />
- <arg value="-Dfile=build/freemarker.jar" />
- <arg value="-DpomFile=build/pom.xml" />
- </exec>
- </target>
-
- <!--
- Uploads the freemarker.jar that is in the current DISTRIBUTION DIRECTORY
- to a Maven repository (snapshot or central).
- Use this after "dist" (without interleaving "clean").
- -->
- <target name="maven-dist" depends="maven-pom"
- description="Releases the already built distro to a Maven repository">
- <jar destfile="build/maven-source-attachment.jar">
- <fileset dir="${dist.src.dir}/src/main/java" />
- <fileset dir="${dist.src.dir}/src/main/resources" />
- <fileset dir="${dist.src.dir}/src/main/javacc/" />
- <fileset dir="build/generated-sources/java/" includes="**/*.java" />
- <metainf dir="${dist.src.dir}" includes="LICENSE, NOTICE" />
- </jar>
-
- <mkdir dir="build/javadoc-attachment-metainf"/>
- <copy todir="build/javadoc-attachment-metainf">
- <fileset dir="${dist.bin.dir}" includes="NOTICE" />
- </copy>
- <copy todir="build/javadoc-attachment-metainf">
- <fileset dir="src/dist/javadoc/META-INF/" />
- </copy>
- <jar destfile="build/maven-javadoc-attachment.jar">
- <fileset dir="${dist.bin.dir}/documentation/_html/api" />
- <metainf dir="build/javadoc-attachment-metainf" includes="**/*" />
- </jar>
- <delete dir="build/javadoc-attachment-metainf" />
-
- <!-- These were copy-pasted from the org.apacha:apache parent POM: -->
- <property name="maven-server-id" value="apache.releases.https" />
- <condition property="maven-repository-url"
- value="https://repository.apache.org/content/repositories/snapshots/"
- else="https://repository.apache.org/service/local/staging/deploy/maven2">
- <matches pattern="-SNAPSHOT$" string="${mavenVersion}" />
- </condition>
- <!-- Snapshot repo: https://repository.apache.org/content/repositories/snapshots/ -->
- <input
- validargs="y,n"
- addproperty="mavenUpload.answer"
- >
-You are about uploading
-${dist.bin.dir}/freemarker.jar
-and its attachments with Maven coordinates
-${mavenGroupId}:${mavenArtifactId}:${mavenVersion}
-to this Maven repository:
-${maven-repository-url}
-
-Note that it's assumed that you have run `ant dist` just before this.
-Proceed? </input>
- <condition property="mavenUpload.yes">
- <equals arg1="y" arg2="${mavenUpload.answer}"/>
- </condition>
- <fail unless="mavenUpload.yes" message="Task aborted by user." />
-
- <!-- Sign and deploy the main artifact -->
- <exec executable="${mvnCommand}" failonerror="true">
- <arg value="org.apache.maven.plugins:maven-gpg-plugin:1.6:sign-and-deploy-file" />
- <!--
- As we use the gpg plugin instead of a normal Maven "deploy", sadly we can't just
- inherit the repo URL and repositoryId from the parent POM.
- -->
- <arg value="-Durl=${maven-repository-url}" />
- <arg value="-DrepositoryId=${maven-server-id}" />
- <arg value="-DpomFile=build/pom.xml" />
- <arg value="-Dfile=${dist.bin.dir}/freemarker.jar" />
- <arg value="-Dsources=build/maven-source-attachment.jar" />
- <arg value="-Djavadoc=build/maven-javadoc-attachment.jar" />
- <arg value="-Pgpg" />
- </exec>
-
- <echo>*****************************************************************</echo>
- <echo>Check the above lines for any Maven errors!</echo>
- <echo>Now you need to close and maybe release the staged repo on</echo>
- <echo>http://repository.apache.org (except for SNAPSHOT versions).</echo>
- <echo>Note that before releasing, voting is needed!</echo>
- <echo>*****************************************************************</echo>
- </target>
-
- <!-- ================================================================= -->
- <!-- CI (like Travis)....................... -->
- <!-- ================================================================= -->
-
- <target name="ci-setup">
- <ivy:settings file="ivysettings-ci.xml" />
- </target>
-
- <target name="ci"
- depends="ci-setup, clean, _dist"
- description="CI should invoke this task"
- />
-
- <!-- ================================================================== -->
- <!-- Dependency management -->
- <!-- ================================================================== -->
-
- <target name="report-deps"
- description="Creates a HTML document that summarizes the dependencies."
- >
- <mkdir dir="build/deps-report" />
- <ivy:resolve />
- <ivy:report todir="build/deps-report" />
- </target>
-
- <target name="ide-dependencies" depends="jar"
- description="If your IDE has no Ivy support, this generates ide-lib/*.jar for it">
- <mkdir dir="ide-dependencies" />
- <delete includeEmptyDirs="true">
- <fileset dir="ide-dependencies">
- <include name="*/**" />
- </fileset>
- </delete>
- <ivy:retrieve conf="IDE" pattern="ide-dependencies/[artifact]-[revision].[ext]" />
-
- <!--
- Extract META-INF/MANITSET.MF from freemarker.jar and put it into the project directory for Eclipse (this is
- needed if you want to reference freemarker source code in the context of OSGI development with Eclipse)
- -->
- <unzip src="build/freemarker.jar" dest=".">
- <patternset>
- <include name="META-INF/*"/>
- <exclude name="META-INF/LICENSE"/>
- <exclude name="META-INF/NOTICE"/>
- </patternset>
- </unzip>
- <echo file="META-INF/DO-NOT-EDIT.txt"><!--
- -->Do not edit the files in this directory! They are extracted from freemarker.jar as part of
<!--
- -->the ide-dependencies Ant task, because Eclipse OSGi support expects them to be here.<!--
- --></echo>
-
- <!--
- Add bndtools support (bnd workspace model), which requires a bnd.bnd file to be present.
- See https://bndtools.org/concepts.html#workspacerepositoriesproject-model for more information.
- We copy the existing osgi.bnd to bnd.bnd and replace the variables
- with values from this build.xml and version.properties
- The resulting bnd.bnd in the project root is only consumed by Eclipse
- if the bndtools plugin is installed.
- bnd.bnd is also in .gitignore, to avoid accidental commits.
- -->
- <filter token="moduleOrg" value="${moduleOrg}" />
- <filter token="moduleName" value="${moduleName}" />
- <filter filtersfile="build/classes/freemarker/version.properties" />
-
- <copy
- file="osgi.bnd"
- tofile="bnd.bnd"
- filtering="true"
- overwrite="true"
- >
- <filterchain>
- <expandproperties />
- </filterchain>
- </copy>
-
-
-
- </target>
-
- <!-- ================================================================== -->
- <!-- Misc. -->
- <!-- ================================================================== -->
-
- <target name="rat" description="Generates Apache RAT report">
- <ivy:cachepath conf="rat" pathid="ivy.dep" />
- <taskdef
- uri="antlib:org.apache.rat.anttasks"
- resource="org/apache/rat/anttasks/antlib.xml"
- classpathref="ivy.dep"
- />
-
- <rat:report reportFile="build/rat-report-root.txt">
- <fileset dir="" excludesfile="rat-excludes" />
- </rat:report>
- <rat:report reportFile="build/rat-report-dist-src.txt">
- <fileset dir="${dist.src.dir}" excludesfile="rat-excludes" />
- </rat:report>
- <rat:report reportFile="build/rat-report-dist-bin.txt">
- <fileset dir="${dist.bin.dir}" excludesfile="src/dist/bin/rat-excludes" />
- </rat:report>
- <echo level="info"><!--
- -->Rat reports were written into build/rat-report-*.txt<!--
- --></echo>
- </target>
-
-</project>
diff --git a/src/main/java/freemarker/cache/AndMatcher.java b/freemarker-core/src/main/java/freemarker/cache/AndMatcher.java
similarity index 100%
rename from src/main/java/freemarker/cache/AndMatcher.java
rename to freemarker-core/src/main/java/freemarker/cache/AndMatcher.java
diff --git a/src/main/java/freemarker/cache/ByteArrayTemplateLoader.java b/freemarker-core/src/main/java/freemarker/cache/ByteArrayTemplateLoader.java
similarity index 100%
rename from src/main/java/freemarker/cache/ByteArrayTemplateLoader.java
rename to freemarker-core/src/main/java/freemarker/cache/ByteArrayTemplateLoader.java
diff --git a/src/main/java/freemarker/cache/CacheStorage.java b/freemarker-core/src/main/java/freemarker/cache/CacheStorage.java
similarity index 100%
rename from src/main/java/freemarker/cache/CacheStorage.java
rename to freemarker-core/src/main/java/freemarker/cache/CacheStorage.java
diff --git a/src/main/java/freemarker/cache/CacheStorageWithGetSize.java b/freemarker-core/src/main/java/freemarker/cache/CacheStorageWithGetSize.java
similarity index 100%
rename from src/main/java/freemarker/cache/CacheStorageWithGetSize.java
rename to freemarker-core/src/main/java/freemarker/cache/CacheStorageWithGetSize.java
diff --git a/src/main/java/freemarker/cache/ClassTemplateLoader.java b/freemarker-core/src/main/java/freemarker/cache/ClassTemplateLoader.java
similarity index 100%
rename from src/main/java/freemarker/cache/ClassTemplateLoader.java
rename to freemarker-core/src/main/java/freemarker/cache/ClassTemplateLoader.java
diff --git a/src/main/java/freemarker/cache/ConcurrentCacheStorage.java b/freemarker-core/src/main/java/freemarker/cache/ConcurrentCacheStorage.java
similarity index 100%
rename from src/main/java/freemarker/cache/ConcurrentCacheStorage.java
rename to freemarker-core/src/main/java/freemarker/cache/ConcurrentCacheStorage.java
diff --git a/src/main/java/freemarker/cache/ConditionalTemplateConfigurationFactory.java b/freemarker-core/src/main/java/freemarker/cache/ConditionalTemplateConfigurationFactory.java
similarity index 100%
rename from src/main/java/freemarker/cache/ConditionalTemplateConfigurationFactory.java
rename to freemarker-core/src/main/java/freemarker/cache/ConditionalTemplateConfigurationFactory.java
diff --git a/src/main/java/freemarker/cache/FileExtensionMatcher.java b/freemarker-core/src/main/java/freemarker/cache/FileExtensionMatcher.java
similarity index 100%
rename from src/main/java/freemarker/cache/FileExtensionMatcher.java
rename to freemarker-core/src/main/java/freemarker/cache/FileExtensionMatcher.java
diff --git a/src/main/java/freemarker/cache/FileNameGlobMatcher.java b/freemarker-core/src/main/java/freemarker/cache/FileNameGlobMatcher.java
similarity index 100%
rename from src/main/java/freemarker/cache/FileNameGlobMatcher.java
rename to freemarker-core/src/main/java/freemarker/cache/FileNameGlobMatcher.java
diff --git a/src/main/java/freemarker/cache/FileTemplateLoader.java b/freemarker-core/src/main/java/freemarker/cache/FileTemplateLoader.java
similarity index 100%
rename from src/main/java/freemarker/cache/FileTemplateLoader.java
rename to freemarker-core/src/main/java/freemarker/cache/FileTemplateLoader.java
diff --git a/src/main/java/freemarker/cache/FirstMatchTemplateConfigurationFactory.java b/freemarker-core/src/main/java/freemarker/cache/FirstMatchTemplateConfigurationFactory.java
similarity index 100%
rename from src/main/java/freemarker/cache/FirstMatchTemplateConfigurationFactory.java
rename to freemarker-core/src/main/java/freemarker/cache/FirstMatchTemplateConfigurationFactory.java
diff --git a/src/main/java/freemarker/cache/MergingTemplateConfigurationFactory.java b/freemarker-core/src/main/java/freemarker/cache/MergingTemplateConfigurationFactory.java
similarity index 100%
rename from src/main/java/freemarker/cache/MergingTemplateConfigurationFactory.java
rename to freemarker-core/src/main/java/freemarker/cache/MergingTemplateConfigurationFactory.java
diff --git a/src/main/java/freemarker/cache/MruCacheStorage.java b/freemarker-core/src/main/java/freemarker/cache/MruCacheStorage.java
similarity index 100%
rename from src/main/java/freemarker/cache/MruCacheStorage.java
rename to freemarker-core/src/main/java/freemarker/cache/MruCacheStorage.java
diff --git a/src/main/java/freemarker/cache/MultiTemplateLoader.java b/freemarker-core/src/main/java/freemarker/cache/MultiTemplateLoader.java
similarity index 100%
rename from src/main/java/freemarker/cache/MultiTemplateLoader.java
rename to freemarker-core/src/main/java/freemarker/cache/MultiTemplateLoader.java
diff --git a/src/main/java/freemarker/cache/NotMatcher.java b/freemarker-core/src/main/java/freemarker/cache/NotMatcher.java
similarity index 100%
rename from src/main/java/freemarker/cache/NotMatcher.java
rename to freemarker-core/src/main/java/freemarker/cache/NotMatcher.java
diff --git a/src/main/java/freemarker/cache/NullCacheStorage.java b/freemarker-core/src/main/java/freemarker/cache/NullCacheStorage.java
similarity index 100%
rename from src/main/java/freemarker/cache/NullCacheStorage.java
rename to freemarker-core/src/main/java/freemarker/cache/NullCacheStorage.java
diff --git a/src/main/java/freemarker/cache/OrMatcher.java b/freemarker-core/src/main/java/freemarker/cache/OrMatcher.java
similarity index 100%
rename from src/main/java/freemarker/cache/OrMatcher.java
rename to freemarker-core/src/main/java/freemarker/cache/OrMatcher.java
diff --git a/src/main/java/freemarker/cache/PathGlobMatcher.java b/freemarker-core/src/main/java/freemarker/cache/PathGlobMatcher.java
similarity index 100%
rename from src/main/java/freemarker/cache/PathGlobMatcher.java
rename to freemarker-core/src/main/java/freemarker/cache/PathGlobMatcher.java
diff --git a/src/main/java/freemarker/cache/PathRegexMatcher.java b/freemarker-core/src/main/java/freemarker/cache/PathRegexMatcher.java
similarity index 100%
rename from src/main/java/freemarker/cache/PathRegexMatcher.java
rename to freemarker-core/src/main/java/freemarker/cache/PathRegexMatcher.java
diff --git a/src/main/java/freemarker/cache/SoftCacheStorage.java b/freemarker-core/src/main/java/freemarker/cache/SoftCacheStorage.java
similarity index 100%
rename from src/main/java/freemarker/cache/SoftCacheStorage.java
rename to freemarker-core/src/main/java/freemarker/cache/SoftCacheStorage.java
diff --git a/src/main/java/freemarker/cache/StatefulTemplateLoader.java b/freemarker-core/src/main/java/freemarker/cache/StatefulTemplateLoader.java
similarity index 100%
rename from src/main/java/freemarker/cache/StatefulTemplateLoader.java
rename to freemarker-core/src/main/java/freemarker/cache/StatefulTemplateLoader.java
diff --git a/src/main/java/freemarker/cache/StringTemplateLoader.java b/freemarker-core/src/main/java/freemarker/cache/StringTemplateLoader.java
similarity index 100%
rename from src/main/java/freemarker/cache/StringTemplateLoader.java
rename to freemarker-core/src/main/java/freemarker/cache/StringTemplateLoader.java
diff --git a/src/main/java/freemarker/cache/StrongCacheStorage.java b/freemarker-core/src/main/java/freemarker/cache/StrongCacheStorage.java
similarity index 100%
rename from src/main/java/freemarker/cache/StrongCacheStorage.java
rename to freemarker-core/src/main/java/freemarker/cache/StrongCacheStorage.java
diff --git a/src/main/java/freemarker/cache/TemplateCache.java b/freemarker-core/src/main/java/freemarker/cache/TemplateCache.java
similarity index 100%
rename from src/main/java/freemarker/cache/TemplateCache.java
rename to freemarker-core/src/main/java/freemarker/cache/TemplateCache.java
diff --git a/src/main/java/freemarker/cache/TemplateConfigurationFactory.java b/freemarker-core/src/main/java/freemarker/cache/TemplateConfigurationFactory.java
similarity index 100%
rename from src/main/java/freemarker/cache/TemplateConfigurationFactory.java
rename to freemarker-core/src/main/java/freemarker/cache/TemplateConfigurationFactory.java
diff --git a/src/main/java/freemarker/cache/TemplateConfigurationFactoryException.java b/freemarker-core/src/main/java/freemarker/cache/TemplateConfigurationFactoryException.java
similarity index 100%
rename from src/main/java/freemarker/cache/TemplateConfigurationFactoryException.java
rename to freemarker-core/src/main/java/freemarker/cache/TemplateConfigurationFactoryException.java
diff --git a/src/main/java/freemarker/cache/TemplateLoader.java b/freemarker-core/src/main/java/freemarker/cache/TemplateLoader.java
similarity index 100%
rename from src/main/java/freemarker/cache/TemplateLoader.java
rename to freemarker-core/src/main/java/freemarker/cache/TemplateLoader.java
diff --git a/src/main/java/freemarker/cache/TemplateLoaderUtils.java b/freemarker-core/src/main/java/freemarker/cache/TemplateLoaderUtils.java
similarity index 100%
rename from src/main/java/freemarker/cache/TemplateLoaderUtils.java
rename to freemarker-core/src/main/java/freemarker/cache/TemplateLoaderUtils.java
diff --git a/src/main/java/freemarker/cache/TemplateLookupContext.java b/freemarker-core/src/main/java/freemarker/cache/TemplateLookupContext.java
similarity index 100%
rename from src/main/java/freemarker/cache/TemplateLookupContext.java
rename to freemarker-core/src/main/java/freemarker/cache/TemplateLookupContext.java
diff --git a/src/main/java/freemarker/cache/TemplateLookupResult.java b/freemarker-core/src/main/java/freemarker/cache/TemplateLookupResult.java
similarity index 100%
rename from src/main/java/freemarker/cache/TemplateLookupResult.java
rename to freemarker-core/src/main/java/freemarker/cache/TemplateLookupResult.java
diff --git a/src/main/java/freemarker/cache/TemplateLookupStrategy.java b/freemarker-core/src/main/java/freemarker/cache/TemplateLookupStrategy.java
similarity index 100%
rename from src/main/java/freemarker/cache/TemplateLookupStrategy.java
rename to freemarker-core/src/main/java/freemarker/cache/TemplateLookupStrategy.java
diff --git a/src/main/java/freemarker/cache/TemplateNameFormat.java b/freemarker-core/src/main/java/freemarker/cache/TemplateNameFormat.java
similarity index 100%
rename from src/main/java/freemarker/cache/TemplateNameFormat.java
rename to freemarker-core/src/main/java/freemarker/cache/TemplateNameFormat.java
diff --git a/src/main/java/freemarker/cache/TemplateSourceMatcher.java b/freemarker-core/src/main/java/freemarker/cache/TemplateSourceMatcher.java
similarity index 100%
rename from src/main/java/freemarker/cache/TemplateSourceMatcher.java
rename to freemarker-core/src/main/java/freemarker/cache/TemplateSourceMatcher.java
diff --git a/src/main/java/freemarker/cache/URLTemplateLoader.java b/freemarker-core/src/main/java/freemarker/cache/URLTemplateLoader.java
similarity index 100%
rename from src/main/java/freemarker/cache/URLTemplateLoader.java
rename to freemarker-core/src/main/java/freemarker/cache/URLTemplateLoader.java
diff --git a/src/main/java/freemarker/cache/URLTemplateSource.java b/freemarker-core/src/main/java/freemarker/cache/URLTemplateSource.java
similarity index 100%
rename from src/main/java/freemarker/cache/URLTemplateSource.java
rename to freemarker-core/src/main/java/freemarker/cache/URLTemplateSource.java
diff --git a/src/main/java/freemarker/cache/_CacheAPI.java b/freemarker-core/src/main/java/freemarker/cache/_CacheAPI.java
similarity index 100%
rename from src/main/java/freemarker/cache/_CacheAPI.java
rename to freemarker-core/src/main/java/freemarker/cache/_CacheAPI.java
diff --git a/src/main/java/freemarker/cache/package.html b/freemarker-core/src/main/java/freemarker/cache/package.html
similarity index 100%
rename from src/main/java/freemarker/cache/package.html
rename to freemarker-core/src/main/java/freemarker/cache/package.html
diff --git a/src/main/java/freemarker/core/APINotSupportedTemplateException.java b/freemarker-core/src/main/java/freemarker/core/APINotSupportedTemplateException.java
similarity index 100%
rename from src/main/java/freemarker/core/APINotSupportedTemplateException.java
rename to freemarker-core/src/main/java/freemarker/core/APINotSupportedTemplateException.java
diff --git a/src/main/java/freemarker/core/AbstractJSONLikeFormat.java b/freemarker-core/src/main/java/freemarker/core/AbstractJSONLikeFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/AbstractJSONLikeFormat.java
rename to freemarker-core/src/main/java/freemarker/core/AbstractJSONLikeFormat.java
diff --git a/src/main/java/freemarker/core/AddConcatExpression.java b/freemarker-core/src/main/java/freemarker/core/AddConcatExpression.java
similarity index 100%
rename from src/main/java/freemarker/core/AddConcatExpression.java
rename to freemarker-core/src/main/java/freemarker/core/AddConcatExpression.java
diff --git a/src/main/java/freemarker/core/AliasTargetTemplateValueFormatException.java b/freemarker-core/src/main/java/freemarker/core/AliasTargetTemplateValueFormatException.java
similarity index 100%
rename from src/main/java/freemarker/core/AliasTargetTemplateValueFormatException.java
rename to freemarker-core/src/main/java/freemarker/core/AliasTargetTemplateValueFormatException.java
diff --git a/src/main/java/freemarker/core/AliasTemplateDateFormatFactory.java b/freemarker-core/src/main/java/freemarker/core/AliasTemplateDateFormatFactory.java
similarity index 100%
rename from src/main/java/freemarker/core/AliasTemplateDateFormatFactory.java
rename to freemarker-core/src/main/java/freemarker/core/AliasTemplateDateFormatFactory.java
diff --git a/src/main/java/freemarker/core/AliasTemplateNumberFormatFactory.java b/freemarker-core/src/main/java/freemarker/core/AliasTemplateNumberFormatFactory.java
similarity index 100%
rename from src/main/java/freemarker/core/AliasTemplateNumberFormatFactory.java
rename to freemarker-core/src/main/java/freemarker/core/AliasTemplateNumberFormatFactory.java
diff --git a/src/main/java/freemarker/core/AndExpression.java b/freemarker-core/src/main/java/freemarker/core/AndExpression.java
similarity index 100%
rename from src/main/java/freemarker/core/AndExpression.java
rename to freemarker-core/src/main/java/freemarker/core/AndExpression.java
diff --git a/src/main/java/freemarker/core/ArithmeticEngine.java b/freemarker-core/src/main/java/freemarker/core/ArithmeticEngine.java
similarity index 100%
rename from src/main/java/freemarker/core/ArithmeticEngine.java
rename to freemarker-core/src/main/java/freemarker/core/ArithmeticEngine.java
diff --git a/src/main/java/freemarker/core/ArithmeticExpression.java b/freemarker-core/src/main/java/freemarker/core/ArithmeticExpression.java
similarity index 100%
rename from src/main/java/freemarker/core/ArithmeticExpression.java
rename to freemarker-core/src/main/java/freemarker/core/ArithmeticExpression.java
diff --git a/src/main/java/freemarker/core/Assignment.java b/freemarker-core/src/main/java/freemarker/core/Assignment.java
similarity index 100%
rename from src/main/java/freemarker/core/Assignment.java
rename to freemarker-core/src/main/java/freemarker/core/Assignment.java
diff --git a/src/main/java/freemarker/core/AssignmentInstruction.java b/freemarker-core/src/main/java/freemarker/core/AssignmentInstruction.java
similarity index 100%
rename from src/main/java/freemarker/core/AssignmentInstruction.java
rename to freemarker-core/src/main/java/freemarker/core/AssignmentInstruction.java
diff --git a/src/main/java/freemarker/core/AttemptBlock.java b/freemarker-core/src/main/java/freemarker/core/AttemptBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/AttemptBlock.java
rename to freemarker-core/src/main/java/freemarker/core/AttemptBlock.java
diff --git a/src/main/java/freemarker/core/AutoEscBlock.java b/freemarker-core/src/main/java/freemarker/core/AutoEscBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/AutoEscBlock.java
rename to freemarker-core/src/main/java/freemarker/core/AutoEscBlock.java
diff --git a/src/main/java/freemarker/core/BackwardCompatibleTemplateNumberFormat.java b/freemarker-core/src/main/java/freemarker/core/BackwardCompatibleTemplateNumberFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/BackwardCompatibleTemplateNumberFormat.java
rename to freemarker-core/src/main/java/freemarker/core/BackwardCompatibleTemplateNumberFormat.java
diff --git a/src/main/java/freemarker/core/BlockAssignment.java b/freemarker-core/src/main/java/freemarker/core/BlockAssignment.java
similarity index 100%
rename from src/main/java/freemarker/core/BlockAssignment.java
rename to freemarker-core/src/main/java/freemarker/core/BlockAssignment.java
diff --git a/src/main/java/freemarker/core/BodyInstruction.java b/freemarker-core/src/main/java/freemarker/core/BodyInstruction.java
similarity index 100%
rename from src/main/java/freemarker/core/BodyInstruction.java
rename to freemarker-core/src/main/java/freemarker/core/BodyInstruction.java
diff --git a/src/main/java/freemarker/core/BooleanExpression.java b/freemarker-core/src/main/java/freemarker/core/BooleanExpression.java
similarity index 100%
rename from src/main/java/freemarker/core/BooleanExpression.java
rename to freemarker-core/src/main/java/freemarker/core/BooleanExpression.java
diff --git a/src/main/java/freemarker/core/BooleanLiteral.java b/freemarker-core/src/main/java/freemarker/core/BooleanLiteral.java
similarity index 100%
rename from src/main/java/freemarker/core/BooleanLiteral.java
rename to freemarker-core/src/main/java/freemarker/core/BooleanLiteral.java
diff --git a/src/main/java/freemarker/core/BoundedRangeModel.java b/freemarker-core/src/main/java/freemarker/core/BoundedRangeModel.java
similarity index 100%
rename from src/main/java/freemarker/core/BoundedRangeModel.java
rename to freemarker-core/src/main/java/freemarker/core/BoundedRangeModel.java
diff --git a/src/main/java/freemarker/core/BreakInstruction.java b/freemarker-core/src/main/java/freemarker/core/BreakInstruction.java
similarity index 100%
rename from src/main/java/freemarker/core/BreakInstruction.java
rename to freemarker-core/src/main/java/freemarker/core/BreakInstruction.java
diff --git a/src/main/java/freemarker/core/BreakOrContinueException.java b/freemarker-core/src/main/java/freemarker/core/BreakOrContinueException.java
similarity index 100%
rename from src/main/java/freemarker/core/BreakOrContinueException.java
rename to freemarker-core/src/main/java/freemarker/core/BreakOrContinueException.java
diff --git a/src/main/java/freemarker/core/BugException.java b/freemarker-core/src/main/java/freemarker/core/BugException.java
similarity index 100%
rename from src/main/java/freemarker/core/BugException.java
rename to freemarker-core/src/main/java/freemarker/core/BugException.java
diff --git a/src/main/java/freemarker/core/BuiltIn.java b/freemarker-core/src/main/java/freemarker/core/BuiltIn.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltIn.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltIn.java
diff --git a/src/main/java/freemarker/core/BuiltInBannedWhenAutoEscaping.java b/freemarker-core/src/main/java/freemarker/core/BuiltInBannedWhenAutoEscaping.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInBannedWhenAutoEscaping.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInBannedWhenAutoEscaping.java
diff --git a/src/main/java/freemarker/core/BuiltInBannedWhenForcedAutoEscaping.java b/freemarker-core/src/main/java/freemarker/core/BuiltInBannedWhenForcedAutoEscaping.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInBannedWhenForcedAutoEscaping.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInBannedWhenForcedAutoEscaping.java
diff --git a/src/main/java/freemarker/core/BuiltInForDate.java b/freemarker-core/src/main/java/freemarker/core/BuiltInForDate.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInForDate.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInForDate.java
diff --git a/src/main/java/freemarker/core/BuiltInForHashEx.java b/freemarker-core/src/main/java/freemarker/core/BuiltInForHashEx.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInForHashEx.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInForHashEx.java
diff --git a/src/main/java/freemarker/core/BuiltInForLegacyEscaping.java b/freemarker-core/src/main/java/freemarker/core/BuiltInForLegacyEscaping.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInForLegacyEscaping.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInForLegacyEscaping.java
diff --git a/src/main/java/freemarker/core/BuiltInForLoopVariable.java b/freemarker-core/src/main/java/freemarker/core/BuiltInForLoopVariable.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInForLoopVariable.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInForLoopVariable.java
diff --git a/src/main/java/freemarker/core/BuiltInForMarkupOutput.java b/freemarker-core/src/main/java/freemarker/core/BuiltInForMarkupOutput.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInForMarkupOutput.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInForMarkupOutput.java
diff --git a/src/main/java/freemarker/core/BuiltInForNode.java b/freemarker-core/src/main/java/freemarker/core/BuiltInForNode.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInForNode.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInForNode.java
diff --git a/src/main/java/freemarker/core/BuiltInForNodeEx.java b/freemarker-core/src/main/java/freemarker/core/BuiltInForNodeEx.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInForNodeEx.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInForNodeEx.java
diff --git a/src/main/java/freemarker/core/BuiltInForNumber.java b/freemarker-core/src/main/java/freemarker/core/BuiltInForNumber.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInForNumber.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInForNumber.java
diff --git a/src/main/java/freemarker/core/BuiltInForSequence.java b/freemarker-core/src/main/java/freemarker/core/BuiltInForSequence.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInForSequence.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInForSequence.java
diff --git a/src/main/java/freemarker/core/BuiltInForString.java b/freemarker-core/src/main/java/freemarker/core/BuiltInForString.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInForString.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInForString.java
diff --git a/src/main/java/freemarker/core/BuiltInWithDirectCallOptimization.java b/freemarker-core/src/main/java/freemarker/core/BuiltInWithDirectCallOptimization.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInWithDirectCallOptimization.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInWithDirectCallOptimization.java
diff --git a/src/main/java/freemarker/core/BuiltInWithParseTimeParameters.java b/freemarker-core/src/main/java/freemarker/core/BuiltInWithParseTimeParameters.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInWithParseTimeParameters.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInWithParseTimeParameters.java
diff --git a/src/main/java/freemarker/core/BuiltInsForCallables.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForCallables.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForCallables.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForCallables.java
diff --git a/src/main/java/freemarker/core/BuiltInsForDates.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForDates.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForDates.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForDates.java
diff --git a/src/main/java/freemarker/core/BuiltInsForExistenceHandling.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForExistenceHandling.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForExistenceHandling.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForExistenceHandling.java
diff --git a/src/main/java/freemarker/core/BuiltInsForHashes.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForHashes.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForHashes.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForHashes.java
diff --git a/src/main/java/freemarker/core/BuiltInsForLoopVariables.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForLoopVariables.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForLoopVariables.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForLoopVariables.java
diff --git a/src/main/java/freemarker/core/BuiltInsForMarkupOutputs.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForMarkupOutputs.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForMarkupOutputs.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForMarkupOutputs.java
diff --git a/src/main/java/freemarker/core/BuiltInsForMultipleTypes.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForMultipleTypes.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForMultipleTypes.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForMultipleTypes.java
diff --git a/src/main/java/freemarker/core/BuiltInsForNodes.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForNodes.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForNodes.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForNodes.java
diff --git a/src/main/java/freemarker/core/BuiltInsForNumbers.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForNumbers.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForNumbers.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForNumbers.java
diff --git a/src/main/java/freemarker/core/BuiltInsForOutputFormatRelated.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForOutputFormatRelated.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForOutputFormatRelated.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForOutputFormatRelated.java
diff --git a/src/main/java/freemarker/core/BuiltInsForSequences.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForSequences.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForSequences.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForSequences.java
diff --git a/src/main/java/freemarker/core/BuiltInsForStringsBasic.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForStringsBasic.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForStringsBasic.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForStringsBasic.java
diff --git a/src/main/java/freemarker/core/BuiltInsForStringsEncoding.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForStringsEncoding.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForStringsEncoding.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForStringsEncoding.java
diff --git a/src/main/java/freemarker/core/BuiltInsForStringsMisc.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForStringsMisc.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForStringsMisc.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForStringsMisc.java
diff --git a/src/main/java/freemarker/core/BuiltInsForStringsRegexp.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsForStringsRegexp.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsForStringsRegexp.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsForStringsRegexp.java
diff --git a/src/main/java/freemarker/core/BuiltInsWithLazyConditionals.java b/freemarker-core/src/main/java/freemarker/core/BuiltInsWithLazyConditionals.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltInsWithLazyConditionals.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltInsWithLazyConditionals.java
diff --git a/src/main/java/freemarker/core/BuiltinVariable.java b/freemarker-core/src/main/java/freemarker/core/BuiltinVariable.java
similarity index 100%
rename from src/main/java/freemarker/core/BuiltinVariable.java
rename to freemarker-core/src/main/java/freemarker/core/BuiltinVariable.java
diff --git a/src/main/java/freemarker/core/CFormat.java b/freemarker-core/src/main/java/freemarker/core/CFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/CFormat.java
rename to freemarker-core/src/main/java/freemarker/core/CFormat.java
diff --git a/src/main/java/freemarker/core/CSSOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/CSSOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/CSSOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/CSSOutputFormat.java
diff --git a/src/main/java/freemarker/core/CTemplateNumberFormat.java b/freemarker-core/src/main/java/freemarker/core/CTemplateNumberFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/CTemplateNumberFormat.java
rename to freemarker-core/src/main/java/freemarker/core/CTemplateNumberFormat.java
diff --git a/src/main/java/freemarker/core/CallPlaceCustomDataInitializationException.java b/freemarker-core/src/main/java/freemarker/core/CallPlaceCustomDataInitializationException.java
similarity index 100%
rename from src/main/java/freemarker/core/CallPlaceCustomDataInitializationException.java
rename to freemarker-core/src/main/java/freemarker/core/CallPlaceCustomDataInitializationException.java
diff --git a/src/main/java/freemarker/core/Case.java b/freemarker-core/src/main/java/freemarker/core/Case.java
similarity index 100%
rename from src/main/java/freemarker/core/Case.java
rename to freemarker-core/src/main/java/freemarker/core/Case.java
diff --git a/src/main/java/freemarker/core/CollectionAndSequence.java b/freemarker-core/src/main/java/freemarker/core/CollectionAndSequence.java
similarity index 100%
rename from src/main/java/freemarker/core/CollectionAndSequence.java
rename to freemarker-core/src/main/java/freemarker/core/CollectionAndSequence.java
diff --git a/src/main/java/freemarker/core/CombinedMarkupOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/CombinedMarkupOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/CombinedMarkupOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/CombinedMarkupOutputFormat.java
diff --git a/src/main/java/freemarker/core/CommandLine.java b/freemarker-core/src/main/java/freemarker/core/CommandLine.java
similarity index 100%
rename from src/main/java/freemarker/core/CommandLine.java
rename to freemarker-core/src/main/java/freemarker/core/CommandLine.java
diff --git a/src/main/java/freemarker/core/Comment.java b/freemarker-core/src/main/java/freemarker/core/Comment.java
similarity index 100%
rename from src/main/java/freemarker/core/Comment.java
rename to freemarker-core/src/main/java/freemarker/core/Comment.java
diff --git a/src/main/java/freemarker/core/CommonMarkupOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/CommonMarkupOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/CommonMarkupOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/CommonMarkupOutputFormat.java
diff --git a/src/main/java/freemarker/core/CommonTemplateMarkupOutputModel.java b/freemarker-core/src/main/java/freemarker/core/CommonTemplateMarkupOutputModel.java
similarity index 100%
rename from src/main/java/freemarker/core/CommonTemplateMarkupOutputModel.java
rename to freemarker-core/src/main/java/freemarker/core/CommonTemplateMarkupOutputModel.java
diff --git a/src/main/java/freemarker/core/ComparisonExpression.java b/freemarker-core/src/main/java/freemarker/core/ComparisonExpression.java
similarity index 100%
rename from src/main/java/freemarker/core/ComparisonExpression.java
rename to freemarker-core/src/main/java/freemarker/core/ComparisonExpression.java
diff --git a/src/main/java/freemarker/core/CompressedBlock.java b/freemarker-core/src/main/java/freemarker/core/CompressedBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/CompressedBlock.java
rename to freemarker-core/src/main/java/freemarker/core/CompressedBlock.java
diff --git a/src/main/java/freemarker/core/ConditionalBlock.java b/freemarker-core/src/main/java/freemarker/core/ConditionalBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/ConditionalBlock.java
rename to freemarker-core/src/main/java/freemarker/core/ConditionalBlock.java
diff --git a/src/main/java/freemarker/core/Configurable.java b/freemarker-core/src/main/java/freemarker/core/Configurable.java
similarity index 100%
rename from src/main/java/freemarker/core/Configurable.java
rename to freemarker-core/src/main/java/freemarker/core/Configurable.java
diff --git a/src/main/java/freemarker/core/ContinueInstruction.java b/freemarker-core/src/main/java/freemarker/core/ContinueInstruction.java
similarity index 100%
rename from src/main/java/freemarker/core/ContinueInstruction.java
rename to freemarker-core/src/main/java/freemarker/core/ContinueInstruction.java
diff --git a/src/main/java/freemarker/core/CustomAttribute.java b/freemarker-core/src/main/java/freemarker/core/CustomAttribute.java
similarity index 100%
rename from src/main/java/freemarker/core/CustomAttribute.java
rename to freemarker-core/src/main/java/freemarker/core/CustomAttribute.java
diff --git a/src/main/java/freemarker/core/DebugBreak.java b/freemarker-core/src/main/java/freemarker/core/DebugBreak.java
similarity index 100%
rename from src/main/java/freemarker/core/DebugBreak.java
rename to freemarker-core/src/main/java/freemarker/core/DebugBreak.java
diff --git a/src/main/java/freemarker/core/DefaultToExpression.java b/freemarker-core/src/main/java/freemarker/core/DefaultToExpression.java
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/java/freemarker/core/DefaultToExpression.java
rename to freemarker-core/src/main/java/freemarker/core/DefaultToExpression.java
diff --git a/src/main/java/freemarker/core/DefaultTruncateBuiltinAlgorithm.java b/freemarker-core/src/main/java/freemarker/core/DefaultTruncateBuiltinAlgorithm.java
similarity index 100%
rename from src/main/java/freemarker/core/DefaultTruncateBuiltinAlgorithm.java
rename to freemarker-core/src/main/java/freemarker/core/DefaultTruncateBuiltinAlgorithm.java
diff --git a/src/main/java/freemarker/core/DirectiveCallPlace.java b/freemarker-core/src/main/java/freemarker/core/DirectiveCallPlace.java
similarity index 100%
rename from src/main/java/freemarker/core/DirectiveCallPlace.java
rename to freemarker-core/src/main/java/freemarker/core/DirectiveCallPlace.java
diff --git a/src/main/java/freemarker/core/DollarVariable.java b/freemarker-core/src/main/java/freemarker/core/DollarVariable.java
similarity index 100%
rename from src/main/java/freemarker/core/DollarVariable.java
rename to freemarker-core/src/main/java/freemarker/core/DollarVariable.java
diff --git a/src/main/java/freemarker/core/Dot.java b/freemarker-core/src/main/java/freemarker/core/Dot.java
similarity index 100%
rename from src/main/java/freemarker/core/Dot.java
rename to freemarker-core/src/main/java/freemarker/core/Dot.java
diff --git a/src/main/java/freemarker/core/DynamicKeyName.java b/freemarker-core/src/main/java/freemarker/core/DynamicKeyName.java
similarity index 100%
rename from src/main/java/freemarker/core/DynamicKeyName.java
rename to freemarker-core/src/main/java/freemarker/core/DynamicKeyName.java
diff --git a/src/main/java/freemarker/core/ElseOfList.java b/freemarker-core/src/main/java/freemarker/core/ElseOfList.java
similarity index 100%
rename from src/main/java/freemarker/core/ElseOfList.java
rename to freemarker-core/src/main/java/freemarker/core/ElseOfList.java
diff --git a/src/main/java/freemarker/core/Environment.java b/freemarker-core/src/main/java/freemarker/core/Environment.java
similarity index 100%
rename from src/main/java/freemarker/core/Environment.java
rename to freemarker-core/src/main/java/freemarker/core/Environment.java
diff --git a/src/main/java/freemarker/core/EscapeBlock.java b/freemarker-core/src/main/java/freemarker/core/EscapeBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/EscapeBlock.java
rename to freemarker-core/src/main/java/freemarker/core/EscapeBlock.java
diff --git a/src/main/java/freemarker/core/EvalUtil.java b/freemarker-core/src/main/java/freemarker/core/EvalUtil.java
similarity index 100%
rename from src/main/java/freemarker/core/EvalUtil.java
rename to freemarker-core/src/main/java/freemarker/core/EvalUtil.java
diff --git a/src/main/java/freemarker/core/ExistsExpression.java b/freemarker-core/src/main/java/freemarker/core/ExistsExpression.java
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/java/freemarker/core/ExistsExpression.java
rename to freemarker-core/src/main/java/freemarker/core/ExistsExpression.java
diff --git a/src/main/java/freemarker/core/Expression.java b/freemarker-core/src/main/java/freemarker/core/Expression.java
similarity index 100%
rename from src/main/java/freemarker/core/Expression.java
rename to freemarker-core/src/main/java/freemarker/core/Expression.java
diff --git a/src/main/java/freemarker/core/ExpressionWithFixedResult.java b/freemarker-core/src/main/java/freemarker/core/ExpressionWithFixedResult.java
similarity index 100%
rename from src/main/java/freemarker/core/ExpressionWithFixedResult.java
rename to freemarker-core/src/main/java/freemarker/core/ExpressionWithFixedResult.java
diff --git a/src/main/java/freemarker/core/ExtendedDecimalFormatParser.java b/freemarker-core/src/main/java/freemarker/core/ExtendedDecimalFormatParser.java
similarity index 100%
rename from src/main/java/freemarker/core/ExtendedDecimalFormatParser.java
rename to freemarker-core/src/main/java/freemarker/core/ExtendedDecimalFormatParser.java
diff --git a/src/main/java/freemarker/core/FallbackInstruction.java b/freemarker-core/src/main/java/freemarker/core/FallbackInstruction.java
similarity index 100%
rename from src/main/java/freemarker/core/FallbackInstruction.java
rename to freemarker-core/src/main/java/freemarker/core/FallbackInstruction.java
diff --git a/src/main/java/freemarker/core/FlowControlException.java b/freemarker-core/src/main/java/freemarker/core/FlowControlException.java
similarity index 100%
rename from src/main/java/freemarker/core/FlowControlException.java
rename to freemarker-core/src/main/java/freemarker/core/FlowControlException.java
diff --git a/src/main/java/freemarker/core/FlushInstruction.java b/freemarker-core/src/main/java/freemarker/core/FlushInstruction.java
similarity index 100%
rename from src/main/java/freemarker/core/FlushInstruction.java
rename to freemarker-core/src/main/java/freemarker/core/FlushInstruction.java
diff --git a/src/main/java/freemarker/core/FreeMarkerTree.java b/freemarker-core/src/main/java/freemarker/core/FreeMarkerTree.java
similarity index 100%
rename from src/main/java/freemarker/core/FreeMarkerTree.java
rename to freemarker-core/src/main/java/freemarker/core/FreeMarkerTree.java
diff --git a/src/main/java/freemarker/core/GetOptionalTemplateMethod.java b/freemarker-core/src/main/java/freemarker/core/GetOptionalTemplateMethod.java
similarity index 100%
rename from src/main/java/freemarker/core/GetOptionalTemplateMethod.java
rename to freemarker-core/src/main/java/freemarker/core/GetOptionalTemplateMethod.java
diff --git a/src/main/java/freemarker/core/HTMLOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/HTMLOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/HTMLOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/HTMLOutputFormat.java
diff --git a/src/main/java/freemarker/core/HashLiteral.java b/freemarker-core/src/main/java/freemarker/core/HashLiteral.java
similarity index 100%
rename from src/main/java/freemarker/core/HashLiteral.java
rename to freemarker-core/src/main/java/freemarker/core/HashLiteral.java
diff --git a/src/main/java/freemarker/core/ICIChainMember.java b/freemarker-core/src/main/java/freemarker/core/ICIChainMember.java
similarity index 100%
rename from src/main/java/freemarker/core/ICIChainMember.java
rename to freemarker-core/src/main/java/freemarker/core/ICIChainMember.java
diff --git a/src/main/java/freemarker/core/ISOLikeTemplateDateFormat.java b/freemarker-core/src/main/java/freemarker/core/ISOLikeTemplateDateFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/ISOLikeTemplateDateFormat.java
rename to freemarker-core/src/main/java/freemarker/core/ISOLikeTemplateDateFormat.java
diff --git a/src/main/java/freemarker/core/ISOLikeTemplateDateFormatFactory.java b/freemarker-core/src/main/java/freemarker/core/ISOLikeTemplateDateFormatFactory.java
similarity index 100%
rename from src/main/java/freemarker/core/ISOLikeTemplateDateFormatFactory.java
rename to freemarker-core/src/main/java/freemarker/core/ISOLikeTemplateDateFormatFactory.java
diff --git a/src/main/java/freemarker/core/ISOTemplateDateFormat.java b/freemarker-core/src/main/java/freemarker/core/ISOTemplateDateFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/ISOTemplateDateFormat.java
rename to freemarker-core/src/main/java/freemarker/core/ISOTemplateDateFormat.java
diff --git a/src/main/java/freemarker/core/ISOTemplateDateFormatFactory.java b/freemarker-core/src/main/java/freemarker/core/ISOTemplateDateFormatFactory.java
similarity index 100%
rename from src/main/java/freemarker/core/ISOTemplateDateFormatFactory.java
rename to freemarker-core/src/main/java/freemarker/core/ISOTemplateDateFormatFactory.java
diff --git a/src/main/java/freemarker/core/Identifier.java b/freemarker-core/src/main/java/freemarker/core/Identifier.java
similarity index 100%
rename from src/main/java/freemarker/core/Identifier.java
rename to freemarker-core/src/main/java/freemarker/core/Identifier.java
diff --git a/src/main/java/freemarker/core/IfBlock.java b/freemarker-core/src/main/java/freemarker/core/IfBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/IfBlock.java
rename to freemarker-core/src/main/java/freemarker/core/IfBlock.java
diff --git a/src/main/java/freemarker/core/Include.java b/freemarker-core/src/main/java/freemarker/core/Include.java
similarity index 100%
rename from src/main/java/freemarker/core/Include.java
rename to freemarker-core/src/main/java/freemarker/core/Include.java
diff --git a/src/main/java/freemarker/core/IntermediateStreamOperationLikeBuiltIn.java b/freemarker-core/src/main/java/freemarker/core/IntermediateStreamOperationLikeBuiltIn.java
similarity index 100%
rename from src/main/java/freemarker/core/IntermediateStreamOperationLikeBuiltIn.java
rename to freemarker-core/src/main/java/freemarker/core/IntermediateStreamOperationLikeBuiltIn.java
diff --git a/src/main/java/freemarker/core/Interpolation.java b/freemarker-core/src/main/java/freemarker/core/Interpolation.java
similarity index 100%
rename from src/main/java/freemarker/core/Interpolation.java
rename to freemarker-core/src/main/java/freemarker/core/Interpolation.java
diff --git a/src/main/java/freemarker/core/Interpret.java b/freemarker-core/src/main/java/freemarker/core/Interpret.java
similarity index 100%
rename from src/main/java/freemarker/core/Interpret.java
rename to freemarker-core/src/main/java/freemarker/core/Interpret.java
diff --git a/src/main/java/freemarker/core/InvalidFormatParametersException.java b/freemarker-core/src/main/java/freemarker/core/InvalidFormatParametersException.java
similarity index 100%
rename from src/main/java/freemarker/core/InvalidFormatParametersException.java
rename to freemarker-core/src/main/java/freemarker/core/InvalidFormatParametersException.java
diff --git a/src/main/java/freemarker/core/InvalidFormatStringException.java b/freemarker-core/src/main/java/freemarker/core/InvalidFormatStringException.java
similarity index 100%
rename from src/main/java/freemarker/core/InvalidFormatStringException.java
rename to freemarker-core/src/main/java/freemarker/core/InvalidFormatStringException.java
diff --git a/src/main/java/freemarker/core/InvalidReferenceException.java b/freemarker-core/src/main/java/freemarker/core/InvalidReferenceException.java
similarity index 100%
rename from src/main/java/freemarker/core/InvalidReferenceException.java
rename to freemarker-core/src/main/java/freemarker/core/InvalidReferenceException.java
diff --git a/src/main/java/freemarker/core/Items.java b/freemarker-core/src/main/java/freemarker/core/Items.java
similarity index 100%
rename from src/main/java/freemarker/core/Items.java
rename to freemarker-core/src/main/java/freemarker/core/Items.java
diff --git a/src/main/java/freemarker/core/IteratorBlock.java b/freemarker-core/src/main/java/freemarker/core/IteratorBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/IteratorBlock.java
rename to freemarker-core/src/main/java/freemarker/core/IteratorBlock.java
diff --git a/src/main/java/freemarker/core/JSONCFormat.java b/freemarker-core/src/main/java/freemarker/core/JSONCFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/JSONCFormat.java
rename to freemarker-core/src/main/java/freemarker/core/JSONCFormat.java
diff --git a/src/main/java/freemarker/core/JSONOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/JSONOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/JSONOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/JSONOutputFormat.java
diff --git a/src/main/java/freemarker/core/JSONParser.java b/freemarker-core/src/main/java/freemarker/core/JSONParser.java
similarity index 100%
rename from src/main/java/freemarker/core/JSONParser.java
rename to freemarker-core/src/main/java/freemarker/core/JSONParser.java
diff --git a/src/main/java/freemarker/core/JavaCFormat.java b/freemarker-core/src/main/java/freemarker/core/JavaCFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/JavaCFormat.java
rename to freemarker-core/src/main/java/freemarker/core/JavaCFormat.java
diff --git a/src/main/java/freemarker/core/JavaScriptCFormat.java b/freemarker-core/src/main/java/freemarker/core/JavaScriptCFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/JavaScriptCFormat.java
rename to freemarker-core/src/main/java/freemarker/core/JavaScriptCFormat.java
diff --git a/src/main/java/freemarker/core/JavaScriptOrJSONCFormat.java b/freemarker-core/src/main/java/freemarker/core/JavaScriptOrJSONCFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/JavaScriptOrJSONCFormat.java
rename to freemarker-core/src/main/java/freemarker/core/JavaScriptOrJSONCFormat.java
diff --git a/src/main/java/freemarker/core/JavaScriptOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/JavaScriptOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/JavaScriptOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/JavaScriptOutputFormat.java
diff --git a/src/main/java/freemarker/core/JavaTemplateDateFormat.java b/freemarker-core/src/main/java/freemarker/core/JavaTemplateDateFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/JavaTemplateDateFormat.java
rename to freemarker-core/src/main/java/freemarker/core/JavaTemplateDateFormat.java
diff --git a/src/main/java/freemarker/core/JavaTemplateDateFormatFactory.java b/freemarker-core/src/main/java/freemarker/core/JavaTemplateDateFormatFactory.java
similarity index 100%
rename from src/main/java/freemarker/core/JavaTemplateDateFormatFactory.java
rename to freemarker-core/src/main/java/freemarker/core/JavaTemplateDateFormatFactory.java
diff --git a/src/main/java/freemarker/core/JavaTemplateNumberFormat.java b/freemarker-core/src/main/java/freemarker/core/JavaTemplateNumberFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/JavaTemplateNumberFormat.java
rename to freemarker-core/src/main/java/freemarker/core/JavaTemplateNumberFormat.java
diff --git a/src/main/java/freemarker/core/JavaTemplateNumberFormatFactory.java b/freemarker-core/src/main/java/freemarker/core/JavaTemplateNumberFormatFactory.java
similarity index 100%
rename from src/main/java/freemarker/core/JavaTemplateNumberFormatFactory.java
rename to freemarker-core/src/main/java/freemarker/core/JavaTemplateNumberFormatFactory.java
diff --git a/src/main/java/freemarker/core/LazilyGeneratedCollectionModel.java b/freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModel.java
similarity index 100%
rename from src/main/java/freemarker/core/LazilyGeneratedCollectionModel.java
rename to freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModel.java
diff --git a/src/main/java/freemarker/core/LazilyGeneratedCollectionModelEx.java b/freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModelEx.java
similarity index 100%
rename from src/main/java/freemarker/core/LazilyGeneratedCollectionModelEx.java
rename to freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModelEx.java
diff --git a/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithAlreadyKnownSize.java b/freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithAlreadyKnownSize.java
similarity index 100%
rename from src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithAlreadyKnownSize.java
rename to freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithAlreadyKnownSize.java
diff --git a/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithSameSizeCollEx.java b/freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithSameSizeCollEx.java
similarity index 100%
rename from src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithSameSizeCollEx.java
rename to freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithSameSizeCollEx.java
diff --git a/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithSameSizeSeq.java b/freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithSameSizeSeq.java
similarity index 100%
rename from src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithSameSizeSeq.java
rename to freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithSameSizeSeq.java
diff --git a/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithUnknownSize.java b/freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithUnknownSize.java
similarity index 100%
rename from src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithUnknownSize.java
rename to freemarker-core/src/main/java/freemarker/core/LazilyGeneratedCollectionModelWithUnknownSize.java
diff --git a/src/main/java/freemarker/core/LazyCollectionTemplateModelIterator.java b/freemarker-core/src/main/java/freemarker/core/LazyCollectionTemplateModelIterator.java
similarity index 100%
rename from src/main/java/freemarker/core/LazyCollectionTemplateModelIterator.java
rename to freemarker-core/src/main/java/freemarker/core/LazyCollectionTemplateModelIterator.java
diff --git a/src/main/java/freemarker/core/LazySequenceIterator.java b/freemarker-core/src/main/java/freemarker/core/LazySequenceIterator.java
similarity index 100%
rename from src/main/java/freemarker/core/LazySequenceIterator.java
rename to freemarker-core/src/main/java/freemarker/core/LazySequenceIterator.java
diff --git a/src/main/java/freemarker/core/LegacyCFormat.java b/freemarker-core/src/main/java/freemarker/core/LegacyCFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/LegacyCFormat.java
rename to freemarker-core/src/main/java/freemarker/core/LegacyCFormat.java
diff --git a/src/main/java/freemarker/core/LegacyConstructorParserConfiguration.java b/freemarker-core/src/main/java/freemarker/core/LegacyConstructorParserConfiguration.java
similarity index 100%
rename from src/main/java/freemarker/core/LegacyConstructorParserConfiguration.java
rename to freemarker-core/src/main/java/freemarker/core/LegacyConstructorParserConfiguration.java
diff --git a/src/main/java/freemarker/core/LibraryLoad.java b/freemarker-core/src/main/java/freemarker/core/LibraryLoad.java
similarity index 100%
rename from src/main/java/freemarker/core/LibraryLoad.java
rename to freemarker-core/src/main/java/freemarker/core/LibraryLoad.java
diff --git a/src/main/java/freemarker/core/ListElseContainer.java b/freemarker-core/src/main/java/freemarker/core/ListElseContainer.java
similarity index 100%
rename from src/main/java/freemarker/core/ListElseContainer.java
rename to freemarker-core/src/main/java/freemarker/core/ListElseContainer.java
diff --git a/src/main/java/freemarker/core/ListLiteral.java b/freemarker-core/src/main/java/freemarker/core/ListLiteral.java
similarity index 100%
rename from src/main/java/freemarker/core/ListLiteral.java
rename to freemarker-core/src/main/java/freemarker/core/ListLiteral.java
diff --git a/src/main/java/freemarker/core/ListableRightUnboundedRangeModel.java b/freemarker-core/src/main/java/freemarker/core/ListableRightUnboundedRangeModel.java
similarity index 100%
rename from src/main/java/freemarker/core/ListableRightUnboundedRangeModel.java
rename to freemarker-core/src/main/java/freemarker/core/ListableRightUnboundedRangeModel.java
diff --git a/src/main/java/freemarker/core/LocalContext.java b/freemarker-core/src/main/java/freemarker/core/LocalContext.java
similarity index 100%
rename from src/main/java/freemarker/core/LocalContext.java
rename to freemarker-core/src/main/java/freemarker/core/LocalContext.java
diff --git a/src/main/java/freemarker/core/LocalContextStack.java b/freemarker-core/src/main/java/freemarker/core/LocalContextStack.java
similarity index 100%
rename from src/main/java/freemarker/core/LocalContextStack.java
rename to freemarker-core/src/main/java/freemarker/core/LocalContextStack.java
diff --git a/src/main/java/freemarker/core/LocalLambdaExpression.java b/freemarker-core/src/main/java/freemarker/core/LocalLambdaExpression.java
similarity index 100%
rename from src/main/java/freemarker/core/LocalLambdaExpression.java
rename to freemarker-core/src/main/java/freemarker/core/LocalLambdaExpression.java
diff --git a/src/main/java/freemarker/core/Macro.java b/freemarker-core/src/main/java/freemarker/core/Macro.java
similarity index 100%
rename from src/main/java/freemarker/core/Macro.java
rename to freemarker-core/src/main/java/freemarker/core/Macro.java
diff --git a/src/main/java/freemarker/core/MarkupOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/MarkupOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/MarkupOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/MarkupOutputFormat.java
diff --git a/src/main/java/freemarker/core/MarkupOutputFormatBoundBuiltIn.java b/freemarker-core/src/main/java/freemarker/core/MarkupOutputFormatBoundBuiltIn.java
similarity index 100%
rename from src/main/java/freemarker/core/MarkupOutputFormatBoundBuiltIn.java
rename to freemarker-core/src/main/java/freemarker/core/MarkupOutputFormatBoundBuiltIn.java
diff --git a/src/main/java/freemarker/core/MethodCall.java b/freemarker-core/src/main/java/freemarker/core/MethodCall.java
similarity index 100%
rename from src/main/java/freemarker/core/MethodCall.java
rename to freemarker-core/src/main/java/freemarker/core/MethodCall.java
diff --git a/src/main/java/freemarker/core/MiscUtil.java b/freemarker-core/src/main/java/freemarker/core/MiscUtil.java
similarity index 100%
rename from src/main/java/freemarker/core/MiscUtil.java
rename to freemarker-core/src/main/java/freemarker/core/MiscUtil.java
diff --git a/src/main/java/freemarker/core/MixedContent.java b/freemarker-core/src/main/java/freemarker/core/MixedContent.java
similarity index 100%
rename from src/main/java/freemarker/core/MixedContent.java
rename to freemarker-core/src/main/java/freemarker/core/MixedContent.java
diff --git a/src/main/java/freemarker/core/NestedContentNotSupportedException.java b/freemarker-core/src/main/java/freemarker/core/NestedContentNotSupportedException.java
similarity index 100%
rename from src/main/java/freemarker/core/NestedContentNotSupportedException.java
rename to freemarker-core/src/main/java/freemarker/core/NestedContentNotSupportedException.java
diff --git a/src/main/java/freemarker/core/NewBI.java b/freemarker-core/src/main/java/freemarker/core/NewBI.java
similarity index 100%
rename from src/main/java/freemarker/core/NewBI.java
rename to freemarker-core/src/main/java/freemarker/core/NewBI.java
diff --git a/src/main/java/freemarker/core/NoAutoEscBlock.java b/freemarker-core/src/main/java/freemarker/core/NoAutoEscBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/NoAutoEscBlock.java
rename to freemarker-core/src/main/java/freemarker/core/NoAutoEscBlock.java
diff --git a/src/main/java/freemarker/core/NoEscapeBlock.java b/freemarker-core/src/main/java/freemarker/core/NoEscapeBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/NoEscapeBlock.java
rename to freemarker-core/src/main/java/freemarker/core/NoEscapeBlock.java
diff --git a/src/main/java/freemarker/core/NonBooleanException.java b/freemarker-core/src/main/java/freemarker/core/NonBooleanException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonBooleanException.java
rename to freemarker-core/src/main/java/freemarker/core/NonBooleanException.java
diff --git a/src/main/java/freemarker/core/NonDateException.java b/freemarker-core/src/main/java/freemarker/core/NonDateException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonDateException.java
rename to freemarker-core/src/main/java/freemarker/core/NonDateException.java
diff --git a/src/main/java/freemarker/core/NonExtendedHashException.java b/freemarker-core/src/main/java/freemarker/core/NonExtendedHashException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonExtendedHashException.java
rename to freemarker-core/src/main/java/freemarker/core/NonExtendedHashException.java
diff --git a/src/main/java/freemarker/core/NonExtendedNodeException.java b/freemarker-core/src/main/java/freemarker/core/NonExtendedNodeException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonExtendedNodeException.java
rename to freemarker-core/src/main/java/freemarker/core/NonExtendedNodeException.java
diff --git a/src/main/java/freemarker/core/NonHashException.java b/freemarker-core/src/main/java/freemarker/core/NonHashException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonHashException.java
rename to freemarker-core/src/main/java/freemarker/core/NonHashException.java
diff --git a/src/main/java/freemarker/core/NonListableRightUnboundedRangeModel.java b/freemarker-core/src/main/java/freemarker/core/NonListableRightUnboundedRangeModel.java
similarity index 100%
rename from src/main/java/freemarker/core/NonListableRightUnboundedRangeModel.java
rename to freemarker-core/src/main/java/freemarker/core/NonListableRightUnboundedRangeModel.java
diff --git a/src/main/java/freemarker/core/NonMarkupOutputException.java b/freemarker-core/src/main/java/freemarker/core/NonMarkupOutputException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonMarkupOutputException.java
rename to freemarker-core/src/main/java/freemarker/core/NonMarkupOutputException.java
diff --git a/src/main/java/freemarker/core/NonMethodException.java b/freemarker-core/src/main/java/freemarker/core/NonMethodException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonMethodException.java
rename to freemarker-core/src/main/java/freemarker/core/NonMethodException.java
diff --git a/src/main/java/freemarker/core/NonNamespaceException.java b/freemarker-core/src/main/java/freemarker/core/NonNamespaceException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonNamespaceException.java
rename to freemarker-core/src/main/java/freemarker/core/NonNamespaceException.java
diff --git a/src/main/java/freemarker/core/NonNodeException.java b/freemarker-core/src/main/java/freemarker/core/NonNodeException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonNodeException.java
rename to freemarker-core/src/main/java/freemarker/core/NonNodeException.java
diff --git a/src/main/java/freemarker/core/NonNumericalException.java b/freemarker-core/src/main/java/freemarker/core/NonNumericalException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonNumericalException.java
rename to freemarker-core/src/main/java/freemarker/core/NonNumericalException.java
diff --git a/src/main/java/freemarker/core/NonSequenceException.java b/freemarker-core/src/main/java/freemarker/core/NonSequenceException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonSequenceException.java
rename to freemarker-core/src/main/java/freemarker/core/NonSequenceException.java
diff --git a/src/main/java/freemarker/core/NonSequenceOrCollectionException.java b/freemarker-core/src/main/java/freemarker/core/NonSequenceOrCollectionException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonSequenceOrCollectionException.java
rename to freemarker-core/src/main/java/freemarker/core/NonSequenceOrCollectionException.java
diff --git a/src/main/java/freemarker/core/NonStringException.java b/freemarker-core/src/main/java/freemarker/core/NonStringException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonStringException.java
rename to freemarker-core/src/main/java/freemarker/core/NonStringException.java
diff --git a/src/main/java/freemarker/core/NonStringOrTemplateOutputException.java b/freemarker-core/src/main/java/freemarker/core/NonStringOrTemplateOutputException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonStringOrTemplateOutputException.java
rename to freemarker-core/src/main/java/freemarker/core/NonStringOrTemplateOutputException.java
diff --git a/src/main/java/freemarker/core/NonUserDefinedDirectiveLikeException.java b/freemarker-core/src/main/java/freemarker/core/NonUserDefinedDirectiveLikeException.java
similarity index 100%
rename from src/main/java/freemarker/core/NonUserDefinedDirectiveLikeException.java
rename to freemarker-core/src/main/java/freemarker/core/NonUserDefinedDirectiveLikeException.java
diff --git a/src/main/java/freemarker/core/NotExpression.java b/freemarker-core/src/main/java/freemarker/core/NotExpression.java
similarity index 100%
rename from src/main/java/freemarker/core/NotExpression.java
rename to freemarker-core/src/main/java/freemarker/core/NotExpression.java
diff --git a/src/main/java/freemarker/core/NumberLiteral.java b/freemarker-core/src/main/java/freemarker/core/NumberLiteral.java
similarity index 100%
rename from src/main/java/freemarker/core/NumberLiteral.java
rename to freemarker-core/src/main/java/freemarker/core/NumberLiteral.java
diff --git a/src/main/java/freemarker/core/NumericalOutput.java b/freemarker-core/src/main/java/freemarker/core/NumericalOutput.java
similarity index 100%
rename from src/main/java/freemarker/core/NumericalOutput.java
rename to freemarker-core/src/main/java/freemarker/core/NumericalOutput.java
diff --git a/src/main/java/freemarker/core/OptInTemplateClassResolver.java b/freemarker-core/src/main/java/freemarker/core/OptInTemplateClassResolver.java
similarity index 100%
rename from src/main/java/freemarker/core/OptInTemplateClassResolver.java
rename to freemarker-core/src/main/java/freemarker/core/OptInTemplateClassResolver.java
diff --git a/src/main/java/freemarker/core/OrExpression.java b/freemarker-core/src/main/java/freemarker/core/OrExpression.java
similarity index 100%
rename from src/main/java/freemarker/core/OrExpression.java
rename to freemarker-core/src/main/java/freemarker/core/OrExpression.java
diff --git a/src/main/java/freemarker/core/OutputFormat.java b/freemarker-core/src/main/java/freemarker/core/OutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/OutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/OutputFormat.java
diff --git a/src/main/java/freemarker/core/OutputFormatBlock.java b/freemarker-core/src/main/java/freemarker/core/OutputFormatBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/OutputFormatBlock.java
rename to freemarker-core/src/main/java/freemarker/core/OutputFormatBlock.java
diff --git a/src/main/java/freemarker/core/OutputFormatBoundBuiltIn.java b/freemarker-core/src/main/java/freemarker/core/OutputFormatBoundBuiltIn.java
similarity index 100%
rename from src/main/java/freemarker/core/OutputFormatBoundBuiltIn.java
rename to freemarker-core/src/main/java/freemarker/core/OutputFormatBoundBuiltIn.java
diff --git a/src/main/java/freemarker/core/ParameterRole.java b/freemarker-core/src/main/java/freemarker/core/ParameterRole.java
similarity index 100%
rename from src/main/java/freemarker/core/ParameterRole.java
rename to freemarker-core/src/main/java/freemarker/core/ParameterRole.java
diff --git a/src/main/java/freemarker/core/ParentheticalExpression.java b/freemarker-core/src/main/java/freemarker/core/ParentheticalExpression.java
similarity index 100%
rename from src/main/java/freemarker/core/ParentheticalExpression.java
rename to freemarker-core/src/main/java/freemarker/core/ParentheticalExpression.java
diff --git a/src/main/java/freemarker/core/ParseException.java b/freemarker-core/src/main/java/freemarker/core/ParseException.java
similarity index 100%
rename from src/main/java/freemarker/core/ParseException.java
rename to freemarker-core/src/main/java/freemarker/core/ParseException.java
diff --git a/src/main/java/freemarker/core/ParserConfiguration.java b/freemarker-core/src/main/java/freemarker/core/ParserConfiguration.java
similarity index 100%
rename from src/main/java/freemarker/core/ParserConfiguration.java
rename to freemarker-core/src/main/java/freemarker/core/ParserConfiguration.java
diff --git a/src/main/java/freemarker/core/ParsingNotSupportedException.java b/freemarker-core/src/main/java/freemarker/core/ParsingNotSupportedException.java
similarity index 100%
rename from src/main/java/freemarker/core/ParsingNotSupportedException.java
rename to freemarker-core/src/main/java/freemarker/core/ParsingNotSupportedException.java
diff --git a/src/main/java/freemarker/core/PlainTextOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/PlainTextOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/PlainTextOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/PlainTextOutputFormat.java
diff --git a/src/main/java/freemarker/core/PropertySetting.java b/freemarker-core/src/main/java/freemarker/core/PropertySetting.java
similarity index 100%
rename from src/main/java/freemarker/core/PropertySetting.java
rename to freemarker-core/src/main/java/freemarker/core/PropertySetting.java
diff --git a/src/main/java/freemarker/core/RTFOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/RTFOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/RTFOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/RTFOutputFormat.java
diff --git a/src/main/java/freemarker/core/Range.java b/freemarker-core/src/main/java/freemarker/core/Range.java
similarity index 100%
rename from src/main/java/freemarker/core/Range.java
rename to freemarker-core/src/main/java/freemarker/core/Range.java
diff --git a/src/main/java/freemarker/core/RangeModel.java b/freemarker-core/src/main/java/freemarker/core/RangeModel.java
similarity index 100%
rename from src/main/java/freemarker/core/RangeModel.java
rename to freemarker-core/src/main/java/freemarker/core/RangeModel.java
diff --git a/src/main/java/freemarker/core/RecoveryBlock.java b/freemarker-core/src/main/java/freemarker/core/RecoveryBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/RecoveryBlock.java
rename to freemarker-core/src/main/java/freemarker/core/RecoveryBlock.java
diff --git a/src/main/java/freemarker/core/RecurseNode.java b/freemarker-core/src/main/java/freemarker/core/RecurseNode.java
similarity index 100%
rename from src/main/java/freemarker/core/RecurseNode.java
rename to freemarker-core/src/main/java/freemarker/core/RecurseNode.java
diff --git a/src/main/java/freemarker/core/RegexpHelper.java b/freemarker-core/src/main/java/freemarker/core/RegexpHelper.java
similarity index 100%
rename from src/main/java/freemarker/core/RegexpHelper.java
rename to freemarker-core/src/main/java/freemarker/core/RegexpHelper.java
diff --git a/src/main/java/freemarker/core/ReturnInstruction.java b/freemarker-core/src/main/java/freemarker/core/ReturnInstruction.java
similarity index 100%
rename from src/main/java/freemarker/core/ReturnInstruction.java
rename to freemarker-core/src/main/java/freemarker/core/ReturnInstruction.java
diff --git a/src/main/java/freemarker/core/RightUnboundedRangeModel.java b/freemarker-core/src/main/java/freemarker/core/RightUnboundedRangeModel.java
similarity index 100%
rename from src/main/java/freemarker/core/RightUnboundedRangeModel.java
rename to freemarker-core/src/main/java/freemarker/core/RightUnboundedRangeModel.java
diff --git a/src/main/java/freemarker/core/Sep.java b/freemarker-core/src/main/java/freemarker/core/Sep.java
similarity index 100%
rename from src/main/java/freemarker/core/Sep.java
rename to freemarker-core/src/main/java/freemarker/core/Sep.java
diff --git a/src/main/java/freemarker/core/SequenceIterator.java b/freemarker-core/src/main/java/freemarker/core/SequenceIterator.java
similarity index 100%
rename from src/main/java/freemarker/core/SequenceIterator.java
rename to freemarker-core/src/main/java/freemarker/core/SequenceIterator.java
diff --git a/src/main/java/freemarker/core/SingleIterationCollectionModel.java b/freemarker-core/src/main/java/freemarker/core/SingleIterationCollectionModel.java
similarity index 100%
rename from src/main/java/freemarker/core/SingleIterationCollectionModel.java
rename to freemarker-core/src/main/java/freemarker/core/SingleIterationCollectionModel.java
diff --git a/src/main/java/freemarker/core/SpecialBuiltIn.java b/freemarker-core/src/main/java/freemarker/core/SpecialBuiltIn.java
similarity index 100%
rename from src/main/java/freemarker/core/SpecialBuiltIn.java
rename to freemarker-core/src/main/java/freemarker/core/SpecialBuiltIn.java
diff --git a/src/main/java/freemarker/core/StandardCFormats.java b/freemarker-core/src/main/java/freemarker/core/StandardCFormats.java
similarity index 100%
rename from src/main/java/freemarker/core/StandardCFormats.java
rename to freemarker-core/src/main/java/freemarker/core/StandardCFormats.java
diff --git a/src/main/java/freemarker/core/StopException.java b/freemarker-core/src/main/java/freemarker/core/StopException.java
similarity index 100%
rename from src/main/java/freemarker/core/StopException.java
rename to freemarker-core/src/main/java/freemarker/core/StopException.java
diff --git a/src/main/java/freemarker/core/StopInstruction.java b/freemarker-core/src/main/java/freemarker/core/StopInstruction.java
similarity index 100%
rename from src/main/java/freemarker/core/StopInstruction.java
rename to freemarker-core/src/main/java/freemarker/core/StopInstruction.java
diff --git a/src/main/java/freemarker/core/StringArraySequence.java b/freemarker-core/src/main/java/freemarker/core/StringArraySequence.java
similarity index 100%
rename from src/main/java/freemarker/core/StringArraySequence.java
rename to freemarker-core/src/main/java/freemarker/core/StringArraySequence.java
diff --git a/src/main/java/freemarker/core/StringLiteral.java b/freemarker-core/src/main/java/freemarker/core/StringLiteral.java
similarity index 100%
rename from src/main/java/freemarker/core/StringLiteral.java
rename to freemarker-core/src/main/java/freemarker/core/StringLiteral.java
diff --git a/src/main/java/freemarker/core/SwitchBlock.java b/freemarker-core/src/main/java/freemarker/core/SwitchBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/SwitchBlock.java
rename to freemarker-core/src/main/java/freemarker/core/SwitchBlock.java
diff --git a/src/main/java/freemarker/core/TemplateClassResolver.java b/freemarker-core/src/main/java/freemarker/core/TemplateClassResolver.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateClassResolver.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateClassResolver.java
diff --git a/src/main/java/freemarker/core/TemplateCombinedMarkupOutputModel.java b/freemarker-core/src/main/java/freemarker/core/TemplateCombinedMarkupOutputModel.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateCombinedMarkupOutputModel.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateCombinedMarkupOutputModel.java
diff --git a/src/main/java/freemarker/core/TemplateConfiguration.java b/freemarker-core/src/main/java/freemarker/core/TemplateConfiguration.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateConfiguration.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateConfiguration.java
diff --git a/src/main/java/freemarker/core/TemplateDateFormat.java b/freemarker-core/src/main/java/freemarker/core/TemplateDateFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateDateFormat.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateDateFormat.java
diff --git a/src/main/java/freemarker/core/TemplateDateFormatFactory.java b/freemarker-core/src/main/java/freemarker/core/TemplateDateFormatFactory.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateDateFormatFactory.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateDateFormatFactory.java
diff --git a/src/main/java/freemarker/core/TemplateElement.java b/freemarker-core/src/main/java/freemarker/core/TemplateElement.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateElement.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateElement.java
diff --git a/src/main/java/freemarker/core/TemplateElementArrayBuilder.java b/freemarker-core/src/main/java/freemarker/core/TemplateElementArrayBuilder.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateElementArrayBuilder.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateElementArrayBuilder.java
diff --git a/src/main/java/freemarker/core/TemplateElementsToVisit.java b/freemarker-core/src/main/java/freemarker/core/TemplateElementsToVisit.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateElementsToVisit.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateElementsToVisit.java
diff --git a/src/main/java/freemarker/core/TemplateFormatUtil.java b/freemarker-core/src/main/java/freemarker/core/TemplateFormatUtil.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateFormatUtil.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateFormatUtil.java
diff --git a/src/main/java/freemarker/core/TemplateHTMLOutputModel.java b/freemarker-core/src/main/java/freemarker/core/TemplateHTMLOutputModel.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateHTMLOutputModel.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateHTMLOutputModel.java
diff --git a/src/main/java/freemarker/core/TemplateMarkupOutputModel.java b/freemarker-core/src/main/java/freemarker/core/TemplateMarkupOutputModel.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateMarkupOutputModel.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateMarkupOutputModel.java
diff --git a/src/main/java/freemarker/core/TemplateNullModel.java b/freemarker-core/src/main/java/freemarker/core/TemplateNullModel.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateNullModel.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateNullModel.java
diff --git a/src/main/java/freemarker/core/TemplateNumberFormat.java b/freemarker-core/src/main/java/freemarker/core/TemplateNumberFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateNumberFormat.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateNumberFormat.java
diff --git a/src/main/java/freemarker/core/TemplateNumberFormatFactory.java b/freemarker-core/src/main/java/freemarker/core/TemplateNumberFormatFactory.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateNumberFormatFactory.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateNumberFormatFactory.java
diff --git a/src/main/java/freemarker/core/TemplateObject.java b/freemarker-core/src/main/java/freemarker/core/TemplateObject.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateObject.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateObject.java
diff --git a/src/main/java/freemarker/core/TemplatePostProcessor.java b/freemarker-core/src/main/java/freemarker/core/TemplatePostProcessor.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplatePostProcessor.java
rename to freemarker-core/src/main/java/freemarker/core/TemplatePostProcessor.java
diff --git a/src/main/java/freemarker/core/TemplatePostProcessorException.java b/freemarker-core/src/main/java/freemarker/core/TemplatePostProcessorException.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplatePostProcessorException.java
rename to freemarker-core/src/main/java/freemarker/core/TemplatePostProcessorException.java
diff --git a/src/main/java/freemarker/core/TemplateProcessingTracer.java b/freemarker-core/src/main/java/freemarker/core/TemplateProcessingTracer.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateProcessingTracer.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateProcessingTracer.java
diff --git a/src/main/java/freemarker/core/TemplateRTFOutputModel.java b/freemarker-core/src/main/java/freemarker/core/TemplateRTFOutputModel.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateRTFOutputModel.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateRTFOutputModel.java
diff --git a/src/main/java/freemarker/core/TemplateValueFormat.java b/freemarker-core/src/main/java/freemarker/core/TemplateValueFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateValueFormat.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateValueFormat.java
diff --git a/src/main/java/freemarker/core/TemplateValueFormatException.java b/freemarker-core/src/main/java/freemarker/core/TemplateValueFormatException.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateValueFormatException.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateValueFormatException.java
diff --git a/src/main/java/freemarker/core/TemplateValueFormatFactory.java b/freemarker-core/src/main/java/freemarker/core/TemplateValueFormatFactory.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateValueFormatFactory.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateValueFormatFactory.java
diff --git a/src/main/java/freemarker/core/TemplateXHTMLOutputModel.java b/freemarker-core/src/main/java/freemarker/core/TemplateXHTMLOutputModel.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateXHTMLOutputModel.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateXHTMLOutputModel.java
diff --git a/src/main/java/freemarker/core/TemplateXMLOutputModel.java b/freemarker-core/src/main/java/freemarker/core/TemplateXMLOutputModel.java
similarity index 100%
rename from src/main/java/freemarker/core/TemplateXMLOutputModel.java
rename to freemarker-core/src/main/java/freemarker/core/TemplateXMLOutputModel.java
diff --git a/src/main/java/freemarker/core/TextBlock.java b/freemarker-core/src/main/java/freemarker/core/TextBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/TextBlock.java
rename to freemarker-core/src/main/java/freemarker/core/TextBlock.java
diff --git a/src/main/java/freemarker/core/ThreadInterruptionSupportTemplatePostProcessor.java b/freemarker-core/src/main/java/freemarker/core/ThreadInterruptionSupportTemplatePostProcessor.java
similarity index 100%
rename from src/main/java/freemarker/core/ThreadInterruptionSupportTemplatePostProcessor.java
rename to freemarker-core/src/main/java/freemarker/core/ThreadInterruptionSupportTemplatePostProcessor.java
diff --git a/src/main/java/freemarker/core/TokenMgrError.java b/freemarker-core/src/main/java/freemarker/core/TokenMgrError.java
similarity index 100%
rename from src/main/java/freemarker/core/TokenMgrError.java
rename to freemarker-core/src/main/java/freemarker/core/TokenMgrError.java
diff --git a/src/main/java/freemarker/core/TransformBlock.java b/freemarker-core/src/main/java/freemarker/core/TransformBlock.java
similarity index 100%
rename from src/main/java/freemarker/core/TransformBlock.java
rename to freemarker-core/src/main/java/freemarker/core/TransformBlock.java
diff --git a/src/main/java/freemarker/core/TrimInstruction.java b/freemarker-core/src/main/java/freemarker/core/TrimInstruction.java
similarity index 100%
rename from src/main/java/freemarker/core/TrimInstruction.java
rename to freemarker-core/src/main/java/freemarker/core/TrimInstruction.java
diff --git a/src/main/java/freemarker/core/TruncateBuiltinAlgorithm.java b/freemarker-core/src/main/java/freemarker/core/TruncateBuiltinAlgorithm.java
similarity index 100%
rename from src/main/java/freemarker/core/TruncateBuiltinAlgorithm.java
rename to freemarker-core/src/main/java/freemarker/core/TruncateBuiltinAlgorithm.java
diff --git a/src/main/java/freemarker/core/UnaryPlusMinusExpression.java b/freemarker-core/src/main/java/freemarker/core/UnaryPlusMinusExpression.java
similarity index 100%
rename from src/main/java/freemarker/core/UnaryPlusMinusExpression.java
rename to freemarker-core/src/main/java/freemarker/core/UnaryPlusMinusExpression.java
diff --git a/src/main/java/freemarker/core/UncheckedParseException.java b/freemarker-core/src/main/java/freemarker/core/UncheckedParseException.java
similarity index 100%
rename from src/main/java/freemarker/core/UncheckedParseException.java
rename to freemarker-core/src/main/java/freemarker/core/UncheckedParseException.java
diff --git a/src/main/java/freemarker/core/UndefinedCustomFormatException.java b/freemarker-core/src/main/java/freemarker/core/UndefinedCustomFormatException.java
similarity index 100%
rename from src/main/java/freemarker/core/UndefinedCustomFormatException.java
rename to freemarker-core/src/main/java/freemarker/core/UndefinedCustomFormatException.java
diff --git a/src/main/java/freemarker/core/UndefinedOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/UndefinedOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/UndefinedOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/UndefinedOutputFormat.java
diff --git a/src/main/java/freemarker/core/UnexpectedTypeException.java b/freemarker-core/src/main/java/freemarker/core/UnexpectedTypeException.java
similarity index 100%
rename from src/main/java/freemarker/core/UnexpectedTypeException.java
rename to freemarker-core/src/main/java/freemarker/core/UnexpectedTypeException.java
diff --git a/src/main/java/freemarker/core/UnformattableValueException.java b/freemarker-core/src/main/java/freemarker/core/UnformattableValueException.java
similarity index 100%
rename from src/main/java/freemarker/core/UnformattableValueException.java
rename to freemarker-core/src/main/java/freemarker/core/UnformattableValueException.java
diff --git a/src/main/java/freemarker/core/UnifiedCall.java b/freemarker-core/src/main/java/freemarker/core/UnifiedCall.java
similarity index 100%
rename from src/main/java/freemarker/core/UnifiedCall.java
rename to freemarker-core/src/main/java/freemarker/core/UnifiedCall.java
diff --git a/src/main/java/freemarker/core/UnknownDateTypeFormattingUnsupportedException.java b/freemarker-core/src/main/java/freemarker/core/UnknownDateTypeFormattingUnsupportedException.java
similarity index 100%
rename from src/main/java/freemarker/core/UnknownDateTypeFormattingUnsupportedException.java
rename to freemarker-core/src/main/java/freemarker/core/UnknownDateTypeFormattingUnsupportedException.java
diff --git a/src/main/java/freemarker/core/UnknownDateTypeParsingUnsupportedException.java b/freemarker-core/src/main/java/freemarker/core/UnknownDateTypeParsingUnsupportedException.java
similarity index 100%
rename from src/main/java/freemarker/core/UnknownDateTypeParsingUnsupportedException.java
rename to freemarker-core/src/main/java/freemarker/core/UnknownDateTypeParsingUnsupportedException.java
diff --git a/src/main/java/freemarker/core/UnparsableValueException.java b/freemarker-core/src/main/java/freemarker/core/UnparsableValueException.java
similarity index 100%
rename from src/main/java/freemarker/core/UnparsableValueException.java
rename to freemarker-core/src/main/java/freemarker/core/UnparsableValueException.java
diff --git a/src/main/java/freemarker/core/UnregisteredOutputFormatException.java b/freemarker-core/src/main/java/freemarker/core/UnregisteredOutputFormatException.java
similarity index 100%
rename from src/main/java/freemarker/core/UnregisteredOutputFormatException.java
rename to freemarker-core/src/main/java/freemarker/core/UnregisteredOutputFormatException.java
diff --git a/src/main/java/freemarker/core/VisitNode.java b/freemarker-core/src/main/java/freemarker/core/VisitNode.java
similarity index 100%
rename from src/main/java/freemarker/core/VisitNode.java
rename to freemarker-core/src/main/java/freemarker/core/VisitNode.java
diff --git a/src/main/java/freemarker/core/XHTMLOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/XHTMLOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/XHTMLOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/XHTMLOutputFormat.java
diff --git a/src/main/java/freemarker/core/XMLOutputFormat.java b/freemarker-core/src/main/java/freemarker/core/XMLOutputFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/XMLOutputFormat.java
rename to freemarker-core/src/main/java/freemarker/core/XMLOutputFormat.java
diff --git a/src/main/java/freemarker/core/XSCFormat.java b/freemarker-core/src/main/java/freemarker/core/XSCFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/XSCFormat.java
rename to freemarker-core/src/main/java/freemarker/core/XSCFormat.java
diff --git a/src/main/java/freemarker/core/XSTemplateDateFormat.java b/freemarker-core/src/main/java/freemarker/core/XSTemplateDateFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/XSTemplateDateFormat.java
rename to freemarker-core/src/main/java/freemarker/core/XSTemplateDateFormat.java
diff --git a/src/main/java/freemarker/core/XSTemplateDateFormatFactory.java b/freemarker-core/src/main/java/freemarker/core/XSTemplateDateFormatFactory.java
similarity index 100%
rename from src/main/java/freemarker/core/XSTemplateDateFormatFactory.java
rename to freemarker-core/src/main/java/freemarker/core/XSTemplateDateFormatFactory.java
diff --git a/src/main/java/freemarker/core/_ArrayEnumeration.java b/freemarker-core/src/main/java/freemarker/core/_ArrayEnumeration.java
similarity index 100%
rename from src/main/java/freemarker/core/_ArrayEnumeration.java
rename to freemarker-core/src/main/java/freemarker/core/_ArrayEnumeration.java
diff --git a/src/main/java/freemarker/core/_ArrayIterator.java b/freemarker-core/src/main/java/freemarker/core/_ArrayIterator.java
similarity index 100%
rename from src/main/java/freemarker/core/_ArrayIterator.java
rename to freemarker-core/src/main/java/freemarker/core/_ArrayIterator.java
diff --git a/src/main/java/freemarker/core/_CoreAPI.java b/freemarker-core/src/main/java/freemarker/core/_CoreAPI.java
similarity index 100%
rename from src/main/java/freemarker/core/_CoreAPI.java
rename to freemarker-core/src/main/java/freemarker/core/_CoreAPI.java
diff --git a/src/main/java/freemarker/core/_CoreLocaleUtils.java b/freemarker-core/src/main/java/freemarker/core/_CoreLocaleUtils.java
similarity index 100%
rename from src/main/java/freemarker/core/_CoreLocaleUtils.java
rename to freemarker-core/src/main/java/freemarker/core/_CoreLocaleUtils.java
diff --git a/src/main/java/freemarker/core/_CoreStringUtils.java b/freemarker-core/src/main/java/freemarker/core/_CoreStringUtils.java
similarity index 100%
rename from src/main/java/freemarker/core/_CoreStringUtils.java
rename to freemarker-core/src/main/java/freemarker/core/_CoreStringUtils.java
diff --git a/src/main/java/freemarker/core/_DelayedAOrAn.java b/freemarker-core/src/main/java/freemarker/core/_DelayedAOrAn.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedAOrAn.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedAOrAn.java
diff --git a/src/main/java/freemarker/core/_DelayedConversionToString.java b/freemarker-core/src/main/java/freemarker/core/_DelayedConversionToString.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedConversionToString.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedConversionToString.java
diff --git a/src/main/java/freemarker/core/_DelayedFTLTypeDescription.java b/freemarker-core/src/main/java/freemarker/core/_DelayedFTLTypeDescription.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedFTLTypeDescription.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedFTLTypeDescription.java
diff --git a/src/main/java/freemarker/core/_DelayedGetCanonicalForm.java b/freemarker-core/src/main/java/freemarker/core/_DelayedGetCanonicalForm.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedGetCanonicalForm.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedGetCanonicalForm.java
diff --git a/src/main/java/freemarker/core/_DelayedGetMessage.java b/freemarker-core/src/main/java/freemarker/core/_DelayedGetMessage.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedGetMessage.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedGetMessage.java
diff --git a/src/main/java/freemarker/core/_DelayedGetMessageWithoutStackTop.java b/freemarker-core/src/main/java/freemarker/core/_DelayedGetMessageWithoutStackTop.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedGetMessageWithoutStackTop.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedGetMessageWithoutStackTop.java
diff --git a/src/main/java/freemarker/core/_DelayedJQuote.java b/freemarker-core/src/main/java/freemarker/core/_DelayedJQuote.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedJQuote.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedJQuote.java
diff --git a/src/main/java/freemarker/core/_DelayedJoinWithComma.java b/freemarker-core/src/main/java/freemarker/core/_DelayedJoinWithComma.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedJoinWithComma.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedJoinWithComma.java
diff --git a/src/main/java/freemarker/core/_DelayedOrdinal.java b/freemarker-core/src/main/java/freemarker/core/_DelayedOrdinal.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedOrdinal.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedOrdinal.java
diff --git a/src/main/java/freemarker/core/_DelayedShortClassName.java b/freemarker-core/src/main/java/freemarker/core/_DelayedShortClassName.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedShortClassName.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedShortClassName.java
diff --git a/src/main/java/freemarker/core/_DelayedToString.java b/freemarker-core/src/main/java/freemarker/core/_DelayedToString.java
similarity index 100%
rename from src/main/java/freemarker/core/_DelayedToString.java
rename to freemarker-core/src/main/java/freemarker/core/_DelayedToString.java
diff --git a/src/main/java/freemarker/core/_ErrorDescriptionBuilder.java b/freemarker-core/src/main/java/freemarker/core/_ErrorDescriptionBuilder.java
similarity index 100%
rename from src/main/java/freemarker/core/_ErrorDescriptionBuilder.java
rename to freemarker-core/src/main/java/freemarker/core/_ErrorDescriptionBuilder.java
diff --git a/src/main/java/freemarker/core/_Java16.java b/freemarker-core/src/main/java/freemarker/core/_Java16.java
similarity index 100%
rename from src/main/java/freemarker/core/_Java16.java
rename to freemarker-core/src/main/java/freemarker/core/_Java16.java
diff --git a/src/main/java/freemarker/core/_JavaVersions.java b/freemarker-core/src/main/java/freemarker/core/_JavaVersions.java
similarity index 100%
rename from src/main/java/freemarker/core/_JavaVersions.java
rename to freemarker-core/src/main/java/freemarker/core/_JavaVersions.java
diff --git a/src/main/java/freemarker/core/_MarkupBuilder.java b/freemarker-core/src/main/java/freemarker/core/_MarkupBuilder.java
similarity index 100%
rename from src/main/java/freemarker/core/_MarkupBuilder.java
rename to freemarker-core/src/main/java/freemarker/core/_MarkupBuilder.java
diff --git a/src/main/java/freemarker/core/_MessageUtil.java b/freemarker-core/src/main/java/freemarker/core/_MessageUtil.java
similarity index 100%
rename from src/main/java/freemarker/core/_MessageUtil.java
rename to freemarker-core/src/main/java/freemarker/core/_MessageUtil.java
diff --git a/src/main/java/freemarker/core/_MiscTemplateException.java b/freemarker-core/src/main/java/freemarker/core/_MiscTemplateException.java
similarity index 100%
rename from src/main/java/freemarker/core/_MiscTemplateException.java
rename to freemarker-core/src/main/java/freemarker/core/_MiscTemplateException.java
diff --git a/src/main/java/freemarker/core/_ObjectBuilderSettingEvaluationException.java b/freemarker-core/src/main/java/freemarker/core/_ObjectBuilderSettingEvaluationException.java
similarity index 100%
rename from src/main/java/freemarker/core/_ObjectBuilderSettingEvaluationException.java
rename to freemarker-core/src/main/java/freemarker/core/_ObjectBuilderSettingEvaluationException.java
diff --git a/src/main/java/freemarker/core/_ObjectBuilderSettingEvaluator.java b/freemarker-core/src/main/java/freemarker/core/_ObjectBuilderSettingEvaluator.java
similarity index 100%
rename from src/main/java/freemarker/core/_ObjectBuilderSettingEvaluator.java
rename to freemarker-core/src/main/java/freemarker/core/_ObjectBuilderSettingEvaluator.java
diff --git a/src/main/java/freemarker/core/_ParserConfigurationWithInheritedFormat.java b/freemarker-core/src/main/java/freemarker/core/_ParserConfigurationWithInheritedFormat.java
similarity index 100%
rename from src/main/java/freemarker/core/_ParserConfigurationWithInheritedFormat.java
rename to freemarker-core/src/main/java/freemarker/core/_ParserConfigurationWithInheritedFormat.java
diff --git a/src/main/java/freemarker/core/_SettingEvaluationEnvironment.java b/freemarker-core/src/main/java/freemarker/core/_SettingEvaluationEnvironment.java
similarity index 100%
rename from src/main/java/freemarker/core/_SettingEvaluationEnvironment.java
rename to freemarker-core/src/main/java/freemarker/core/_SettingEvaluationEnvironment.java
diff --git a/src/main/java/freemarker/core/_SortedArraySet.java b/freemarker-core/src/main/java/freemarker/core/_SortedArraySet.java
similarity index 100%
rename from src/main/java/freemarker/core/_SortedArraySet.java
rename to freemarker-core/src/main/java/freemarker/core/_SortedArraySet.java
diff --git a/src/main/java/freemarker/core/_TemplateModelException.java b/freemarker-core/src/main/java/freemarker/core/_TemplateModelException.java
similarity index 100%
rename from src/main/java/freemarker/core/_TemplateModelException.java
rename to freemarker-core/src/main/java/freemarker/core/_TemplateModelException.java
diff --git a/src/main/java/freemarker/core/_TimeZoneBuilder.java b/freemarker-core/src/main/java/freemarker/core/_TimeZoneBuilder.java
similarity index 100%
rename from src/main/java/freemarker/core/_TimeZoneBuilder.java
rename to freemarker-core/src/main/java/freemarker/core/_TimeZoneBuilder.java
diff --git a/src/main/java/freemarker/core/_UnexpectedTypeErrorExplainerTemplateModel.java b/freemarker-core/src/main/java/freemarker/core/_UnexpectedTypeErrorExplainerTemplateModel.java
similarity index 100%
rename from src/main/java/freemarker/core/_UnexpectedTypeErrorExplainerTemplateModel.java
rename to freemarker-core/src/main/java/freemarker/core/_UnexpectedTypeErrorExplainerTemplateModel.java
diff --git a/src/main/java/freemarker/core/_UnmodifiableCompositeSet.java b/freemarker-core/src/main/java/freemarker/core/_UnmodifiableCompositeSet.java
similarity index 100%
rename from src/main/java/freemarker/core/_UnmodifiableCompositeSet.java
rename to freemarker-core/src/main/java/freemarker/core/_UnmodifiableCompositeSet.java
diff --git a/src/main/java/freemarker/core/_UnmodifiableSet.java b/freemarker-core/src/main/java/freemarker/core/_UnmodifiableSet.java
similarity index 100%
rename from src/main/java/freemarker/core/_UnmodifiableSet.java
rename to freemarker-core/src/main/java/freemarker/core/_UnmodifiableSet.java
diff --git a/src/main/java/freemarker/core/package.html b/freemarker-core/src/main/java/freemarker/core/package.html
similarity index 100%
rename from src/main/java/freemarker/core/package.html
rename to freemarker-core/src/main/java/freemarker/core/package.html
diff --git a/src/main/java/freemarker/debug/Breakpoint.java b/freemarker-core/src/main/java/freemarker/debug/Breakpoint.java
similarity index 100%
rename from src/main/java/freemarker/debug/Breakpoint.java
rename to freemarker-core/src/main/java/freemarker/debug/Breakpoint.java
diff --git a/src/main/java/freemarker/debug/DebugModel.java b/freemarker-core/src/main/java/freemarker/debug/DebugModel.java
similarity index 100%
rename from src/main/java/freemarker/debug/DebugModel.java
rename to freemarker-core/src/main/java/freemarker/debug/DebugModel.java
diff --git a/src/main/java/freemarker/debug/DebuggedEnvironment.java b/freemarker-core/src/main/java/freemarker/debug/DebuggedEnvironment.java
similarity index 100%
rename from src/main/java/freemarker/debug/DebuggedEnvironment.java
rename to freemarker-core/src/main/java/freemarker/debug/DebuggedEnvironment.java
diff --git a/src/main/java/freemarker/debug/Debugger.java b/freemarker-core/src/main/java/freemarker/debug/Debugger.java
similarity index 100%
rename from src/main/java/freemarker/debug/Debugger.java
rename to freemarker-core/src/main/java/freemarker/debug/Debugger.java
diff --git a/src/main/java/freemarker/debug/DebuggerClient.java b/freemarker-core/src/main/java/freemarker/debug/DebuggerClient.java
similarity index 100%
rename from src/main/java/freemarker/debug/DebuggerClient.java
rename to freemarker-core/src/main/java/freemarker/debug/DebuggerClient.java
diff --git a/src/main/java/freemarker/debug/DebuggerListener.java b/freemarker-core/src/main/java/freemarker/debug/DebuggerListener.java
similarity index 100%
rename from src/main/java/freemarker/debug/DebuggerListener.java
rename to freemarker-core/src/main/java/freemarker/debug/DebuggerListener.java
diff --git a/src/main/java/freemarker/debug/EnvironmentSuspendedEvent.java b/freemarker-core/src/main/java/freemarker/debug/EnvironmentSuspendedEvent.java
similarity index 100%
rename from src/main/java/freemarker/debug/EnvironmentSuspendedEvent.java
rename to freemarker-core/src/main/java/freemarker/debug/EnvironmentSuspendedEvent.java
diff --git a/src/main/java/freemarker/debug/impl/DebuggerServer.java b/freemarker-core/src/main/java/freemarker/debug/impl/DebuggerServer.java
similarity index 100%
rename from src/main/java/freemarker/debug/impl/DebuggerServer.java
rename to freemarker-core/src/main/java/freemarker/debug/impl/DebuggerServer.java
diff --git a/src/main/java/freemarker/debug/impl/DebuggerService.java b/freemarker-core/src/main/java/freemarker/debug/impl/DebuggerService.java
similarity index 100%
rename from src/main/java/freemarker/debug/impl/DebuggerService.java
rename to freemarker-core/src/main/java/freemarker/debug/impl/DebuggerService.java
diff --git a/src/main/java/freemarker/debug/impl/RmiDebugModelImpl.java b/freemarker-core/src/main/java/freemarker/debug/impl/RmiDebugModelImpl.java
similarity index 100%
rename from src/main/java/freemarker/debug/impl/RmiDebugModelImpl.java
rename to freemarker-core/src/main/java/freemarker/debug/impl/RmiDebugModelImpl.java
diff --git a/src/main/java/freemarker/debug/impl/RmiDebuggedEnvironmentImpl.java b/freemarker-core/src/main/java/freemarker/debug/impl/RmiDebuggedEnvironmentImpl.java
similarity index 100%
rename from src/main/java/freemarker/debug/impl/RmiDebuggedEnvironmentImpl.java
rename to freemarker-core/src/main/java/freemarker/debug/impl/RmiDebuggedEnvironmentImpl.java
diff --git a/src/main/java/freemarker/debug/impl/RmiDebuggerImpl.java b/freemarker-core/src/main/java/freemarker/debug/impl/RmiDebuggerImpl.java
similarity index 100%
rename from src/main/java/freemarker/debug/impl/RmiDebuggerImpl.java
rename to freemarker-core/src/main/java/freemarker/debug/impl/RmiDebuggerImpl.java
diff --git a/src/main/java/freemarker/debug/impl/RmiDebuggerListenerImpl.java b/freemarker-core/src/main/java/freemarker/debug/impl/RmiDebuggerListenerImpl.java
similarity index 100%
rename from src/main/java/freemarker/debug/impl/RmiDebuggerListenerImpl.java
rename to freemarker-core/src/main/java/freemarker/debug/impl/RmiDebuggerListenerImpl.java
diff --git a/src/main/java/freemarker/debug/impl/RmiDebuggerService.java b/freemarker-core/src/main/java/freemarker/debug/impl/RmiDebuggerService.java
similarity index 100%
rename from src/main/java/freemarker/debug/impl/RmiDebuggerService.java
rename to freemarker-core/src/main/java/freemarker/debug/impl/RmiDebuggerService.java
diff --git a/src/main/java/freemarker/debug/package.html b/freemarker-core/src/main/java/freemarker/debug/package.html
similarity index 100%
rename from src/main/java/freemarker/debug/package.html
rename to freemarker-core/src/main/java/freemarker/debug/package.html
diff --git a/src/main/java/freemarker/ext/beans/APIModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/APIModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/APIModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/APIModel.java
diff --git a/src/main/java/freemarker/ext/beans/AllowAllMemberAccessPolicy.java b/freemarker-core/src/main/java/freemarker/ext/beans/AllowAllMemberAccessPolicy.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/AllowAllMemberAccessPolicy.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/AllowAllMemberAccessPolicy.java
diff --git a/src/main/java/freemarker/ext/beans/ArgumentTypes.java b/freemarker-core/src/main/java/freemarker/ext/beans/ArgumentTypes.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ArgumentTypes.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ArgumentTypes.java
diff --git a/src/main/java/freemarker/ext/beans/ArrayModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/ArrayModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ArrayModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ArrayModel.java
diff --git a/src/main/java/freemarker/ext/beans/BeanModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/BeanModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/BeanModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/BeanModel.java
diff --git a/src/main/java/freemarker/ext/beans/BeansModelCache.java b/freemarker-core/src/main/java/freemarker/ext/beans/BeansModelCache.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/BeansModelCache.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/BeansModelCache.java
diff --git a/src/main/java/freemarker/ext/beans/BeansWrapper.java b/freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapper.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/BeansWrapper.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapper.java
diff --git a/src/main/java/freemarker/ext/beans/BeansWrapperBuilder.java b/freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapperBuilder.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/BeansWrapperBuilder.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapperBuilder.java
diff --git a/src/main/java/freemarker/ext/beans/BeansWrapperConfiguration.java b/freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapperConfiguration.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/BeansWrapperConfiguration.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapperConfiguration.java
diff --git a/src/main/java/freemarker/ext/beans/BeansWrapperSingletonHolder.java b/freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapperSingletonHolder.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/BeansWrapperSingletonHolder.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/BeansWrapperSingletonHolder.java
diff --git a/src/main/java/freemarker/ext/beans/BlacklistMemberAccessPolicy.java b/freemarker-core/src/main/java/freemarker/ext/beans/BlacklistMemberAccessPolicy.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/BlacklistMemberAccessPolicy.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/BlacklistMemberAccessPolicy.java
diff --git a/src/main/java/freemarker/ext/beans/BooleanModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/BooleanModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/BooleanModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/BooleanModel.java
diff --git a/src/main/java/freemarker/ext/beans/CallableMemberDescriptor.java b/freemarker-core/src/main/java/freemarker/ext/beans/CallableMemberDescriptor.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/CallableMemberDescriptor.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/CallableMemberDescriptor.java
diff --git a/src/main/java/freemarker/ext/beans/CharacterOrString.java b/freemarker-core/src/main/java/freemarker/ext/beans/CharacterOrString.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/CharacterOrString.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/CharacterOrString.java
diff --git a/src/main/java/freemarker/ext/beans/ClassBasedModelFactory.java b/freemarker-core/src/main/java/freemarker/ext/beans/ClassBasedModelFactory.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ClassBasedModelFactory.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ClassBasedModelFactory.java
diff --git a/src/main/java/freemarker/ext/beans/ClassChangeNotifier.java b/freemarker-core/src/main/java/freemarker/ext/beans/ClassChangeNotifier.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ClassChangeNotifier.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ClassChangeNotifier.java
diff --git a/src/main/java/freemarker/ext/beans/ClassIntrospector.java b/freemarker-core/src/main/java/freemarker/ext/beans/ClassIntrospector.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ClassIntrospector.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ClassIntrospector.java
diff --git a/src/main/java/freemarker/ext/beans/ClassIntrospectorBuilder.java b/freemarker-core/src/main/java/freemarker/ext/beans/ClassIntrospectorBuilder.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ClassIntrospectorBuilder.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ClassIntrospectorBuilder.java
diff --git a/src/main/java/freemarker/ext/beans/ClassMemberAccessPolicy.java b/freemarker-core/src/main/java/freemarker/ext/beans/ClassMemberAccessPolicy.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ClassMemberAccessPolicy.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ClassMemberAccessPolicy.java
diff --git a/src/main/java/freemarker/ext/beans/CollectionAdapter.java b/freemarker-core/src/main/java/freemarker/ext/beans/CollectionAdapter.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/CollectionAdapter.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/CollectionAdapter.java
diff --git a/src/main/java/freemarker/ext/beans/CollectionModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/CollectionModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/CollectionModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/CollectionModel.java
diff --git a/src/main/java/freemarker/ext/beans/ConstructorMatcher.java b/freemarker-core/src/main/java/freemarker/ext/beans/ConstructorMatcher.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ConstructorMatcher.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ConstructorMatcher.java
diff --git a/src/main/java/freemarker/ext/beans/DateModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/DateModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/DateModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/DateModel.java
diff --git a/src/main/java/freemarker/ext/beans/DefaultMemberAccessPolicy.java b/freemarker-core/src/main/java/freemarker/ext/beans/DefaultMemberAccessPolicy.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/DefaultMemberAccessPolicy.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/DefaultMemberAccessPolicy.java
diff --git a/src/main/java/freemarker/ext/beans/EmptyCallableMemberDescriptor.java b/freemarker-core/src/main/java/freemarker/ext/beans/EmptyCallableMemberDescriptor.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/EmptyCallableMemberDescriptor.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/EmptyCallableMemberDescriptor.java
diff --git a/src/main/java/freemarker/ext/beans/EmptyMemberAndArguments.java b/freemarker-core/src/main/java/freemarker/ext/beans/EmptyMemberAndArguments.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/EmptyMemberAndArguments.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/EmptyMemberAndArguments.java
diff --git a/src/main/java/freemarker/ext/beans/EnumerationModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/EnumerationModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/EnumerationModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/EnumerationModel.java
diff --git a/src/main/java/freemarker/ext/beans/ExecutableMemberSignature.java b/freemarker-core/src/main/java/freemarker/ext/beans/ExecutableMemberSignature.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ExecutableMemberSignature.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ExecutableMemberSignature.java
diff --git a/src/main/java/freemarker/ext/beans/FastPropertyDescriptor.java b/freemarker-core/src/main/java/freemarker/ext/beans/FastPropertyDescriptor.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/FastPropertyDescriptor.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/FastPropertyDescriptor.java
diff --git a/src/main/java/freemarker/ext/beans/FieldMatcher.java b/freemarker-core/src/main/java/freemarker/ext/beans/FieldMatcher.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/FieldMatcher.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/FieldMatcher.java
diff --git a/src/main/java/freemarker/ext/beans/HashAdapter.java b/freemarker-core/src/main/java/freemarker/ext/beans/HashAdapter.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/HashAdapter.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/HashAdapter.java
diff --git a/src/main/java/freemarker/ext/beans/InvalidPropertyException.java b/freemarker-core/src/main/java/freemarker/ext/beans/InvalidPropertyException.java
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/java/freemarker/ext/beans/InvalidPropertyException.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/InvalidPropertyException.java
diff --git a/src/main/java/freemarker/ext/beans/IteratorModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/IteratorModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/IteratorModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/IteratorModel.java
diff --git a/src/main/java/freemarker/ext/beans/JRebelClassChangeNotifier.java b/freemarker-core/src/main/java/freemarker/ext/beans/JRebelClassChangeNotifier.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/JRebelClassChangeNotifier.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/JRebelClassChangeNotifier.java
diff --git a/src/main/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicy.java b/freemarker-core/src/main/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicy.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicy.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicy.java
diff --git a/src/main/java/freemarker/ext/beans/MapModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/MapModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/MapModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/MapModel.java
diff --git a/src/main/java/freemarker/ext/beans/MaybeEmptyCallableMemberDescriptor.java b/freemarker-core/src/main/java/freemarker/ext/beans/MaybeEmptyCallableMemberDescriptor.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/MaybeEmptyCallableMemberDescriptor.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/MaybeEmptyCallableMemberDescriptor.java
diff --git a/src/main/java/freemarker/ext/beans/MaybeEmptyMemberAndArguments.java b/freemarker-core/src/main/java/freemarker/ext/beans/MaybeEmptyMemberAndArguments.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/MaybeEmptyMemberAndArguments.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/MaybeEmptyMemberAndArguments.java
diff --git a/src/main/java/freemarker/ext/beans/MemberAccessPolicy.java b/freemarker-core/src/main/java/freemarker/ext/beans/MemberAccessPolicy.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/MemberAccessPolicy.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/MemberAccessPolicy.java
diff --git a/src/main/java/freemarker/ext/beans/MemberAndArguments.java b/freemarker-core/src/main/java/freemarker/ext/beans/MemberAndArguments.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/MemberAndArguments.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/MemberAndArguments.java
diff --git a/src/main/java/freemarker/ext/beans/MemberMatcher.java b/freemarker-core/src/main/java/freemarker/ext/beans/MemberMatcher.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/MemberMatcher.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/MemberMatcher.java
diff --git a/src/main/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicy.java b/freemarker-core/src/main/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicy.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicy.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicy.java
diff --git a/src/main/java/freemarker/ext/beans/MethodAppearanceFineTuner.java b/freemarker-core/src/main/java/freemarker/ext/beans/MethodAppearanceFineTuner.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/MethodAppearanceFineTuner.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/MethodAppearanceFineTuner.java
diff --git a/src/main/java/freemarker/ext/beans/MethodMatcher.java b/freemarker-core/src/main/java/freemarker/ext/beans/MethodMatcher.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/MethodMatcher.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/MethodMatcher.java
diff --git a/src/main/java/freemarker/ext/beans/MethodSorter.java b/freemarker-core/src/main/java/freemarker/ext/beans/MethodSorter.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/MethodSorter.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/MethodSorter.java
diff --git a/src/main/java/freemarker/ext/beans/NonPrimitiveArrayBackedReadOnlyList.java b/freemarker-core/src/main/java/freemarker/ext/beans/NonPrimitiveArrayBackedReadOnlyList.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/NonPrimitiveArrayBackedReadOnlyList.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/NonPrimitiveArrayBackedReadOnlyList.java
diff --git a/src/main/java/freemarker/ext/beans/NumberModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/NumberModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/NumberModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/NumberModel.java
diff --git a/src/main/java/freemarker/ext/beans/OverloadedFixArgsMethods.java b/freemarker-core/src/main/java/freemarker/ext/beans/OverloadedFixArgsMethods.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/OverloadedFixArgsMethods.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/OverloadedFixArgsMethods.java
diff --git a/src/main/java/freemarker/ext/beans/OverloadedMethods.java b/freemarker-core/src/main/java/freemarker/ext/beans/OverloadedMethods.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/OverloadedMethods.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/OverloadedMethods.java
diff --git a/src/main/java/freemarker/ext/beans/OverloadedMethodsModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/OverloadedMethodsModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/OverloadedMethodsModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/OverloadedMethodsModel.java
diff --git a/src/main/java/freemarker/ext/beans/OverloadedMethodsSubset.java b/freemarker-core/src/main/java/freemarker/ext/beans/OverloadedMethodsSubset.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/OverloadedMethodsSubset.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/OverloadedMethodsSubset.java
diff --git a/src/main/java/freemarker/ext/beans/OverloadedNumberUtil.java b/freemarker-core/src/main/java/freemarker/ext/beans/OverloadedNumberUtil.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/OverloadedNumberUtil.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/OverloadedNumberUtil.java
diff --git a/src/main/java/freemarker/ext/beans/OverloadedVarArgsMethods.java b/freemarker-core/src/main/java/freemarker/ext/beans/OverloadedVarArgsMethods.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/OverloadedVarArgsMethods.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/OverloadedVarArgsMethods.java
diff --git a/src/main/java/freemarker/ext/beans/PrimtiveArrayBackedReadOnlyList.java b/freemarker-core/src/main/java/freemarker/ext/beans/PrimtiveArrayBackedReadOnlyList.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/PrimtiveArrayBackedReadOnlyList.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/PrimtiveArrayBackedReadOnlyList.java
diff --git a/src/main/java/freemarker/ext/beans/ReflectionCallableMemberDescriptor.java b/freemarker-core/src/main/java/freemarker/ext/beans/ReflectionCallableMemberDescriptor.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ReflectionCallableMemberDescriptor.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ReflectionCallableMemberDescriptor.java
diff --git a/src/main/java/freemarker/ext/beans/ResourceBundleModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/ResourceBundleModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/ResourceBundleModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/ResourceBundleModel.java
diff --git a/src/main/java/freemarker/ext/beans/SequenceAdapter.java b/freemarker-core/src/main/java/freemarker/ext/beans/SequenceAdapter.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/SequenceAdapter.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/SequenceAdapter.java
diff --git a/src/main/java/freemarker/ext/beans/SetAdapter.java b/freemarker-core/src/main/java/freemarker/ext/beans/SetAdapter.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/SetAdapter.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/SetAdapter.java
diff --git a/src/main/java/freemarker/ext/beans/SimpleMapModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/SimpleMapModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/SimpleMapModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/SimpleMapModel.java
diff --git a/src/main/java/freemarker/ext/beans/SimpleMethod.java b/freemarker-core/src/main/java/freemarker/ext/beans/SimpleMethod.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/SimpleMethod.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/SimpleMethod.java
diff --git a/src/main/java/freemarker/ext/beans/SimpleMethodModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/SimpleMethodModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/SimpleMethodModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/SimpleMethodModel.java
diff --git a/src/main/java/freemarker/ext/beans/SingletonCustomizer.java b/freemarker-core/src/main/java/freemarker/ext/beans/SingletonCustomizer.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/SingletonCustomizer.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/SingletonCustomizer.java
diff --git a/src/main/java/freemarker/ext/beans/StaticModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/StaticModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/StaticModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/StaticModel.java
diff --git a/src/main/java/freemarker/ext/beans/StaticModels.java b/freemarker-core/src/main/java/freemarker/ext/beans/StaticModels.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/StaticModels.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/StaticModels.java
diff --git a/src/main/java/freemarker/ext/beans/StringModel.java b/freemarker-core/src/main/java/freemarker/ext/beans/StringModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/StringModel.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/StringModel.java
diff --git a/src/main/java/freemarker/ext/beans/TemplateAccessible.java b/freemarker-core/src/main/java/freemarker/ext/beans/TemplateAccessible.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/TemplateAccessible.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/TemplateAccessible.java
diff --git a/src/main/java/freemarker/ext/beans/TypeFlags.java b/freemarker-core/src/main/java/freemarker/ext/beans/TypeFlags.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/TypeFlags.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/TypeFlags.java
diff --git a/src/main/java/freemarker/ext/beans/WhitelistMemberAccessPolicy.java b/freemarker-core/src/main/java/freemarker/ext/beans/WhitelistMemberAccessPolicy.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/WhitelistMemberAccessPolicy.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/WhitelistMemberAccessPolicy.java
diff --git a/src/main/java/freemarker/ext/beans/_BeansAPI.java b/freemarker-core/src/main/java/freemarker/ext/beans/_BeansAPI.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/_BeansAPI.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/_BeansAPI.java
diff --git a/src/main/java/freemarker/ext/beans/_EnumModels.java b/freemarker-core/src/main/java/freemarker/ext/beans/_EnumModels.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/_EnumModels.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/_EnumModels.java
diff --git a/src/main/java/freemarker/ext/beans/_MethodUtil.java b/freemarker-core/src/main/java/freemarker/ext/beans/_MethodUtil.java
similarity index 100%
rename from src/main/java/freemarker/ext/beans/_MethodUtil.java
rename to freemarker-core/src/main/java/freemarker/ext/beans/_MethodUtil.java
diff --git a/src/main/java/freemarker/ext/beans/package.html b/freemarker-core/src/main/java/freemarker/ext/beans/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/beans/package.html
rename to freemarker-core/src/main/java/freemarker/ext/beans/package.html
diff --git a/src/main/java/freemarker/ext/dom/AtAtKey.java b/freemarker-core/src/main/java/freemarker/ext/dom/AtAtKey.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/AtAtKey.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/AtAtKey.java
diff --git a/src/main/java/freemarker/ext/dom/AttributeNodeModel.java b/freemarker-core/src/main/java/freemarker/ext/dom/AttributeNodeModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/AttributeNodeModel.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/AttributeNodeModel.java
diff --git a/src/main/java/freemarker/ext/dom/CharacterDataNodeModel.java b/freemarker-core/src/main/java/freemarker/ext/dom/CharacterDataNodeModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/CharacterDataNodeModel.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/CharacterDataNodeModel.java
diff --git a/src/main/java/freemarker/ext/dom/DocumentModel.java b/freemarker-core/src/main/java/freemarker/ext/dom/DocumentModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/DocumentModel.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/DocumentModel.java
diff --git a/src/main/java/freemarker/ext/dom/DocumentTypeModel.java b/freemarker-core/src/main/java/freemarker/ext/dom/DocumentTypeModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/DocumentTypeModel.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/DocumentTypeModel.java
diff --git a/src/main/java/freemarker/ext/dom/DomStringUtil.java b/freemarker-core/src/main/java/freemarker/ext/dom/DomStringUtil.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/DomStringUtil.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/DomStringUtil.java
diff --git a/src/main/java/freemarker/ext/dom/ElementModel.java b/freemarker-core/src/main/java/freemarker/ext/dom/ElementModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/ElementModel.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/ElementModel.java
diff --git a/src/main/java/freemarker/ext/dom/JaxenXPathSupport.java b/freemarker-core/src/main/java/freemarker/ext/dom/JaxenXPathSupport.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/JaxenXPathSupport.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/JaxenXPathSupport.java
diff --git a/src/main/java/freemarker/ext/dom/NodeListModel.java b/freemarker-core/src/main/java/freemarker/ext/dom/NodeListModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/NodeListModel.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/NodeListModel.java
diff --git a/src/main/java/freemarker/ext/dom/NodeModel.java b/freemarker-core/src/main/java/freemarker/ext/dom/NodeModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/NodeModel.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/NodeModel.java
diff --git a/src/main/java/freemarker/ext/dom/NodeOutputter.java b/freemarker-core/src/main/java/freemarker/ext/dom/NodeOutputter.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/NodeOutputter.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/NodeOutputter.java
diff --git a/src/main/java/freemarker/ext/dom/PINodeModel.java b/freemarker-core/src/main/java/freemarker/ext/dom/PINodeModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/PINodeModel.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/PINodeModel.java
diff --git a/src/main/java/freemarker/ext/dom/SunInternalXalanXPathSupport.java b/freemarker-core/src/main/java/freemarker/ext/dom/SunInternalXalanXPathSupport.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/SunInternalXalanXPathSupport.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/SunInternalXalanXPathSupport.java
diff --git a/src/main/java/freemarker/ext/dom/Transform.java b/freemarker-core/src/main/java/freemarker/ext/dom/Transform.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/Transform.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/Transform.java
diff --git a/src/main/java/freemarker/ext/dom/XPathSupport.java b/freemarker-core/src/main/java/freemarker/ext/dom/XPathSupport.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/XPathSupport.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/XPathSupport.java
diff --git a/src/main/java/freemarker/ext/dom/XalanXPathSupport.java b/freemarker-core/src/main/java/freemarker/ext/dom/XalanXPathSupport.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/XalanXPathSupport.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/XalanXPathSupport.java
diff --git a/src/main/java/freemarker/ext/dom/_ExtDomApi.java b/freemarker-core/src/main/java/freemarker/ext/dom/_ExtDomApi.java
similarity index 100%
rename from src/main/java/freemarker/ext/dom/_ExtDomApi.java
rename to freemarker-core/src/main/java/freemarker/ext/dom/_ExtDomApi.java
diff --git a/src/main/java/freemarker/ext/dom/package.html b/freemarker-core/src/main/java/freemarker/ext/dom/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/dom/package.html
rename to freemarker-core/src/main/java/freemarker/ext/dom/package.html
diff --git a/src/main/java/freemarker/ext/jdom/NodeListModel.java b/freemarker-core/src/main/java/freemarker/ext/jdom/NodeListModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/jdom/NodeListModel.java
rename to freemarker-core/src/main/java/freemarker/ext/jdom/NodeListModel.java
diff --git a/src/main/java/freemarker/ext/jdom/package.html b/freemarker-core/src/main/java/freemarker/ext/jdom/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/jdom/package.html
rename to freemarker-core/src/main/java/freemarker/ext/jdom/package.html
diff --git a/src/main/java/freemarker/ext/package.html b/freemarker-core/src/main/java/freemarker/ext/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/package.html
rename to freemarker-core/src/main/java/freemarker/ext/package.html
diff --git a/src/main/java/freemarker/ext/rhino/RhinoFunctionModel.java b/freemarker-core/src/main/java/freemarker/ext/rhino/RhinoFunctionModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/rhino/RhinoFunctionModel.java
rename to freemarker-core/src/main/java/freemarker/ext/rhino/RhinoFunctionModel.java
diff --git a/src/main/java/freemarker/ext/rhino/RhinoScriptableModel.java b/freemarker-core/src/main/java/freemarker/ext/rhino/RhinoScriptableModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/rhino/RhinoScriptableModel.java
rename to freemarker-core/src/main/java/freemarker/ext/rhino/RhinoScriptableModel.java
diff --git a/src/main/java/freemarker/ext/rhino/RhinoWrapper.java b/freemarker-core/src/main/java/freemarker/ext/rhino/RhinoWrapper.java
similarity index 100%
rename from src/main/java/freemarker/ext/rhino/RhinoWrapper.java
rename to freemarker-core/src/main/java/freemarker/ext/rhino/RhinoWrapper.java
diff --git a/src/main/java/freemarker/ext/rhino/package.html b/freemarker-core/src/main/java/freemarker/ext/rhino/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/rhino/package.html
rename to freemarker-core/src/main/java/freemarker/ext/rhino/package.html
diff --git a/src/main/java/freemarker/ext/util/IdentityHashMap.java b/freemarker-core/src/main/java/freemarker/ext/util/IdentityHashMap.java
similarity index 100%
rename from src/main/java/freemarker/ext/util/IdentityHashMap.java
rename to freemarker-core/src/main/java/freemarker/ext/util/IdentityHashMap.java
diff --git a/src/main/java/freemarker/ext/util/ModelCache.java b/freemarker-core/src/main/java/freemarker/ext/util/ModelCache.java
similarity index 100%
rename from src/main/java/freemarker/ext/util/ModelCache.java
rename to freemarker-core/src/main/java/freemarker/ext/util/ModelCache.java
diff --git a/src/main/java/freemarker/ext/util/ModelFactory.java b/freemarker-core/src/main/java/freemarker/ext/util/ModelFactory.java
similarity index 100%
rename from src/main/java/freemarker/ext/util/ModelFactory.java
rename to freemarker-core/src/main/java/freemarker/ext/util/ModelFactory.java
diff --git a/src/main/java/freemarker/ext/util/WrapperTemplateModel.java b/freemarker-core/src/main/java/freemarker/ext/util/WrapperTemplateModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/util/WrapperTemplateModel.java
rename to freemarker-core/src/main/java/freemarker/ext/util/WrapperTemplateModel.java
diff --git a/src/main/java/freemarker/ext/util/package.html b/freemarker-core/src/main/java/freemarker/ext/util/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/util/package.html
rename to freemarker-core/src/main/java/freemarker/ext/util/package.html
diff --git a/src/main/java/freemarker/ext/xml/Namespaces.java b/freemarker-core/src/main/java/freemarker/ext/xml/Namespaces.java
similarity index 100%
rename from src/main/java/freemarker/ext/xml/Namespaces.java
rename to freemarker-core/src/main/java/freemarker/ext/xml/Namespaces.java
diff --git a/src/main/java/freemarker/ext/xml/Navigator.java b/freemarker-core/src/main/java/freemarker/ext/xml/Navigator.java
similarity index 100%
rename from src/main/java/freemarker/ext/xml/Navigator.java
rename to freemarker-core/src/main/java/freemarker/ext/xml/Navigator.java
diff --git a/src/main/java/freemarker/ext/xml/NodeListModel.java b/freemarker-core/src/main/java/freemarker/ext/xml/NodeListModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/xml/NodeListModel.java
rename to freemarker-core/src/main/java/freemarker/ext/xml/NodeListModel.java
diff --git a/src/main/java/freemarker/ext/xml/NodeOperator.java b/freemarker-core/src/main/java/freemarker/ext/xml/NodeOperator.java
similarity index 100%
rename from src/main/java/freemarker/ext/xml/NodeOperator.java
rename to freemarker-core/src/main/java/freemarker/ext/xml/NodeOperator.java
diff --git a/src/main/java/freemarker/ext/xml/_Dom4jNavigator.java b/freemarker-core/src/main/java/freemarker/ext/xml/_Dom4jNavigator.java
similarity index 100%
rename from src/main/java/freemarker/ext/xml/_Dom4jNavigator.java
rename to freemarker-core/src/main/java/freemarker/ext/xml/_Dom4jNavigator.java
diff --git a/src/main/java/freemarker/ext/xml/_DomNavigator.java b/freemarker-core/src/main/java/freemarker/ext/xml/_DomNavigator.java
similarity index 100%
rename from src/main/java/freemarker/ext/xml/_DomNavigator.java
rename to freemarker-core/src/main/java/freemarker/ext/xml/_DomNavigator.java
diff --git a/src/main/java/freemarker/ext/xml/_JaxenNamespaces.java b/freemarker-core/src/main/java/freemarker/ext/xml/_JaxenNamespaces.java
similarity index 100%
rename from src/main/java/freemarker/ext/xml/_JaxenNamespaces.java
rename to freemarker-core/src/main/java/freemarker/ext/xml/_JaxenNamespaces.java
diff --git a/src/main/java/freemarker/ext/xml/_JdomNavigator.java b/freemarker-core/src/main/java/freemarker/ext/xml/_JdomNavigator.java
similarity index 100%
rename from src/main/java/freemarker/ext/xml/_JdomNavigator.java
rename to freemarker-core/src/main/java/freemarker/ext/xml/_JdomNavigator.java
diff --git a/src/main/java/freemarker/ext/xml/package.html b/freemarker-core/src/main/java/freemarker/ext/xml/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/xml/package.html
rename to freemarker-core/src/main/java/freemarker/ext/xml/package.html
diff --git a/src/main/java/freemarker/log/CommonsLoggingLoggerFactory.java b/freemarker-core/src/main/java/freemarker/log/CommonsLoggingLoggerFactory.java
similarity index 100%
rename from src/main/java/freemarker/log/CommonsLoggingLoggerFactory.java
rename to freemarker-core/src/main/java/freemarker/log/CommonsLoggingLoggerFactory.java
diff --git a/src/main/java/freemarker/log/Logger.java b/freemarker-core/src/main/java/freemarker/log/Logger.java
similarity index 100%
rename from src/main/java/freemarker/log/Logger.java
rename to freemarker-core/src/main/java/freemarker/log/Logger.java
diff --git a/src/main/java/freemarker/log/LoggerFactory.java b/freemarker-core/src/main/java/freemarker/log/LoggerFactory.java
similarity index 100%
rename from src/main/java/freemarker/log/LoggerFactory.java
rename to freemarker-core/src/main/java/freemarker/log/LoggerFactory.java
diff --git a/src/main/java/freemarker/log/SLF4JLoggerFactory.java b/freemarker-core/src/main/java/freemarker/log/SLF4JLoggerFactory.java
similarity index 100%
rename from src/main/java/freemarker/log/SLF4JLoggerFactory.java
rename to freemarker-core/src/main/java/freemarker/log/SLF4JLoggerFactory.java
diff --git a/src/main/java/freemarker/log/_AvalonLoggerFactory.java b/freemarker-core/src/main/java/freemarker/log/_AvalonLoggerFactory.java
similarity index 100%
rename from src/main/java/freemarker/log/_AvalonLoggerFactory.java
rename to freemarker-core/src/main/java/freemarker/log/_AvalonLoggerFactory.java
diff --git a/src/main/java/freemarker/log/_CommonsLoggingLoggerFactory.java b/freemarker-core/src/main/java/freemarker/log/_CommonsLoggingLoggerFactory.java
similarity index 100%
rename from src/main/java/freemarker/log/_CommonsLoggingLoggerFactory.java
rename to freemarker-core/src/main/java/freemarker/log/_CommonsLoggingLoggerFactory.java
diff --git a/src/main/java/freemarker/log/_JULLoggerFactory.java b/freemarker-core/src/main/java/freemarker/log/_JULLoggerFactory.java
similarity index 100%
rename from src/main/java/freemarker/log/_JULLoggerFactory.java
rename to freemarker-core/src/main/java/freemarker/log/_JULLoggerFactory.java
diff --git a/src/main/java/freemarker/log/_Log4jLoggerFactory.java b/freemarker-core/src/main/java/freemarker/log/_Log4jLoggerFactory.java
similarity index 100%
rename from src/main/java/freemarker/log/_Log4jLoggerFactory.java
rename to freemarker-core/src/main/java/freemarker/log/_Log4jLoggerFactory.java
diff --git a/src/main/java/freemarker/log/_Log4jOverSLF4JTester.java b/freemarker-core/src/main/java/freemarker/log/_Log4jOverSLF4JTester.java
similarity index 100%
rename from src/main/java/freemarker/log/_Log4jOverSLF4JTester.java
rename to freemarker-core/src/main/java/freemarker/log/_Log4jOverSLF4JTester.java
diff --git a/src/main/java/freemarker/log/_NullLoggerFactory.java b/freemarker-core/src/main/java/freemarker/log/_NullLoggerFactory.java
similarity index 100%
rename from src/main/java/freemarker/log/_NullLoggerFactory.java
rename to freemarker-core/src/main/java/freemarker/log/_NullLoggerFactory.java
diff --git a/src/main/java/freemarker/log/_SLF4JLoggerFactory.java b/freemarker-core/src/main/java/freemarker/log/_SLF4JLoggerFactory.java
similarity index 100%
rename from src/main/java/freemarker/log/_SLF4JLoggerFactory.java
rename to freemarker-core/src/main/java/freemarker/log/_SLF4JLoggerFactory.java
diff --git a/src/main/java/freemarker/log/package.html b/freemarker-core/src/main/java/freemarker/log/package.html
similarity index 100%
rename from src/main/java/freemarker/log/package.html
rename to freemarker-core/src/main/java/freemarker/log/package.html
diff --git a/src/main/java/freemarker/template/AdapterTemplateModel.java b/freemarker-core/src/main/java/freemarker/template/AdapterTemplateModel.java
similarity index 100%
rename from src/main/java/freemarker/template/AdapterTemplateModel.java
rename to freemarker-core/src/main/java/freemarker/template/AdapterTemplateModel.java
diff --git a/src/main/java/freemarker/template/AttemptExceptionReporter.java b/freemarker-core/src/main/java/freemarker/template/AttemptExceptionReporter.java
similarity index 100%
rename from src/main/java/freemarker/template/AttemptExceptionReporter.java
rename to freemarker-core/src/main/java/freemarker/template/AttemptExceptionReporter.java
diff --git a/src/main/java/freemarker/template/Configuration.java b/freemarker-core/src/main/java/freemarker/template/Configuration.java
similarity index 100%
rename from src/main/java/freemarker/template/Configuration.java
rename to freemarker-core/src/main/java/freemarker/template/Configuration.java
diff --git a/src/main/java/freemarker/template/DefaultArrayAdapter.java b/freemarker-core/src/main/java/freemarker/template/DefaultArrayAdapter.java
similarity index 100%
rename from src/main/java/freemarker/template/DefaultArrayAdapter.java
rename to freemarker-core/src/main/java/freemarker/template/DefaultArrayAdapter.java
diff --git a/src/main/java/freemarker/template/DefaultEnumerationAdapter.java b/freemarker-core/src/main/java/freemarker/template/DefaultEnumerationAdapter.java
similarity index 100%
rename from src/main/java/freemarker/template/DefaultEnumerationAdapter.java
rename to freemarker-core/src/main/java/freemarker/template/DefaultEnumerationAdapter.java
diff --git a/src/main/java/freemarker/template/DefaultIterableAdapter.java b/freemarker-core/src/main/java/freemarker/template/DefaultIterableAdapter.java
similarity index 100%
rename from src/main/java/freemarker/template/DefaultIterableAdapter.java
rename to freemarker-core/src/main/java/freemarker/template/DefaultIterableAdapter.java
diff --git a/src/main/java/freemarker/template/DefaultIteratorAdapter.java b/freemarker-core/src/main/java/freemarker/template/DefaultIteratorAdapter.java
similarity index 100%
rename from src/main/java/freemarker/template/DefaultIteratorAdapter.java
rename to freemarker-core/src/main/java/freemarker/template/DefaultIteratorAdapter.java
diff --git a/src/main/java/freemarker/template/DefaultListAdapter.java b/freemarker-core/src/main/java/freemarker/template/DefaultListAdapter.java
similarity index 100%
rename from src/main/java/freemarker/template/DefaultListAdapter.java
rename to freemarker-core/src/main/java/freemarker/template/DefaultListAdapter.java
diff --git a/src/main/java/freemarker/template/DefaultMapAdapter.java b/freemarker-core/src/main/java/freemarker/template/DefaultMapAdapter.java
similarity index 100%
rename from src/main/java/freemarker/template/DefaultMapAdapter.java
rename to freemarker-core/src/main/java/freemarker/template/DefaultMapAdapter.java
diff --git a/src/main/java/freemarker/template/DefaultNonListCollectionAdapter.java b/freemarker-core/src/main/java/freemarker/template/DefaultNonListCollectionAdapter.java
similarity index 100%
rename from src/main/java/freemarker/template/DefaultNonListCollectionAdapter.java
rename to freemarker-core/src/main/java/freemarker/template/DefaultNonListCollectionAdapter.java
diff --git a/src/main/java/freemarker/template/DefaultObjectWrapper.java b/freemarker-core/src/main/java/freemarker/template/DefaultObjectWrapper.java
similarity index 100%
rename from src/main/java/freemarker/template/DefaultObjectWrapper.java
rename to freemarker-core/src/main/java/freemarker/template/DefaultObjectWrapper.java
diff --git a/src/main/java/freemarker/template/DefaultObjectWrapperBuilder.java b/freemarker-core/src/main/java/freemarker/template/DefaultObjectWrapperBuilder.java
similarity index 100%
rename from src/main/java/freemarker/template/DefaultObjectWrapperBuilder.java
rename to freemarker-core/src/main/java/freemarker/template/DefaultObjectWrapperBuilder.java
diff --git a/src/main/java/freemarker/template/DefaultObjectWrapperConfiguration.java b/freemarker-core/src/main/java/freemarker/template/DefaultObjectWrapperConfiguration.java
similarity index 100%
rename from src/main/java/freemarker/template/DefaultObjectWrapperConfiguration.java
rename to freemarker-core/src/main/java/freemarker/template/DefaultObjectWrapperConfiguration.java
diff --git a/src/main/java/freemarker/template/EmptyMap.java b/freemarker-core/src/main/java/freemarker/template/EmptyMap.java
similarity index 100%
rename from src/main/java/freemarker/template/EmptyMap.java
rename to freemarker-core/src/main/java/freemarker/template/EmptyMap.java
diff --git a/src/main/java/freemarker/template/FalseTemplateBooleanModel.java b/freemarker-core/src/main/java/freemarker/template/FalseTemplateBooleanModel.java
similarity index 100%
rename from src/main/java/freemarker/template/FalseTemplateBooleanModel.java
rename to freemarker-core/src/main/java/freemarker/template/FalseTemplateBooleanModel.java
diff --git a/src/main/java/freemarker/template/GeneralPurposeNothing.java b/freemarker-core/src/main/java/freemarker/template/GeneralPurposeNothing.java
similarity index 100%
rename from src/main/java/freemarker/template/GeneralPurposeNothing.java
rename to freemarker-core/src/main/java/freemarker/template/GeneralPurposeNothing.java
diff --git a/src/main/java/freemarker/template/IteratorToTemplateModelIteratorAdapter.java b/freemarker-core/src/main/java/freemarker/template/IteratorToTemplateModelIteratorAdapter.java
similarity index 100%
rename from src/main/java/freemarker/template/IteratorToTemplateModelIteratorAdapter.java
rename to freemarker-core/src/main/java/freemarker/template/IteratorToTemplateModelIteratorAdapter.java
diff --git a/src/main/java/freemarker/template/LocalizedString.java b/freemarker-core/src/main/java/freemarker/template/LocalizedString.java
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/java/freemarker/template/LocalizedString.java
rename to freemarker-core/src/main/java/freemarker/template/LocalizedString.java
diff --git a/src/main/java/freemarker/template/LoggingAttemptExceptionReporter.java b/freemarker-core/src/main/java/freemarker/template/LoggingAttemptExceptionReporter.java
similarity index 100%
rename from src/main/java/freemarker/template/LoggingAttemptExceptionReporter.java
rename to freemarker-core/src/main/java/freemarker/template/LoggingAttemptExceptionReporter.java
diff --git a/src/main/java/freemarker/template/MalformedTemplateNameException.java b/freemarker-core/src/main/java/freemarker/template/MalformedTemplateNameException.java
similarity index 100%
rename from src/main/java/freemarker/template/MalformedTemplateNameException.java
rename to freemarker-core/src/main/java/freemarker/template/MalformedTemplateNameException.java
diff --git a/src/main/java/freemarker/template/MapKeyValuePairIterator.java b/freemarker-core/src/main/java/freemarker/template/MapKeyValuePairIterator.java
similarity index 100%
rename from src/main/java/freemarker/template/MapKeyValuePairIterator.java
rename to freemarker-core/src/main/java/freemarker/template/MapKeyValuePairIterator.java
diff --git a/src/main/java/freemarker/template/ObjectWrapper.java b/freemarker-core/src/main/java/freemarker/template/ObjectWrapper.java
similarity index 100%
rename from src/main/java/freemarker/template/ObjectWrapper.java
rename to freemarker-core/src/main/java/freemarker/template/ObjectWrapper.java
diff --git a/src/main/java/freemarker/template/ObjectWrapperAndUnwrapper.java b/freemarker-core/src/main/java/freemarker/template/ObjectWrapperAndUnwrapper.java
similarity index 100%
rename from src/main/java/freemarker/template/ObjectWrapperAndUnwrapper.java
rename to freemarker-core/src/main/java/freemarker/template/ObjectWrapperAndUnwrapper.java
diff --git a/src/main/java/freemarker/template/ResourceBundleLocalizedString.java b/freemarker-core/src/main/java/freemarker/template/ResourceBundleLocalizedString.java
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/java/freemarker/template/ResourceBundleLocalizedString.java
rename to freemarker-core/src/main/java/freemarker/template/ResourceBundleLocalizedString.java
diff --git a/src/main/java/freemarker/template/SerializableTemplateBooleanModel.java b/freemarker-core/src/main/java/freemarker/template/SerializableTemplateBooleanModel.java
similarity index 100%
rename from src/main/java/freemarker/template/SerializableTemplateBooleanModel.java
rename to freemarker-core/src/main/java/freemarker/template/SerializableTemplateBooleanModel.java
diff --git a/src/main/java/freemarker/template/SimpleCollection.java b/freemarker-core/src/main/java/freemarker/template/SimpleCollection.java
similarity index 100%
rename from src/main/java/freemarker/template/SimpleCollection.java
rename to freemarker-core/src/main/java/freemarker/template/SimpleCollection.java
diff --git a/src/main/java/freemarker/template/SimpleDate.java b/freemarker-core/src/main/java/freemarker/template/SimpleDate.java
similarity index 100%
rename from src/main/java/freemarker/template/SimpleDate.java
rename to freemarker-core/src/main/java/freemarker/template/SimpleDate.java
diff --git a/src/main/java/freemarker/template/SimpleHash.java b/freemarker-core/src/main/java/freemarker/template/SimpleHash.java
similarity index 100%
rename from src/main/java/freemarker/template/SimpleHash.java
rename to freemarker-core/src/main/java/freemarker/template/SimpleHash.java
diff --git a/src/main/java/freemarker/template/SimpleList.java b/freemarker-core/src/main/java/freemarker/template/SimpleList.java
similarity index 100%
rename from src/main/java/freemarker/template/SimpleList.java
rename to freemarker-core/src/main/java/freemarker/template/SimpleList.java
diff --git a/src/main/java/freemarker/template/SimpleNumber.java b/freemarker-core/src/main/java/freemarker/template/SimpleNumber.java
similarity index 100%
rename from src/main/java/freemarker/template/SimpleNumber.java
rename to freemarker-core/src/main/java/freemarker/template/SimpleNumber.java
diff --git a/src/main/java/freemarker/template/SimpleObjectWrapper.java b/freemarker-core/src/main/java/freemarker/template/SimpleObjectWrapper.java
similarity index 100%
rename from src/main/java/freemarker/template/SimpleObjectWrapper.java
rename to freemarker-core/src/main/java/freemarker/template/SimpleObjectWrapper.java
diff --git a/src/main/java/freemarker/template/SimpleScalar.java b/freemarker-core/src/main/java/freemarker/template/SimpleScalar.java
similarity index 100%
rename from src/main/java/freemarker/template/SimpleScalar.java
rename to freemarker-core/src/main/java/freemarker/template/SimpleScalar.java
diff --git a/src/main/java/freemarker/template/SimpleSequence.java b/freemarker-core/src/main/java/freemarker/template/SimpleSequence.java
similarity index 100%
rename from src/main/java/freemarker/template/SimpleSequence.java
rename to freemarker-core/src/main/java/freemarker/template/SimpleSequence.java
diff --git a/src/main/java/freemarker/template/Template.java b/freemarker-core/src/main/java/freemarker/template/Template.java
similarity index 100%
rename from src/main/java/freemarker/template/Template.java
rename to freemarker-core/src/main/java/freemarker/template/Template.java
diff --git a/src/main/java/freemarker/template/TemplateBooleanModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateBooleanModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateBooleanModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateBooleanModel.java
diff --git a/src/main/java/freemarker/template/TemplateCollectionModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateCollectionModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateCollectionModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateCollectionModel.java
diff --git a/src/main/java/freemarker/template/TemplateCollectionModelEx.java b/freemarker-core/src/main/java/freemarker/template/TemplateCollectionModelEx.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateCollectionModelEx.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateCollectionModelEx.java
diff --git a/src/main/java/freemarker/template/TemplateDateModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateDateModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateDateModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateDateModel.java
diff --git a/src/main/java/freemarker/template/TemplateDirectiveBody.java b/freemarker-core/src/main/java/freemarker/template/TemplateDirectiveBody.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateDirectiveBody.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateDirectiveBody.java
diff --git a/src/main/java/freemarker/template/TemplateDirectiveModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateDirectiveModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateDirectiveModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateDirectiveModel.java
diff --git a/src/main/java/freemarker/template/TemplateException.java b/freemarker-core/src/main/java/freemarker/template/TemplateException.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateException.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateException.java
diff --git a/src/main/java/freemarker/template/TemplateExceptionHandler.java b/freemarker-core/src/main/java/freemarker/template/TemplateExceptionHandler.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateExceptionHandler.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateExceptionHandler.java
diff --git a/src/main/java/freemarker/template/TemplateHashModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateHashModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateHashModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateHashModel.java
diff --git a/src/main/java/freemarker/template/TemplateHashModelEx.java b/freemarker-core/src/main/java/freemarker/template/TemplateHashModelEx.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateHashModelEx.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateHashModelEx.java
diff --git a/src/main/java/freemarker/template/TemplateHashModelEx2.java b/freemarker-core/src/main/java/freemarker/template/TemplateHashModelEx2.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateHashModelEx2.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateHashModelEx2.java
diff --git a/src/main/java/freemarker/template/TemplateMethodModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateMethodModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateMethodModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateMethodModel.java
diff --git a/src/main/java/freemarker/template/TemplateMethodModelEx.java b/freemarker-core/src/main/java/freemarker/template/TemplateMethodModelEx.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateMethodModelEx.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateMethodModelEx.java
diff --git a/src/main/java/freemarker/template/TemplateModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateModel.java
diff --git a/src/main/java/freemarker/template/TemplateModelAdapter.java b/freemarker-core/src/main/java/freemarker/template/TemplateModelAdapter.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateModelAdapter.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateModelAdapter.java
diff --git a/src/main/java/freemarker/template/TemplateModelException.java b/freemarker-core/src/main/java/freemarker/template/TemplateModelException.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateModelException.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateModelException.java
diff --git a/src/main/java/freemarker/template/TemplateModelIterator.java b/freemarker-core/src/main/java/freemarker/template/TemplateModelIterator.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateModelIterator.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateModelIterator.java
diff --git a/src/main/java/freemarker/template/TemplateModelListSequence.java b/freemarker-core/src/main/java/freemarker/template/TemplateModelListSequence.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateModelListSequence.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateModelListSequence.java
diff --git a/src/main/java/freemarker/template/TemplateModelWithAPISupport.java b/freemarker-core/src/main/java/freemarker/template/TemplateModelWithAPISupport.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateModelWithAPISupport.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateModelWithAPISupport.java
diff --git a/src/main/java/freemarker/template/TemplateNodeModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateNodeModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateNodeModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateNodeModel.java
diff --git a/src/main/java/freemarker/template/TemplateNodeModelEx.java b/freemarker-core/src/main/java/freemarker/template/TemplateNodeModelEx.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateNodeModelEx.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateNodeModelEx.java
diff --git a/src/main/java/freemarker/template/TemplateNotFoundException.java b/freemarker-core/src/main/java/freemarker/template/TemplateNotFoundException.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateNotFoundException.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateNotFoundException.java
diff --git a/src/main/java/freemarker/template/TemplateNumberModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateNumberModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateNumberModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateNumberModel.java
diff --git a/src/main/java/freemarker/template/TemplateScalarModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateScalarModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateScalarModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateScalarModel.java
diff --git a/src/main/java/freemarker/template/TemplateSequenceModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateSequenceModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateSequenceModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateSequenceModel.java
diff --git a/src/main/java/freemarker/template/TemplateTransformModel.java b/freemarker-core/src/main/java/freemarker/template/TemplateTransformModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TemplateTransformModel.java
rename to freemarker-core/src/main/java/freemarker/template/TemplateTransformModel.java
diff --git a/src/main/java/freemarker/template/TransformControl.java b/freemarker-core/src/main/java/freemarker/template/TransformControl.java
similarity index 100%
rename from src/main/java/freemarker/template/TransformControl.java
rename to freemarker-core/src/main/java/freemarker/template/TransformControl.java
diff --git a/src/main/java/freemarker/template/TrueTemplateBooleanModel.java b/freemarker-core/src/main/java/freemarker/template/TrueTemplateBooleanModel.java
similarity index 100%
rename from src/main/java/freemarker/template/TrueTemplateBooleanModel.java
rename to freemarker-core/src/main/java/freemarker/template/TrueTemplateBooleanModel.java
diff --git a/src/main/java/freemarker/template/Version.java b/freemarker-core/src/main/java/freemarker/template/Version.java
similarity index 100%
rename from src/main/java/freemarker/template/Version.java
rename to freemarker-core/src/main/java/freemarker/template/Version.java
diff --git a/src/main/java/freemarker/template/WrappingTemplateModel.java b/freemarker-core/src/main/java/freemarker/template/WrappingTemplateModel.java
similarity index 100%
rename from src/main/java/freemarker/template/WrappingTemplateModel.java
rename to freemarker-core/src/main/java/freemarker/template/WrappingTemplateModel.java
diff --git a/src/main/java/freemarker/template/_ObjectWrappers.java b/freemarker-core/src/main/java/freemarker/template/_ObjectWrappers.java
similarity index 100%
rename from src/main/java/freemarker/template/_ObjectWrappers.java
rename to freemarker-core/src/main/java/freemarker/template/_ObjectWrappers.java
diff --git a/src/main/java/freemarker/template/_TemplateAPI.java b/freemarker-core/src/main/java/freemarker/template/_TemplateAPI.java
similarity index 100%
rename from src/main/java/freemarker/template/_TemplateAPI.java
rename to freemarker-core/src/main/java/freemarker/template/_TemplateAPI.java
diff --git a/src/main/java/freemarker/template/_VersionInts.java b/freemarker-core/src/main/java/freemarker/template/_VersionInts.java
similarity index 100%
rename from src/main/java/freemarker/template/_VersionInts.java
rename to freemarker-core/src/main/java/freemarker/template/_VersionInts.java
diff --git a/src/main/java/freemarker/template/package.html b/freemarker-core/src/main/java/freemarker/template/package.html
similarity index 100%
rename from src/main/java/freemarker/template/package.html
rename to freemarker-core/src/main/java/freemarker/template/package.html
diff --git a/src/main/java/freemarker/template/utility/CaptureOutput.java b/freemarker-core/src/main/java/freemarker/template/utility/CaptureOutput.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/CaptureOutput.java
rename to freemarker-core/src/main/java/freemarker/template/utility/CaptureOutput.java
diff --git a/src/main/java/freemarker/template/utility/ClassUtil.java b/freemarker-core/src/main/java/freemarker/template/utility/ClassUtil.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/ClassUtil.java
rename to freemarker-core/src/main/java/freemarker/template/utility/ClassUtil.java
diff --git a/src/main/java/freemarker/template/utility/CollectionUtils.java b/freemarker-core/src/main/java/freemarker/template/utility/CollectionUtils.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/CollectionUtils.java
rename to freemarker-core/src/main/java/freemarker/template/utility/CollectionUtils.java
diff --git a/src/main/java/freemarker/template/utility/Collections12.java b/freemarker-core/src/main/java/freemarker/template/utility/Collections12.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/Collections12.java
rename to freemarker-core/src/main/java/freemarker/template/utility/Collections12.java
diff --git a/src/main/java/freemarker/template/utility/Constants.java b/freemarker-core/src/main/java/freemarker/template/utility/Constants.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/Constants.java
rename to freemarker-core/src/main/java/freemarker/template/utility/Constants.java
diff --git a/src/main/java/freemarker/template/utility/DOMNodeModel.java b/freemarker-core/src/main/java/freemarker/template/utility/DOMNodeModel.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/DOMNodeModel.java
rename to freemarker-core/src/main/java/freemarker/template/utility/DOMNodeModel.java
diff --git a/src/main/java/freemarker/template/utility/DateUtil.java b/freemarker-core/src/main/java/freemarker/template/utility/DateUtil.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/DateUtil.java
rename to freemarker-core/src/main/java/freemarker/template/utility/DateUtil.java
diff --git a/src/main/java/freemarker/template/utility/DeepUnwrap.java b/freemarker-core/src/main/java/freemarker/template/utility/DeepUnwrap.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/DeepUnwrap.java
rename to freemarker-core/src/main/java/freemarker/template/utility/DeepUnwrap.java
diff --git a/src/main/java/freemarker/template/utility/Execute.java b/freemarker-core/src/main/java/freemarker/template/utility/Execute.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/Execute.java
rename to freemarker-core/src/main/java/freemarker/template/utility/Execute.java
diff --git a/src/main/java/freemarker/template/utility/HtmlEscape.java b/freemarker-core/src/main/java/freemarker/template/utility/HtmlEscape.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/HtmlEscape.java
rename to freemarker-core/src/main/java/freemarker/template/utility/HtmlEscape.java
diff --git a/src/main/java/freemarker/template/utility/NormalizeNewlines.java b/freemarker-core/src/main/java/freemarker/template/utility/NormalizeNewlines.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/NormalizeNewlines.java
rename to freemarker-core/src/main/java/freemarker/template/utility/NormalizeNewlines.java
diff --git a/src/main/java/freemarker/template/utility/NullArgumentException.java b/freemarker-core/src/main/java/freemarker/template/utility/NullArgumentException.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/NullArgumentException.java
rename to freemarker-core/src/main/java/freemarker/template/utility/NullArgumentException.java
diff --git a/src/main/java/freemarker/template/utility/NullWriter.java b/freemarker-core/src/main/java/freemarker/template/utility/NullWriter.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/NullWriter.java
rename to freemarker-core/src/main/java/freemarker/template/utility/NullWriter.java
diff --git a/src/main/java/freemarker/template/utility/NumberUtil.java b/freemarker-core/src/main/java/freemarker/template/utility/NumberUtil.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/NumberUtil.java
rename to freemarker-core/src/main/java/freemarker/template/utility/NumberUtil.java
diff --git a/src/main/java/freemarker/template/utility/ObjectConstructor.java b/freemarker-core/src/main/java/freemarker/template/utility/ObjectConstructor.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/ObjectConstructor.java
rename to freemarker-core/src/main/java/freemarker/template/utility/ObjectConstructor.java
diff --git a/src/main/java/freemarker/template/utility/ObjectFactory.java b/freemarker-core/src/main/java/freemarker/template/utility/ObjectFactory.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/ObjectFactory.java
rename to freemarker-core/src/main/java/freemarker/template/utility/ObjectFactory.java
diff --git a/src/main/java/freemarker/template/utility/ObjectWrapperWithAPISupport.java b/freemarker-core/src/main/java/freemarker/template/utility/ObjectWrapperWithAPISupport.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/ObjectWrapperWithAPISupport.java
rename to freemarker-core/src/main/java/freemarker/template/utility/ObjectWrapperWithAPISupport.java
diff --git a/src/main/java/freemarker/template/utility/OptimizerUtil.java b/freemarker-core/src/main/java/freemarker/template/utility/OptimizerUtil.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/OptimizerUtil.java
rename to freemarker-core/src/main/java/freemarker/template/utility/OptimizerUtil.java
diff --git a/src/main/java/freemarker/template/utility/RichObjectWrapper.java b/freemarker-core/src/main/java/freemarker/template/utility/RichObjectWrapper.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/RichObjectWrapper.java
rename to freemarker-core/src/main/java/freemarker/template/utility/RichObjectWrapper.java
diff --git a/src/main/java/freemarker/template/utility/SecurityUtilities.java b/freemarker-core/src/main/java/freemarker/template/utility/SecurityUtilities.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/SecurityUtilities.java
rename to freemarker-core/src/main/java/freemarker/template/utility/SecurityUtilities.java
diff --git a/src/main/java/freemarker/template/utility/StandardCompress.java b/freemarker-core/src/main/java/freemarker/template/utility/StandardCompress.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/StandardCompress.java
rename to freemarker-core/src/main/java/freemarker/template/utility/StandardCompress.java
diff --git a/src/main/java/freemarker/template/utility/StringUtil.java b/freemarker-core/src/main/java/freemarker/template/utility/StringUtil.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/StringUtil.java
rename to freemarker-core/src/main/java/freemarker/template/utility/StringUtil.java
diff --git a/src/main/java/freemarker/template/utility/TemplateModelUtils.java b/freemarker-core/src/main/java/freemarker/template/utility/TemplateModelUtils.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/TemplateModelUtils.java
rename to freemarker-core/src/main/java/freemarker/template/utility/TemplateModelUtils.java
diff --git a/src/main/java/freemarker/template/utility/ToCanonical.java b/freemarker-core/src/main/java/freemarker/template/utility/ToCanonical.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/ToCanonical.java
rename to freemarker-core/src/main/java/freemarker/template/utility/ToCanonical.java
diff --git a/src/main/java/freemarker/template/utility/UndeclaredThrowableException.java b/freemarker-core/src/main/java/freemarker/template/utility/UndeclaredThrowableException.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/UndeclaredThrowableException.java
rename to freemarker-core/src/main/java/freemarker/template/utility/UndeclaredThrowableException.java
diff --git a/src/main/java/freemarker/template/utility/UnrecognizedTimeZoneException.java b/freemarker-core/src/main/java/freemarker/template/utility/UnrecognizedTimeZoneException.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/UnrecognizedTimeZoneException.java
rename to freemarker-core/src/main/java/freemarker/template/utility/UnrecognizedTimeZoneException.java
diff --git a/src/main/java/freemarker/template/utility/UnsupportedNumberClassException.java b/freemarker-core/src/main/java/freemarker/template/utility/UnsupportedNumberClassException.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/UnsupportedNumberClassException.java
rename to freemarker-core/src/main/java/freemarker/template/utility/UnsupportedNumberClassException.java
diff --git a/src/main/java/freemarker/template/utility/WriteProtectable.java b/freemarker-core/src/main/java/freemarker/template/utility/WriteProtectable.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/WriteProtectable.java
rename to freemarker-core/src/main/java/freemarker/template/utility/WriteProtectable.java
diff --git a/src/main/java/freemarker/template/utility/XmlEscape.java b/freemarker-core/src/main/java/freemarker/template/utility/XmlEscape.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/XmlEscape.java
rename to freemarker-core/src/main/java/freemarker/template/utility/XmlEscape.java
diff --git a/src/main/java/freemarker/template/utility/package.html b/freemarker-core/src/main/java/freemarker/template/utility/package.html
similarity index 100%
rename from src/main/java/freemarker/template/utility/package.html
rename to freemarker-core/src/main/java/freemarker/template/utility/package.html
diff --git a/src/main/javacc/FTL.jj b/freemarker-core/src/main/javacc/freemarker/core/FTL.jj
similarity index 100%
rename from src/main/javacc/FTL.jj
rename to freemarker-core/src/main/javacc/freemarker/core/FTL.jj
diff --git a/src/main/misc/identifierChars/src/main/freemarker/adhoc/IdentifierCharGenerator.java b/freemarker-core/src/main/misc/identifierChars/src/main/freemarker/adhoc/IdentifierCharGenerator.java
similarity index 100%
rename from src/main/misc/identifierChars/src/main/freemarker/adhoc/IdentifierCharGenerator.java
rename to freemarker-core/src/main/misc/identifierChars/src/main/freemarker/adhoc/IdentifierCharGenerator.java
diff --git a/src/main/misc/overloadedNumberRules/README.txt b/freemarker-core/src/main/misc/overloadedNumberRules/README.txt
similarity index 100%
rename from src/main/misc/overloadedNumberRules/README.txt
rename to freemarker-core/src/main/misc/overloadedNumberRules/README.txt
diff --git a/src/main/misc/overloadedNumberRules/config.fmpp b/freemarker-core/src/main/misc/overloadedNumberRules/config.fmpp
similarity index 100%
rename from src/main/misc/overloadedNumberRules/config.fmpp
rename to freemarker-core/src/main/misc/overloadedNumberRules/config.fmpp
diff --git a/src/main/misc/overloadedNumberRules/generator.ftl b/freemarker-core/src/main/misc/overloadedNumberRules/generator.ftl
similarity index 100%
rename from src/main/misc/overloadedNumberRules/generator.ftl
rename to freemarker-core/src/main/misc/overloadedNumberRules/generator.ftl
diff --git a/src/main/misc/overloadedNumberRules/prices.ods b/freemarker-core/src/main/misc/overloadedNumberRules/prices.ods
similarity index 100%
rename from src/main/misc/overloadedNumberRules/prices.ods
rename to freemarker-core/src/main/misc/overloadedNumberRules/prices.ods
Binary files differ
diff --git a/src/main/resources/freemarker/version.properties b/freemarker-core/src/main/resource-templates/freemarker/version.properties
similarity index 100%
rename from src/main/resources/freemarker/version.properties
rename to freemarker-core/src/main/resource-templates/freemarker/version.properties
diff --git a/src/main/resources/freemarker/ext/beans/DefaultMemberAccessPolicy-rules b/freemarker-core/src/main/resources/freemarker/ext/beans/DefaultMemberAccessPolicy-rules
similarity index 100%
rename from src/main/resources/freemarker/ext/beans/DefaultMemberAccessPolicy-rules
rename to freemarker-core/src/main/resources/freemarker/ext/beans/DefaultMemberAccessPolicy-rules
diff --git a/src/main/resources/freemarker/ext/beans/unsafeMethods.properties b/freemarker-core/src/main/resources/freemarker/ext/beans/unsafeMethods.properties
similarity index 100%
rename from src/main/resources/freemarker/ext/beans/unsafeMethods.properties
rename to freemarker-core/src/main/resources/freemarker/ext/beans/unsafeMethods.properties
diff --git a/src/main/java/freemarker/core/_Java16Impl.java b/freemarker-core16/src/main/java/freemarker/core/_Java16Impl.java
similarity index 100%
rename from src/main/java/freemarker/core/_Java16Impl.java
rename to freemarker-core16/src/main/java/freemarker/core/_Java16Impl.java
diff --git a/src/main/java/freemarker/cache/WebappTemplateLoader.java b/freemarker-jsp20/src/main/java/freemarker/cache/WebappTemplateLoader.java
similarity index 100%
rename from src/main/java/freemarker/cache/WebappTemplateLoader.java
rename to freemarker-jsp20/src/main/java/freemarker/cache/WebappTemplateLoader.java
diff --git a/src/main/java/freemarker/ext/jsp/CustomTagAndELFunctionCombiner.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/CustomTagAndELFunctionCombiner.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/CustomTagAndELFunctionCombiner.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/CustomTagAndELFunctionCombiner.java
diff --git a/src/main/java/freemarker/ext/jsp/EventForwarding.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/EventForwarding.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/EventForwarding.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/EventForwarding.java
diff --git a/src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory.java
diff --git a/src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory2.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory2.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory2.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory2.java
diff --git a/src/main/java/freemarker/ext/jsp/FreeMarkerPageContext.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/FreeMarkerPageContext.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/FreeMarkerPageContext.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/FreeMarkerPageContext.java
diff --git a/src/main/java/freemarker/ext/jsp/FreemarkerTag.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/FreemarkerTag.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/FreemarkerTag.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/FreemarkerTag.java
diff --git a/src/main/java/freemarker/ext/jsp/JspContextModel.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/JspContextModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/JspContextModel.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/JspContextModel.java
diff --git a/src/main/java/freemarker/ext/jsp/JspTagModelBase.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/JspTagModelBase.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/JspTagModelBase.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/JspTagModelBase.java
diff --git a/src/main/java/freemarker/ext/jsp/JspWriterAdapter.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/JspWriterAdapter.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/JspWriterAdapter.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/JspWriterAdapter.java
diff --git a/src/main/java/freemarker/ext/jsp/PageContextFactory.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/PageContextFactory.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/PageContextFactory.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/PageContextFactory.java
diff --git a/src/main/java/freemarker/ext/jsp/SimpleTagDirectiveModel.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/SimpleTagDirectiveModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/SimpleTagDirectiveModel.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/SimpleTagDirectiveModel.java
diff --git a/src/main/java/freemarker/ext/jsp/TagTransformModel.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/TagTransformModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/TagTransformModel.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/TagTransformModel.java
diff --git a/src/main/java/freemarker/ext/jsp/TaglibFactory.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/TaglibFactory.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/TaglibFactory.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/TaglibFactory.java
diff --git a/src/main/java/freemarker/ext/jsp/TaglibMethodUtil.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/TaglibMethodUtil.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/TaglibMethodUtil.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/TaglibMethodUtil.java
diff --git a/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext2.java b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext2.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext2.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext2.java
diff --git a/src/main/java/freemarker/ext/jsp/package.html b/freemarker-jsp20/src/main/java/freemarker/ext/jsp/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/package.html
rename to freemarker-jsp20/src/main/java/freemarker/ext/jsp/package.html
diff --git a/src/main/java/freemarker/ext/servlet/AllHttpScopesHashModel.java b/freemarker-jsp20/src/main/java/freemarker/ext/servlet/AllHttpScopesHashModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/servlet/AllHttpScopesHashModel.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/servlet/AllHttpScopesHashModel.java
diff --git a/src/main/java/freemarker/ext/servlet/FreemarkerServlet.java b/freemarker-jsp20/src/main/java/freemarker/ext/servlet/FreemarkerServlet.java
similarity index 100%
rename from src/main/java/freemarker/ext/servlet/FreemarkerServlet.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/servlet/FreemarkerServlet.java
diff --git a/src/main/java/freemarker/ext/servlet/HttpRequestHashModel.java b/freemarker-jsp20/src/main/java/freemarker/ext/servlet/HttpRequestHashModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/servlet/HttpRequestHashModel.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/servlet/HttpRequestHashModel.java
diff --git a/src/main/java/freemarker/ext/servlet/HttpRequestParametersHashModel.java b/freemarker-jsp20/src/main/java/freemarker/ext/servlet/HttpRequestParametersHashModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/servlet/HttpRequestParametersHashModel.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/servlet/HttpRequestParametersHashModel.java
diff --git a/src/main/java/freemarker/ext/servlet/HttpSessionHashModel.java b/freemarker-jsp20/src/main/java/freemarker/ext/servlet/HttpSessionHashModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/servlet/HttpSessionHashModel.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/servlet/HttpSessionHashModel.java
diff --git a/src/main/java/freemarker/ext/servlet/IncludePage.java b/freemarker-jsp20/src/main/java/freemarker/ext/servlet/IncludePage.java
similarity index 100%
rename from src/main/java/freemarker/ext/servlet/IncludePage.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/servlet/IncludePage.java
diff --git a/src/main/java/freemarker/ext/servlet/InitParamParser.java b/freemarker-jsp20/src/main/java/freemarker/ext/servlet/InitParamParser.java
similarity index 100%
rename from src/main/java/freemarker/ext/servlet/InitParamParser.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/servlet/InitParamParser.java
diff --git a/src/main/java/freemarker/ext/servlet/ServletContextHashModel.java b/freemarker-jsp20/src/main/java/freemarker/ext/servlet/ServletContextHashModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/servlet/ServletContextHashModel.java
rename to freemarker-jsp20/src/main/java/freemarker/ext/servlet/ServletContextHashModel.java
diff --git a/src/main/java/freemarker/ext/servlet/package.html b/freemarker-jsp20/src/main/java/freemarker/ext/servlet/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/servlet/package.html
rename to freemarker-jsp20/src/main/java/freemarker/ext/servlet/package.html
diff --git a/src/main/java/freemarker/ext/jsp/FreeMarkerJspApplicationContext.java b/freemarker-jsp21/src/main/java/freemarker/ext/jsp/FreeMarkerJspApplicationContext.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/FreeMarkerJspApplicationContext.java
rename to freemarker-jsp21/src/main/java/freemarker/ext/jsp/FreeMarkerJspApplicationContext.java
diff --git a/src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory21.java b/freemarker-jsp21/src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory21.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory21.java
rename to freemarker-jsp21/src/main/java/freemarker/ext/jsp/FreeMarkerJspFactory21.java
diff --git a/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext21.java b/freemarker-jsp21/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext21.java
similarity index 100%
rename from src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext21.java
rename to freemarker-jsp21/src/main/java/freemarker/ext/jsp/_FreeMarkerPageContext21.java
diff --git a/src/main/java/freemarker/ext/ant/FreemarkerXmlTask.java b/freemarker-jython20/src/main/java/freemarker/ext/ant/FreemarkerXmlTask.java
similarity index 100%
rename from src/main/java/freemarker/ext/ant/FreemarkerXmlTask.java
rename to freemarker-jython20/src/main/java/freemarker/ext/ant/FreemarkerXmlTask.java
diff --git a/src/main/java/freemarker/ext/ant/JythonAntTask.java b/freemarker-jython20/src/main/java/freemarker/ext/ant/JythonAntTask.java
similarity index 100%
rename from src/main/java/freemarker/ext/ant/JythonAntTask.java
rename to freemarker-jython20/src/main/java/freemarker/ext/ant/JythonAntTask.java
diff --git a/src/main/java/freemarker/ext/ant/UnlinkedJythonOperations.java b/freemarker-jython20/src/main/java/freemarker/ext/ant/UnlinkedJythonOperations.java
similarity index 100%
rename from src/main/java/freemarker/ext/ant/UnlinkedJythonOperations.java
rename to freemarker-jython20/src/main/java/freemarker/ext/ant/UnlinkedJythonOperations.java
diff --git a/src/main/java/freemarker/ext/ant/UnlinkedJythonOperationsImpl.java b/freemarker-jython20/src/main/java/freemarker/ext/ant/UnlinkedJythonOperationsImpl.java
similarity index 100%
rename from src/main/java/freemarker/ext/ant/UnlinkedJythonOperationsImpl.java
rename to freemarker-jython20/src/main/java/freemarker/ext/ant/UnlinkedJythonOperationsImpl.java
diff --git a/src/main/java/freemarker/ext/ant/package.html b/freemarker-jython20/src/main/java/freemarker/ext/ant/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/ant/package.html
rename to freemarker-jython20/src/main/java/freemarker/ext/ant/package.html
diff --git a/src/main/java/freemarker/ext/jython/JythonHashModel.java b/freemarker-jython20/src/main/java/freemarker/ext/jython/JythonHashModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/JythonHashModel.java
rename to freemarker-jython20/src/main/java/freemarker/ext/jython/JythonHashModel.java
diff --git a/src/main/java/freemarker/ext/jython/JythonModel.java b/freemarker-jython20/src/main/java/freemarker/ext/jython/JythonModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/JythonModel.java
rename to freemarker-jython20/src/main/java/freemarker/ext/jython/JythonModel.java
diff --git a/src/main/java/freemarker/ext/jython/JythonModelCache.java b/freemarker-jython20/src/main/java/freemarker/ext/jython/JythonModelCache.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/JythonModelCache.java
rename to freemarker-jython20/src/main/java/freemarker/ext/jython/JythonModelCache.java
diff --git a/src/main/java/freemarker/ext/jython/JythonNumberModel.java b/freemarker-jython20/src/main/java/freemarker/ext/jython/JythonNumberModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/JythonNumberModel.java
rename to freemarker-jython20/src/main/java/freemarker/ext/jython/JythonNumberModel.java
diff --git a/src/main/java/freemarker/ext/jython/JythonSequenceModel.java b/freemarker-jython20/src/main/java/freemarker/ext/jython/JythonSequenceModel.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/JythonSequenceModel.java
rename to freemarker-jython20/src/main/java/freemarker/ext/jython/JythonSequenceModel.java
diff --git a/src/main/java/freemarker/ext/jython/JythonVersionAdapter.java b/freemarker-jython20/src/main/java/freemarker/ext/jython/JythonVersionAdapter.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/JythonVersionAdapter.java
rename to freemarker-jython20/src/main/java/freemarker/ext/jython/JythonVersionAdapter.java
diff --git a/src/main/java/freemarker/ext/jython/JythonVersionAdapterHolder.java b/freemarker-jython20/src/main/java/freemarker/ext/jython/JythonVersionAdapterHolder.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/JythonVersionAdapterHolder.java
rename to freemarker-jython20/src/main/java/freemarker/ext/jython/JythonVersionAdapterHolder.java
diff --git a/src/main/java/freemarker/ext/jython/JythonWrapper.java b/freemarker-jython20/src/main/java/freemarker/ext/jython/JythonWrapper.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/JythonWrapper.java
rename to freemarker-jython20/src/main/java/freemarker/ext/jython/JythonWrapper.java
diff --git a/src/main/java/freemarker/ext/jython/_Jython20And21VersionAdapter.java b/freemarker-jython20/src/main/java/freemarker/ext/jython/_Jython20And21VersionAdapter.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/_Jython20And21VersionAdapter.java
rename to freemarker-jython20/src/main/java/freemarker/ext/jython/_Jython20And21VersionAdapter.java
diff --git a/src/main/java/freemarker/ext/jython/package.html b/freemarker-jython20/src/main/java/freemarker/ext/jython/package.html
similarity index 100%
rename from src/main/java/freemarker/ext/jython/package.html
rename to freemarker-jython20/src/main/java/freemarker/ext/jython/package.html
diff --git a/src/main/java/freemarker/template/utility/JythonRuntime.java b/freemarker-jython20/src/main/java/freemarker/template/utility/JythonRuntime.java
similarity index 100%
rename from src/main/java/freemarker/template/utility/JythonRuntime.java
rename to freemarker-jython20/src/main/java/freemarker/template/utility/JythonRuntime.java
diff --git a/src/main/java/freemarker/ext/jython/_Jython22VersionAdapter.java b/freemarker-jython22/src/main/java/freemarker/ext/jython/_Jython22VersionAdapter.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/_Jython22VersionAdapter.java
rename to freemarker-jython22/src/main/java/freemarker/ext/jython/_Jython22VersionAdapter.java
diff --git a/src/main/java/freemarker/ext/jython/_Jython25VersionAdapter.java b/freemarker-jython25/src/main/java/freemarker/ext/jython/_Jython25VersionAdapter.java
similarity index 100%
rename from src/main/java/freemarker/ext/jython/_Jython25VersionAdapter.java
rename to freemarker-jython25/src/main/java/freemarker/ext/jython/_Jython25VersionAdapter.java
diff --git a/src/manual/en_US/book.xml b/freemarker-manual/src/main/docgen/en_US/book.xml
similarity index 100%
rename from src/manual/en_US/book.xml
rename to freemarker-manual/src/main/docgen/en_US/book.xml
diff --git a/src/manual/en_US/docgen-help/editors-readme.txt b/freemarker-manual/src/main/docgen/en_US/docgen-help/editors-readme.txt
similarity index 100%
rename from src/manual/en_US/docgen-help/editors-readme.txt
rename to freemarker-manual/src/main/docgen/en_US/docgen-help/editors-readme.txt
diff --git a/src/manual/en_US/docgen-misc/copyrightComment.txt b/freemarker-manual/src/main/docgen/en_US/docgen-misc/copyrightComment.txt
similarity index 100%
rename from src/manual/en_US/docgen-misc/copyrightComment.txt
rename to freemarker-manual/src/main/docgen/en_US/docgen-misc/copyrightComment.txt
diff --git a/src/manual/en_US/docgen-misc/googleAnalytics.html b/freemarker-manual/src/main/docgen/en_US/docgen-misc/googleAnalytics.html
similarity index 100%
rename from src/manual/en_US/docgen-misc/googleAnalytics.html
rename to freemarker-manual/src/main/docgen/en_US/docgen-misc/googleAnalytics.html
diff --git a/src/manual/en_US/docgen-originals/figures/model2sketch_with_alpha.png b/freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/model2sketch_with_alpha.png
similarity index 100%
rename from src/manual/en_US/docgen-originals/figures/model2sketch_with_alpha.png
rename to freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/model2sketch_with_alpha.png
Binary files differ
diff --git a/src/manual/en_US/docgen-originals/figures/odg-convert-howto.txt b/freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/odg-convert-howto.txt
similarity index 100%
rename from src/manual/en_US/docgen-originals/figures/odg-convert-howto.txt
rename to freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/odg-convert-howto.txt
diff --git a/src/manual/en_US/docgen-originals/figures/overview.odg b/freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/overview.odg
similarity index 100%
rename from src/manual/en_US/docgen-originals/figures/overview.odg
rename to freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/overview.odg
Binary files differ
diff --git a/src/manual/en_US/docgen-originals/figures/tree_with_alpha.png b/freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/tree_with_alpha.png
similarity index 100%
rename from src/manual/en_US/docgen-originals/figures/tree_with_alpha.png
rename to freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/tree_with_alpha.png
Binary files differ
diff --git a/src/manual/en_US/docgen.cjson b/freemarker-manual/src/main/docgen/en_US/docgen.cjson
similarity index 100%
rename from src/manual/en_US/docgen.cjson
rename to freemarker-manual/src/main/docgen/en_US/docgen.cjson
diff --git a/src/manual/en_US/favicon.png b/freemarker-manual/src/main/docgen/en_US/favicon.png
similarity index 100%
rename from src/manual/en_US/favicon.png
rename to freemarker-manual/src/main/docgen/en_US/favicon.png
Binary files differ
diff --git a/src/manual/en_US/figures/model2sketch.png b/freemarker-manual/src/main/docgen/en_US/figures/model2sketch.png
similarity index 100%
rename from src/manual/en_US/figures/model2sketch.png
rename to freemarker-manual/src/main/docgen/en_US/figures/model2sketch.png
Binary files differ
diff --git a/src/manual/en_US/figures/overview.png b/freemarker-manual/src/main/docgen/en_US/figures/overview.png
similarity index 100%
rename from src/manual/en_US/figures/overview.png
rename to freemarker-manual/src/main/docgen/en_US/figures/overview.png
Binary files differ
diff --git a/src/manual/en_US/figures/tree.png b/freemarker-manual/src/main/docgen/en_US/figures/tree.png
similarity index 100%
rename from src/manual/en_US/figures/tree.png
rename to freemarker-manual/src/main/docgen/en_US/figures/tree.png
Binary files differ
diff --git a/src/manual/en_US/logo.png b/freemarker-manual/src/main/docgen/en_US/logo.png
similarity index 100%
rename from src/manual/en_US/logo.png
rename to freemarker-manual/src/main/docgen/en_US/logo.png
Binary files differ
diff --git a/src/test/java/freemarker/cache/FileTemplateLoaderTest.java b/freemarker-test/src/test/java/freemarker/cache/FileTemplateLoaderTest.java
similarity index 100%
rename from src/test/java/freemarker/cache/FileTemplateLoaderTest.java
rename to freemarker-test/src/test/java/freemarker/cache/FileTemplateLoaderTest.java
diff --git a/src/test/java/freemarker/cache/MultiTemplateLoaderTest.java b/freemarker-test/src/test/java/freemarker/cache/MultiTemplateLoaderTest.java
similarity index 100%
rename from src/test/java/freemarker/cache/MultiTemplateLoaderTest.java
rename to freemarker-test/src/test/java/freemarker/cache/MultiTemplateLoaderTest.java
diff --git a/src/test/java/freemarker/cache/TemplateCacheTest.java b/freemarker-test/src/test/java/freemarker/cache/TemplateCacheTest.java
similarity index 100%
rename from src/test/java/freemarker/cache/TemplateCacheTest.java
rename to freemarker-test/src/test/java/freemarker/cache/TemplateCacheTest.java
diff --git a/src/test/java/freemarker/cache/TemplateConfigurationFactoryTest.java b/freemarker-test/src/test/java/freemarker/cache/TemplateConfigurationFactoryTest.java
similarity index 100%
rename from src/test/java/freemarker/cache/TemplateConfigurationFactoryTest.java
rename to freemarker-test/src/test/java/freemarker/cache/TemplateConfigurationFactoryTest.java
diff --git a/src/test/java/freemarker/cache/TemplateNameFormatTest.java b/freemarker-test/src/test/java/freemarker/cache/TemplateNameFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/cache/TemplateNameFormatTest.java
rename to freemarker-test/src/test/java/freemarker/cache/TemplateNameFormatTest.java
diff --git a/src/test/java/freemarker/cache/TemplateSourceMatcherTest.java b/freemarker-test/src/test/java/freemarker/cache/TemplateSourceMatcherTest.java
similarity index 100%
rename from src/test/java/freemarker/cache/TemplateSourceMatcherTest.java
rename to freemarker-test/src/test/java/freemarker/cache/TemplateSourceMatcherTest.java
diff --git a/src/test/java/freemarker/core/ASTBasedErrorMessagesTest.java b/freemarker-test/src/test/java/freemarker/core/ASTBasedErrorMessagesTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ASTBasedErrorMessagesTest.java
rename to freemarker-test/src/test/java/freemarker/core/ASTBasedErrorMessagesTest.java
diff --git a/src/test/java/freemarker/core/ASTPrinter.java b/freemarker-test/src/test/java/freemarker/core/ASTPrinter.java
similarity index 100%
rename from src/test/java/freemarker/core/ASTPrinter.java
rename to freemarker-test/src/test/java/freemarker/core/ASTPrinter.java
diff --git a/src/test/java/freemarker/core/ASTTest.java b/freemarker-test/src/test/java/freemarker/core/ASTTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ASTTest.java
rename to freemarker-test/src/test/java/freemarker/core/ASTTest.java
diff --git a/src/test/java/freemarker/core/AbsoluteTemplateNameBITest.java b/freemarker-test/src/test/java/freemarker/core/AbsoluteTemplateNameBITest.java
similarity index 100%
rename from src/test/java/freemarker/core/AbsoluteTemplateNameBITest.java
rename to freemarker-test/src/test/java/freemarker/core/AbsoluteTemplateNameBITest.java
diff --git a/src/test/java/freemarker/core/AppMetaTemplateDateFormatFactory.java b/freemarker-test/src/test/java/freemarker/core/AppMetaTemplateDateFormatFactory.java
similarity index 100%
rename from src/test/java/freemarker/core/AppMetaTemplateDateFormatFactory.java
rename to freemarker-test/src/test/java/freemarker/core/AppMetaTemplateDateFormatFactory.java
diff --git a/src/test/java/freemarker/core/ArgsSpecialVariableTest.java b/freemarker-test/src/test/java/freemarker/core/ArgsSpecialVariableTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ArgsSpecialVariableTest.java
rename to freemarker-test/src/test/java/freemarker/core/ArgsSpecialVariableTest.java
diff --git a/src/test/java/freemarker/core/ArithmeticEngineTest.java b/freemarker-test/src/test/java/freemarker/core/ArithmeticEngineTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ArithmeticEngineTest.java
rename to freemarker-test/src/test/java/freemarker/core/ArithmeticEngineTest.java
diff --git a/src/test/java/freemarker/core/AttemptLoggingTest.java b/freemarker-test/src/test/java/freemarker/core/AttemptLoggingTest.java
similarity index 100%
rename from src/test/java/freemarker/core/AttemptLoggingTest.java
rename to freemarker-test/src/test/java/freemarker/core/AttemptLoggingTest.java
diff --git a/src/test/java/freemarker/core/BaseNTemplateNumberFormatFactory.java b/freemarker-test/src/test/java/freemarker/core/BaseNTemplateNumberFormatFactory.java
similarity index 100%
rename from src/test/java/freemarker/core/BaseNTemplateNumberFormatFactory.java
rename to freemarker-test/src/test/java/freemarker/core/BaseNTemplateNumberFormatFactory.java
diff --git a/src/test/java/freemarker/core/BooleanFormatEnvironmentCachingTest.java b/freemarker-test/src/test/java/freemarker/core/BooleanFormatEnvironmentCachingTest.java
similarity index 100%
rename from src/test/java/freemarker/core/BooleanFormatEnvironmentCachingTest.java
rename to freemarker-test/src/test/java/freemarker/core/BooleanFormatEnvironmentCachingTest.java
diff --git a/src/test/java/freemarker/core/BreakAndContinuePlacementTest.java b/freemarker-test/src/test/java/freemarker/core/BreakAndContinuePlacementTest.java
similarity index 100%
rename from src/test/java/freemarker/core/BreakAndContinuePlacementTest.java
rename to freemarker-test/src/test/java/freemarker/core/BreakAndContinuePlacementTest.java
diff --git a/src/test/java/freemarker/core/CAndCnBuiltInTest.java b/freemarker-test/src/test/java/freemarker/core/CAndCnBuiltInTest.java
similarity index 100%
rename from src/test/java/freemarker/core/CAndCnBuiltInTest.java
rename to freemarker-test/src/test/java/freemarker/core/CAndCnBuiltInTest.java
diff --git a/src/test/java/freemarker/core/CFormatTemplateTest.java b/freemarker-test/src/test/java/freemarker/core/CFormatTemplateTest.java
similarity index 100%
rename from src/test/java/freemarker/core/CFormatTemplateTest.java
rename to freemarker-test/src/test/java/freemarker/core/CFormatTemplateTest.java
diff --git a/src/test/java/freemarker/core/CTemplateNumberFormatTest.java b/freemarker-test/src/test/java/freemarker/core/CTemplateNumberFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/core/CTemplateNumberFormatTest.java
rename to freemarker-test/src/test/java/freemarker/core/CTemplateNumberFormatTest.java
diff --git a/src/test/java/freemarker/core/CallerTemplateNameTest.java b/freemarker-test/src/test/java/freemarker/core/CallerTemplateNameTest.java
similarity index 100%
rename from src/test/java/freemarker/core/CallerTemplateNameTest.java
rename to freemarker-test/src/test/java/freemarker/core/CallerTemplateNameTest.java
diff --git a/src/test/java/freemarker/core/CamelCaseTest.java b/freemarker-test/src/test/java/freemarker/core/CamelCaseTest.java
similarity index 100%
rename from src/test/java/freemarker/core/CamelCaseTest.java
rename to freemarker-test/src/test/java/freemarker/core/CamelCaseTest.java
diff --git a/src/test/java/freemarker/core/CanonicalFormTest.java b/freemarker-test/src/test/java/freemarker/core/CanonicalFormTest.java
similarity index 100%
rename from src/test/java/freemarker/core/CanonicalFormTest.java
rename to freemarker-test/src/test/java/freemarker/core/CanonicalFormTest.java
diff --git a/src/test/java/freemarker/core/CapturingAssignmentTest.java b/freemarker-test/src/test/java/freemarker/core/CapturingAssignmentTest.java
similarity index 100%
rename from src/test/java/freemarker/core/CapturingAssignmentTest.java
rename to freemarker-test/src/test/java/freemarker/core/CapturingAssignmentTest.java
diff --git a/src/test/java/freemarker/core/CoercionToTextualTest.java b/freemarker-test/src/test/java/freemarker/core/CoercionToTextualTest.java
similarity index 100%
rename from src/test/java/freemarker/core/CoercionToTextualTest.java
rename to freemarker-test/src/test/java/freemarker/core/CoercionToTextualTest.java
diff --git a/src/test/java/freemarker/core/CombinedMarkupOutputFormatTest.java b/freemarker-test/src/test/java/freemarker/core/CombinedMarkupOutputFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/core/CombinedMarkupOutputFormatTest.java
rename to freemarker-test/src/test/java/freemarker/core/CombinedMarkupOutputFormatTest.java
diff --git a/src/test/java/freemarker/core/ConcatenatedSequenceTest.java b/freemarker-test/src/test/java/freemarker/core/ConcatenatedSequenceTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ConcatenatedSequenceTest.java
rename to freemarker-test/src/test/java/freemarker/core/ConcatenatedSequenceTest.java
diff --git a/src/test/java/freemarker/core/ConfigurableTest.java b/freemarker-test/src/test/java/freemarker/core/ConfigurableTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ConfigurableTest.java
rename to freemarker-test/src/test/java/freemarker/core/ConfigurableTest.java
diff --git a/src/test/java/freemarker/core/CoreLocaleUtilsTest.java b/freemarker-test/src/test/java/freemarker/core/CoreLocaleUtilsTest.java
similarity index 100%
rename from src/test/java/freemarker/core/CoreLocaleUtilsTest.java
rename to freemarker-test/src/test/java/freemarker/core/CoreLocaleUtilsTest.java
diff --git a/src/test/java/freemarker/core/CustomCFormat.java b/freemarker-test/src/test/java/freemarker/core/CustomCFormat.java
similarity index 100%
rename from src/test/java/freemarker/core/CustomCFormat.java
rename to freemarker-test/src/test/java/freemarker/core/CustomCFormat.java
diff --git a/src/test/java/freemarker/core/CustomHTMLOutputFormat.java b/freemarker-test/src/test/java/freemarker/core/CustomHTMLOutputFormat.java
similarity index 100%
rename from src/test/java/freemarker/core/CustomHTMLOutputFormat.java
rename to freemarker-test/src/test/java/freemarker/core/CustomHTMLOutputFormat.java
diff --git a/src/test/java/freemarker/core/CustomTemplateHTMLModel.java b/freemarker-test/src/test/java/freemarker/core/CustomTemplateHTMLModel.java
similarity index 100%
rename from src/test/java/freemarker/core/CustomTemplateHTMLModel.java
rename to freemarker-test/src/test/java/freemarker/core/CustomTemplateHTMLModel.java
diff --git a/src/test/java/freemarker/core/DateFormatTest.java b/freemarker-test/src/test/java/freemarker/core/DateFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/core/DateFormatTest.java
rename to freemarker-test/src/test/java/freemarker/core/DateFormatTest.java
diff --git a/src/test/java/freemarker/core/DefaultTruncateBuiltinAlgorithmTest.java b/freemarker-test/src/test/java/freemarker/core/DefaultTruncateBuiltinAlgorithmTest.java
similarity index 100%
rename from src/test/java/freemarker/core/DefaultTruncateBuiltinAlgorithmTest.java
rename to freemarker-test/src/test/java/freemarker/core/DefaultTruncateBuiltinAlgorithmTest.java
diff --git a/src/test/java/freemarker/core/DirectiveCallPlaceTest.java b/freemarker-test/src/test/java/freemarker/core/DirectiveCallPlaceTest.java
similarity index 100%
rename from src/test/java/freemarker/core/DirectiveCallPlaceTest.java
rename to freemarker-test/src/test/java/freemarker/core/DirectiveCallPlaceTest.java
diff --git a/src/test/java/freemarker/core/DummyOutputFormat.java b/freemarker-test/src/test/java/freemarker/core/DummyOutputFormat.java
similarity index 100%
rename from src/test/java/freemarker/core/DummyOutputFormat.java
rename to freemarker-test/src/test/java/freemarker/core/DummyOutputFormat.java
diff --git a/src/test/java/freemarker/core/EncodingOverrideTest.java b/freemarker-test/src/test/java/freemarker/core/EncodingOverrideTest.java
similarity index 100%
rename from src/test/java/freemarker/core/EncodingOverrideTest.java
rename to freemarker-test/src/test/java/freemarker/core/EncodingOverrideTest.java
diff --git a/src/test/java/freemarker/core/EndTagSyntaxTest.java b/freemarker-test/src/test/java/freemarker/core/EndTagSyntaxTest.java
similarity index 100%
rename from src/test/java/freemarker/core/EndTagSyntaxTest.java
rename to freemarker-test/src/test/java/freemarker/core/EndTagSyntaxTest.java
diff --git a/src/test/java/freemarker/core/EnvironmentCustomStateTest.java b/freemarker-test/src/test/java/freemarker/core/EnvironmentCustomStateTest.java
similarity index 100%
rename from src/test/java/freemarker/core/EnvironmentCustomStateTest.java
rename to freemarker-test/src/test/java/freemarker/core/EnvironmentCustomStateTest.java
diff --git a/src/test/java/freemarker/core/EnvironmentGetTemplateVariantsTest.java b/freemarker-test/src/test/java/freemarker/core/EnvironmentGetTemplateVariantsTest.java
similarity index 100%
rename from src/test/java/freemarker/core/EnvironmentGetTemplateVariantsTest.java
rename to freemarker-test/src/test/java/freemarker/core/EnvironmentGetTemplateVariantsTest.java
diff --git a/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java b/freemarker-test/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java
similarity index 100%
rename from src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java
rename to freemarker-test/src/test/java/freemarker/core/EpochMillisDivTemplateDateFormatFactory.java
diff --git a/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java b/freemarker-test/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java
similarity index 100%
rename from src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java
rename to freemarker-test/src/test/java/freemarker/core/EpochMillisTemplateDateFormatFactory.java
diff --git a/src/test/java/freemarker/core/EvalJsonBuiltInTest.java b/freemarker-test/src/test/java/freemarker/core/EvalJsonBuiltInTest.java
similarity index 100%
rename from src/test/java/freemarker/core/EvalJsonBuiltInTest.java
rename to freemarker-test/src/test/java/freemarker/core/EvalJsonBuiltInTest.java
diff --git a/src/test/java/freemarker/core/ExtendedDecimalFormatTest.java b/freemarker-test/src/test/java/freemarker/core/ExtendedDecimalFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ExtendedDecimalFormatTest.java
rename to freemarker-test/src/test/java/freemarker/core/ExtendedDecimalFormatTest.java
diff --git a/src/test/java/freemarker/core/FilterBiTest.java b/freemarker-test/src/test/java/freemarker/core/FilterBiTest.java
similarity index 100%
rename from src/test/java/freemarker/core/FilterBiTest.java
rename to freemarker-test/src/test/java/freemarker/core/FilterBiTest.java
diff --git a/src/test/java/freemarker/core/GetOptionalTemplateTest.java b/freemarker-test/src/test/java/freemarker/core/GetOptionalTemplateTest.java
similarity index 100%
rename from src/test/java/freemarker/core/GetOptionalTemplateTest.java
rename to freemarker-test/src/test/java/freemarker/core/GetOptionalTemplateTest.java
diff --git a/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java b/freemarker-test/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java
similarity index 100%
rename from src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java
rename to freemarker-test/src/test/java/freemarker/core/HTMLISOTemplateDateFormatFactory.java
diff --git a/src/test/java/freemarker/core/HTMLOutputFormatTest.java b/freemarker-test/src/test/java/freemarker/core/HTMLOutputFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/core/HTMLOutputFormatTest.java
rename to freemarker-test/src/test/java/freemarker/core/HTMLOutputFormatTest.java
diff --git a/src/test/java/freemarker/core/HeaderParsingTest.java b/freemarker-test/src/test/java/freemarker/core/HeaderParsingTest.java
similarity index 100%
rename from src/test/java/freemarker/core/HeaderParsingTest.java
rename to freemarker-test/src/test/java/freemarker/core/HeaderParsingTest.java
diff --git a/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java b/freemarker-test/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java
similarity index 100%
rename from src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java
rename to freemarker-test/src/test/java/freemarker/core/HexTemplateNumberFormatFactory.java
diff --git a/src/test/java/freemarker/core/IncludeAndImportConfigurableLayersTest.java b/freemarker-test/src/test/java/freemarker/core/IncludeAndImportConfigurableLayersTest.java
similarity index 100%
rename from src/test/java/freemarker/core/IncludeAndImportConfigurableLayersTest.java
rename to freemarker-test/src/test/java/freemarker/core/IncludeAndImportConfigurableLayersTest.java
diff --git a/src/test/java/freemarker/core/IncludeAndImportTest.java b/freemarker-test/src/test/java/freemarker/core/IncludeAndImportTest.java
similarity index 100%
rename from src/test/java/freemarker/core/IncludeAndImportTest.java
rename to freemarker-test/src/test/java/freemarker/core/IncludeAndImportTest.java
diff --git a/src/test/java/freemarker/core/InterpolationSyntaxTest.java b/freemarker-test/src/test/java/freemarker/core/InterpolationSyntaxTest.java
similarity index 100%
rename from src/test/java/freemarker/core/InterpolationSyntaxTest.java
rename to freemarker-test/src/test/java/freemarker/core/InterpolationSyntaxTest.java
diff --git a/src/test/java/freemarker/core/InterpretAndEvalTemplateNameTest.java b/freemarker-test/src/test/java/freemarker/core/InterpretAndEvalTemplateNameTest.java
similarity index 100%
rename from src/test/java/freemarker/core/InterpretAndEvalTemplateNameTest.java
rename to freemarker-test/src/test/java/freemarker/core/InterpretAndEvalTemplateNameTest.java
diff --git a/src/test/java/freemarker/core/InterpretSettingInheritanceTest.java b/freemarker-test/src/test/java/freemarker/core/InterpretSettingInheritanceTest.java
similarity index 100%
rename from src/test/java/freemarker/core/InterpretSettingInheritanceTest.java
rename to freemarker-test/src/test/java/freemarker/core/InterpretSettingInheritanceTest.java
diff --git a/src/test/java/freemarker/core/IteratorIssuesTest.java b/freemarker-test/src/test/java/freemarker/core/IteratorIssuesTest.java
similarity index 100%
rename from src/test/java/freemarker/core/IteratorIssuesTest.java
rename to freemarker-test/src/test/java/freemarker/core/IteratorIssuesTest.java
diff --git a/src/test/java/freemarker/core/JSONParserTest.java b/freemarker-test/src/test/java/freemarker/core/JSONParserTest.java
similarity index 100%
rename from src/test/java/freemarker/core/JSONParserTest.java
rename to freemarker-test/src/test/java/freemarker/core/JSONParserTest.java
diff --git a/src/test/java/freemarker/core/LambdaParsingTest.java b/freemarker-test/src/test/java/freemarker/core/LambdaParsingTest.java
similarity index 100%
rename from src/test/java/freemarker/core/LambdaParsingTest.java
rename to freemarker-test/src/test/java/freemarker/core/LambdaParsingTest.java
diff --git a/src/test/java/freemarker/core/LamdaAndEscapeTest.java b/freemarker-test/src/test/java/freemarker/core/LamdaAndEscapeTest.java
similarity index 100%
rename from src/test/java/freemarker/core/LamdaAndEscapeTest.java
rename to freemarker-test/src/test/java/freemarker/core/LamdaAndEscapeTest.java
diff --git a/src/test/java/freemarker/core/LazilyGeneratedCollectionTest.java b/freemarker-test/src/test/java/freemarker/core/LazilyGeneratedCollectionTest.java
similarity index 100%
rename from src/test/java/freemarker/core/LazilyGeneratedCollectionTest.java
rename to freemarker-test/src/test/java/freemarker/core/LazilyGeneratedCollectionTest.java
diff --git a/src/test/java/freemarker/core/LegacyFMParserConstructorsTest.java b/freemarker-test/src/test/java/freemarker/core/LegacyFMParserConstructorsTest.java
similarity index 100%
rename from src/test/java/freemarker/core/LegacyFMParserConstructorsTest.java
rename to freemarker-test/src/test/java/freemarker/core/LegacyFMParserConstructorsTest.java
diff --git a/src/test/java/freemarker/core/ListBreakContinueTest.java b/freemarker-test/src/test/java/freemarker/core/ListBreakContinueTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ListBreakContinueTest.java
rename to freemarker-test/src/test/java/freemarker/core/ListBreakContinueTest.java
diff --git a/src/test/java/freemarker/core/ListErrorsTest.java b/freemarker-test/src/test/java/freemarker/core/ListErrorsTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ListErrorsTest.java
rename to freemarker-test/src/test/java/freemarker/core/ListErrorsTest.java
diff --git a/src/test/java/freemarker/core/ListWithStreamLikeBuiltinsTest.java b/freemarker-test/src/test/java/freemarker/core/ListWithStreamLikeBuiltinsTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ListWithStreamLikeBuiltinsTest.java
rename to freemarker-test/src/test/java/freemarker/core/ListWithStreamLikeBuiltinsTest.java
diff --git a/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java b/freemarker-test/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java
similarity index 100%
rename from src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java
rename to freemarker-test/src/test/java/freemarker/core/LocAndTZSensitiveTemplateDateFormatFactory.java
diff --git a/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java b/freemarker-test/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java
similarity index 100%
rename from src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java
rename to freemarker-test/src/test/java/freemarker/core/LocaleSensitiveTemplateNumberFormatFactory.java
diff --git a/src/test/java/freemarker/core/MapBiTest.java b/freemarker-test/src/test/java/freemarker/core/MapBiTest.java
similarity index 100%
rename from src/test/java/freemarker/core/MapBiTest.java
rename to freemarker-test/src/test/java/freemarker/core/MapBiTest.java
diff --git a/src/test/java/freemarker/core/MinMaxBITest.java b/freemarker-test/src/test/java/freemarker/core/MinMaxBITest.java
similarity index 100%
rename from src/test/java/freemarker/core/MinMaxBITest.java
rename to freemarker-test/src/test/java/freemarker/core/MinMaxBITest.java
diff --git a/src/test/java/freemarker/core/MiscErrorMessagesTest.java b/freemarker-test/src/test/java/freemarker/core/MiscErrorMessagesTest.java
similarity index 100%
rename from src/test/java/freemarker/core/MiscErrorMessagesTest.java
rename to freemarker-test/src/test/java/freemarker/core/MiscErrorMessagesTest.java
diff --git a/src/test/java/freemarker/core/NullTransparencyTest.java b/freemarker-test/src/test/java/freemarker/core/NullTransparencyTest.java
similarity index 100%
rename from src/test/java/freemarker/core/NullTransparencyTest.java
rename to freemarker-test/src/test/java/freemarker/core/NullTransparencyTest.java
diff --git a/src/test/java/freemarker/core/NumberBiTest.java b/freemarker-test/src/test/java/freemarker/core/NumberBiTest.java
similarity index 100%
rename from src/test/java/freemarker/core/NumberBiTest.java
rename to freemarker-test/src/test/java/freemarker/core/NumberBiTest.java
diff --git a/src/test/java/freemarker/core/NumberFormatTest.java b/freemarker-test/src/test/java/freemarker/core/NumberFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/core/NumberFormatTest.java
rename to freemarker-test/src/test/java/freemarker/core/NumberFormatTest.java
diff --git a/src/test/java/freemarker/core/ObjectBuilderSettingsTest.java b/freemarker-test/src/test/java/freemarker/core/ObjectBuilderSettingsTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ObjectBuilderSettingsTest.java
rename to freemarker-test/src/test/java/freemarker/core/ObjectBuilderSettingsTest.java
diff --git a/src/test/java/freemarker/core/OptInTemplateClassResolverTest.java b/freemarker-test/src/test/java/freemarker/core/OptInTemplateClassResolverTest.java
similarity index 100%
rename from src/test/java/freemarker/core/OptInTemplateClassResolverTest.java
rename to freemarker-test/src/test/java/freemarker/core/OptInTemplateClassResolverTest.java
diff --git a/src/test/java/freemarker/core/OutputFormatTest.java b/freemarker-test/src/test/java/freemarker/core/OutputFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/core/OutputFormatTest.java
rename to freemarker-test/src/test/java/freemarker/core/OutputFormatTest.java
diff --git a/src/test/java/freemarker/core/ParseTimeParameterBIErrorMessagesTest.java b/freemarker-test/src/test/java/freemarker/core/ParseTimeParameterBIErrorMessagesTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ParseTimeParameterBIErrorMessagesTest.java
rename to freemarker-test/src/test/java/freemarker/core/ParseTimeParameterBIErrorMessagesTest.java
diff --git a/src/test/java/freemarker/core/ParsingErrorMessagesTest.java b/freemarker-test/src/test/java/freemarker/core/ParsingErrorMessagesTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ParsingErrorMessagesTest.java
rename to freemarker-test/src/test/java/freemarker/core/ParsingErrorMessagesTest.java
diff --git a/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java b/freemarker-test/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java
similarity index 100%
rename from src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java
rename to freemarker-test/src/test/java/freemarker/core/PrintfGTemplateNumberFormatFactory.java
diff --git a/src/test/java/freemarker/core/RTFOutputFormatTest.java b/freemarker-test/src/test/java/freemarker/core/RTFOutputFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/core/RTFOutputFormatTest.java
rename to freemarker-test/src/test/java/freemarker/core/RTFOutputFormatTest.java
diff --git a/src/test/java/freemarker/core/SQLTimeZoneTest.java b/freemarker-test/src/test/java/freemarker/core/SQLTimeZoneTest.java
similarity index 100%
rename from src/test/java/freemarker/core/SQLTimeZoneTest.java
rename to freemarker-test/src/test/java/freemarker/core/SQLTimeZoneTest.java
diff --git a/src/test/java/freemarker/core/SeldomEscapedOutputFormat.java b/freemarker-test/src/test/java/freemarker/core/SeldomEscapedOutputFormat.java
similarity index 100%
rename from src/test/java/freemarker/core/SeldomEscapedOutputFormat.java
rename to freemarker-test/src/test/java/freemarker/core/SeldomEscapedOutputFormat.java
diff --git a/src/test/java/freemarker/core/SequenceBuiltInTest.java b/freemarker-test/src/test/java/freemarker/core/SequenceBuiltInTest.java
similarity index 100%
rename from src/test/java/freemarker/core/SequenceBuiltInTest.java
rename to freemarker-test/src/test/java/freemarker/core/SequenceBuiltInTest.java
diff --git a/src/test/java/freemarker/core/SettingDirectiveTest.java b/freemarker-test/src/test/java/freemarker/core/SettingDirectiveTest.java
similarity index 100%
rename from src/test/java/freemarker/core/SettingDirectiveTest.java
rename to freemarker-test/src/test/java/freemarker/core/SettingDirectiveTest.java
diff --git a/src/test/java/freemarker/core/SpecialVariableTest.java b/freemarker-test/src/test/java/freemarker/core/SpecialVariableTest.java
similarity index 100%
rename from src/test/java/freemarker/core/SpecialVariableTest.java
rename to freemarker-test/src/test/java/freemarker/core/SpecialVariableTest.java
diff --git a/src/test/java/freemarker/core/StringLiteralInterpolationTest.java b/freemarker-test/src/test/java/freemarker/core/StringLiteralInterpolationTest.java
similarity index 100%
rename from src/test/java/freemarker/core/StringLiteralInterpolationTest.java
rename to freemarker-test/src/test/java/freemarker/core/StringLiteralInterpolationTest.java
diff --git a/src/test/java/freemarker/core/TabSizeTest.java b/freemarker-test/src/test/java/freemarker/core/TabSizeTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TabSizeTest.java
rename to freemarker-test/src/test/java/freemarker/core/TabSizeTest.java
diff --git a/src/test/java/freemarker/core/TagSyntaxVariationsTest.java b/freemarker-test/src/test/java/freemarker/core/TagSyntaxVariationsTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TagSyntaxVariationsTest.java
rename to freemarker-test/src/test/java/freemarker/core/TagSyntaxVariationsTest.java
diff --git a/src/test/java/freemarker/core/TakeWhileAndDropWhileBiTest.java b/freemarker-test/src/test/java/freemarker/core/TakeWhileAndDropWhileBiTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TakeWhileAndDropWhileBiTest.java
rename to freemarker-test/src/test/java/freemarker/core/TakeWhileAndDropWhileBiTest.java
diff --git a/src/test/java/freemarker/core/TemplatGetEncodingTest.java b/freemarker-test/src/test/java/freemarker/core/TemplatGetEncodingTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TemplatGetEncodingTest.java
rename to freemarker-test/src/test/java/freemarker/core/TemplatGetEncodingTest.java
diff --git a/src/test/java/freemarker/core/TemplateConfigurationTest.java b/freemarker-test/src/test/java/freemarker/core/TemplateConfigurationTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TemplateConfigurationTest.java
rename to freemarker-test/src/test/java/freemarker/core/TemplateConfigurationTest.java
diff --git a/src/test/java/freemarker/core/TemplateConfigurationWithTemplateCacheTest.java b/freemarker-test/src/test/java/freemarker/core/TemplateConfigurationWithTemplateCacheTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TemplateConfigurationWithTemplateCacheTest.java
rename to freemarker-test/src/test/java/freemarker/core/TemplateConfigurationWithTemplateCacheTest.java
diff --git a/src/test/java/freemarker/core/TemplateDummyOutputModel.java b/freemarker-test/src/test/java/freemarker/core/TemplateDummyOutputModel.java
similarity index 100%
rename from src/test/java/freemarker/core/TemplateDummyOutputModel.java
rename to freemarker-test/src/test/java/freemarker/core/TemplateDummyOutputModel.java
diff --git a/src/test/java/freemarker/core/TemplateLevelSettings.java b/freemarker-test/src/test/java/freemarker/core/TemplateLevelSettings.java
similarity index 100%
rename from src/test/java/freemarker/core/TemplateLevelSettings.java
rename to freemarker-test/src/test/java/freemarker/core/TemplateLevelSettings.java
diff --git a/src/test/java/freemarker/core/TemplateNameSpecialVariablesTest.java b/freemarker-test/src/test/java/freemarker/core/TemplateNameSpecialVariablesTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TemplateNameSpecialVariablesTest.java
rename to freemarker-test/src/test/java/freemarker/core/TemplateNameSpecialVariablesTest.java
diff --git a/src/test/java/freemarker/core/TemplateProcessingTracerTest.java b/freemarker-test/src/test/java/freemarker/core/TemplateProcessingTracerTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TemplateProcessingTracerTest.java
rename to freemarker-test/src/test/java/freemarker/core/TemplateProcessingTracerTest.java
diff --git a/src/test/java/freemarker/core/TemplateSeldomEscapedOutputModel.java b/freemarker-test/src/test/java/freemarker/core/TemplateSeldomEscapedOutputModel.java
similarity index 100%
rename from src/test/java/freemarker/core/TemplateSeldomEscapedOutputModel.java
rename to freemarker-test/src/test/java/freemarker/core/TemplateSeldomEscapedOutputModel.java
diff --git a/src/test/java/freemarker/core/TemplateTransformModelTest.java b/freemarker-test/src/test/java/freemarker/core/TemplateTransformModelTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TemplateTransformModelTest.java
rename to freemarker-test/src/test/java/freemarker/core/TemplateTransformModelTest.java
diff --git a/src/test/java/freemarker/core/ThreadInterruptingSupportTest.java b/freemarker-test/src/test/java/freemarker/core/ThreadInterruptingSupportTest.java
similarity index 100%
rename from src/test/java/freemarker/core/ThreadInterruptingSupportTest.java
rename to freemarker-test/src/test/java/freemarker/core/ThreadInterruptingSupportTest.java
diff --git a/src/test/java/freemarker/core/TruncateBuiltInTest.java b/freemarker-test/src/test/java/freemarker/core/TruncateBuiltInTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TruncateBuiltInTest.java
rename to freemarker-test/src/test/java/freemarker/core/TruncateBuiltInTest.java
diff --git a/src/test/java/freemarker/core/TypeErrorMessagesTest.java b/freemarker-test/src/test/java/freemarker/core/TypeErrorMessagesTest.java
similarity index 100%
rename from src/test/java/freemarker/core/TypeErrorMessagesTest.java
rename to freemarker-test/src/test/java/freemarker/core/TypeErrorMessagesTest.java
diff --git a/src/test/java/freemarker/core/UncheckedExceptionHandlingTest.java b/freemarker-test/src/test/java/freemarker/core/UncheckedExceptionHandlingTest.java
similarity index 100%
rename from src/test/java/freemarker/core/UncheckedExceptionHandlingTest.java
rename to freemarker-test/src/test/java/freemarker/core/UncheckedExceptionHandlingTest.java
diff --git a/src/test/java/freemarker/core/UnclosedCommentTest.java b/freemarker-test/src/test/java/freemarker/core/UnclosedCommentTest.java
similarity index 100%
rename from src/test/java/freemarker/core/UnclosedCommentTest.java
rename to freemarker-test/src/test/java/freemarker/core/UnclosedCommentTest.java
diff --git a/src/test/java/freemarker/core/WhitespaceStrippingTest.java b/freemarker-test/src/test/java/freemarker/core/WhitespaceStrippingTest.java
similarity index 100%
rename from src/test/java/freemarker/core/WhitespaceStrippingTest.java
rename to freemarker-test/src/test/java/freemarker/core/WhitespaceStrippingTest.java
diff --git a/src/test/java/freemarker/core/WithArgsBuiltInTest.java b/freemarker-test/src/test/java/freemarker/core/WithArgsBuiltInTest.java
similarity index 100%
rename from src/test/java/freemarker/core/WithArgsBuiltInTest.java
rename to freemarker-test/src/test/java/freemarker/core/WithArgsBuiltInTest.java
diff --git a/src/test/java/freemarker/core/XHTMLOutputFormatTest.java b/freemarker-test/src/test/java/freemarker/core/XHTMLOutputFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/core/XHTMLOutputFormatTest.java
rename to freemarker-test/src/test/java/freemarker/core/XHTMLOutputFormatTest.java
diff --git a/src/test/java/freemarker/core/XMLOutputFormatTest.java b/freemarker-test/src/test/java/freemarker/core/XMLOutputFormatTest.java
similarity index 100%
rename from src/test/java/freemarker/core/XMLOutputFormatTest.java
rename to freemarker-test/src/test/java/freemarker/core/XMLOutputFormatTest.java
diff --git a/src/test/java/freemarker/core/subpkg/PackageVisibleAll.java b/freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAll.java
similarity index 100%
rename from src/test/java/freemarker/core/subpkg/PackageVisibleAll.java
rename to freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAll.java
diff --git a/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilder.java b/freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilder.java
similarity index 100%
rename from src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilder.java
rename to freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilder.java
diff --git a/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilderBuilder.java b/freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilderBuilder.java
similarity index 100%
rename from src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilderBuilder.java
rename to freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleAllWithBuilderBuilder.java
diff --git a/src/test/java/freemarker/core/subpkg/PackageVisibleWithPublicConstructor.java b/freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleWithPublicConstructor.java
similarity index 100%
rename from src/test/java/freemarker/core/subpkg/PackageVisibleWithPublicConstructor.java
rename to freemarker-test/src/test/java/freemarker/core/subpkg/PackageVisibleWithPublicConstructor.java
diff --git a/src/test/java/freemarker/core/subpkg/PublicAll.java b/freemarker-test/src/test/java/freemarker/core/subpkg/PublicAll.java
similarity index 100%
rename from src/test/java/freemarker/core/subpkg/PublicAll.java
rename to freemarker-test/src/test/java/freemarker/core/subpkg/PublicAll.java
diff --git a/src/test/java/freemarker/core/subpkg/PublicWithMixedConstructors.java b/freemarker-test/src/test/java/freemarker/core/subpkg/PublicWithMixedConstructors.java
similarity index 100%
rename from src/test/java/freemarker/core/subpkg/PublicWithMixedConstructors.java
rename to freemarker-test/src/test/java/freemarker/core/subpkg/PublicWithMixedConstructors.java
diff --git a/src/test/java/freemarker/core/subpkg/PublicWithPackageVisibleConstructor.java b/freemarker-test/src/test/java/freemarker/core/subpkg/PublicWithPackageVisibleConstructor.java
similarity index 100%
rename from src/test/java/freemarker/core/subpkg/PublicWithPackageVisibleConstructor.java
rename to freemarker-test/src/test/java/freemarker/core/subpkg/PublicWithPackageVisibleConstructor.java
diff --git a/src/test/java/freemarker/ext/beans/AbstractParallelIntrospectionTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/AbstractParallelIntrospectionTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/AbstractParallelIntrospectionTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/AbstractParallelIntrospectionTest.java
diff --git a/src/test/java/freemarker/ext/beans/AlphabeticalMethodSorter.java b/freemarker-test/src/test/java/freemarker/ext/beans/AlphabeticalMethodSorter.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/AlphabeticalMethodSorter.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/AlphabeticalMethodSorter.java
diff --git a/src/test/java/freemarker/ext/beans/BeansAPINewInstanceTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansAPINewInstanceTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansAPINewInstanceTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansAPINewInstanceTest.java
diff --git a/src/test/java/freemarker/ext/beans/BeansWrapperBasics.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperBasics.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansWrapperBasics.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperBasics.java
diff --git a/src/test/java/freemarker/ext/beans/BeansWrapperCachesTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperCachesTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansWrapperCachesTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperCachesTest.java
diff --git a/src/test/java/freemarker/ext/beans/BeansWrapperDesc2003020.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperDesc2003020.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansWrapperDesc2003020.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperDesc2003020.java
diff --git a/src/test/java/freemarker/ext/beans/BeansWrapperDesc2003021.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperDesc2003021.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansWrapperDesc2003021.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperDesc2003021.java
diff --git a/src/test/java/freemarker/ext/beans/BeansWrapperInc2003020.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperInc2003020.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansWrapperInc2003020.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperInc2003020.java
diff --git a/src/test/java/freemarker/ext/beans/BeansWrapperInc2003021.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperInc2003021.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansWrapperInc2003021.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperInc2003021.java
diff --git a/src/test/java/freemarker/ext/beans/BeansWrapperMiscTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperMiscTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansWrapperMiscTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperMiscTest.java
diff --git a/src/test/java/freemarker/ext/beans/BeansWrapperReadOnlyTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperReadOnlyTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansWrapperReadOnlyTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperReadOnlyTest.java
diff --git a/src/test/java/freemarker/ext/beans/BeansWrapperSingletonsTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperSingletonsTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansWrapperSingletonsTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperSingletonsTest.java
diff --git a/src/test/java/freemarker/ext/beans/BeansWrapperWithShortedMethods.java b/freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperWithShortedMethods.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BeansWrapperWithShortedMethods.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BeansWrapperWithShortedMethods.java
diff --git a/src/test/java/freemarker/ext/beans/BridgeMethodsBean.java b/freemarker-test/src/test/java/freemarker/ext/beans/BridgeMethodsBean.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BridgeMethodsBean.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BridgeMethodsBean.java
diff --git a/src/test/java/freemarker/ext/beans/BridgeMethodsBeanBase.java b/freemarker-test/src/test/java/freemarker/ext/beans/BridgeMethodsBeanBase.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/BridgeMethodsBeanBase.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/BridgeMethodsBeanBase.java
diff --git a/src/test/java/freemarker/ext/beans/CommonSupertypeForUnwrappingHintTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/CommonSupertypeForUnwrappingHintTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/CommonSupertypeForUnwrappingHintTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/CommonSupertypeForUnwrappingHintTest.java
diff --git a/src/test/java/freemarker/ext/beans/DefaultMemberAccessPolicyTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/DefaultMemberAccessPolicyTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/DefaultMemberAccessPolicyTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/DefaultMemberAccessPolicyTest.java
diff --git a/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003020.java b/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003020.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003020.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003020.java
diff --git a/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003021.java b/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003021.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003021.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003021.java
diff --git a/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003022.java b/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003022.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003022.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperDesc2003022.java
diff --git a/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003020.java b/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003020.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003020.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003020.java
diff --git a/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003021.java b/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003021.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003021.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003021.java
diff --git a/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003022.java b/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003022.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003022.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperInc2003022.java
diff --git a/src/test/java/freemarker/ext/beans/DefaultObjectWrapperMemberAccessPolicyTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperMemberAccessPolicyTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/DefaultObjectWrapperMemberAccessPolicyTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperMemberAccessPolicyTest.java
diff --git a/src/test/java/freemarker/ext/beans/DefaultObjectWrapperWithSortedMethods.java b/freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperWithSortedMethods.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/DefaultObjectWrapperWithSortedMethods.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/DefaultObjectWrapperWithSortedMethods.java
diff --git a/src/test/java/freemarker/ext/beans/EnumModelsTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/EnumModelsTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/EnumModelsTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/EnumModelsTest.java
diff --git a/src/test/java/freemarker/ext/beans/ErrorMessagesTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/ErrorMessagesTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/ErrorMessagesTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/ErrorMessagesTest.java
diff --git a/src/test/java/freemarker/ext/beans/FineTuneMethodAppearanceTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/FineTuneMethodAppearanceTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/FineTuneMethodAppearanceTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/FineTuneMethodAppearanceTest.java
diff --git a/src/test/java/freemarker/ext/beans/GetPropertyNameFromReaderMethodNameTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/GetPropertyNameFromReaderMethodNameTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/GetPropertyNameFromReaderMethodNameTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/GetPropertyNameFromReaderMethodNameTest.java
diff --git a/src/test/java/freemarker/ext/beans/GetlessMethodsAsPropertyGettersRule.java b/freemarker-test/src/test/java/freemarker/ext/beans/GetlessMethodsAsPropertyGettersRule.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/GetlessMethodsAsPropertyGettersRule.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/GetlessMethodsAsPropertyGettersRule.java
diff --git a/src/test/java/freemarker/ext/beans/IsApplicableTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/IsApplicableTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/IsApplicableTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/IsApplicableTest.java
diff --git a/src/test/java/freemarker/ext/beans/IsMoreSpecificParameterTypeTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/IsMoreSpecificParameterTypeTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/IsMoreSpecificParameterTypeTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/IsMoreSpecificParameterTypeTest.java
diff --git a/src/test/java/freemarker/ext/beans/Java7MembersOnlyBeansWrapper.java b/freemarker-test/src/test/java/freemarker/ext/beans/Java7MembersOnlyBeansWrapper.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/Java7MembersOnlyBeansWrapper.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/Java7MembersOnlyBeansWrapper.java
diff --git a/src/test/java/freemarker/ext/beans/Java8BeansWrapperBridgeMethodsTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/Java8BeansWrapperBridgeMethodsTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/Java8BeansWrapperBridgeMethodsTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/Java8BeansWrapperBridgeMethodsTest.java
diff --git a/src/test/java/freemarker/ext/beans/Java8BeansWrapperTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/Java8BeansWrapperTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/Java8BeansWrapperTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/Java8BeansWrapperTest.java
diff --git a/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean.java b/freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean.java
diff --git a/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean2.java b/freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean2.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean2.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBean2.java
diff --git a/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase.java b/freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase.java
diff --git a/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase2.java b/freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase2.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase2.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/Java8BridgeMethodsWithDefaultMethodBeanBase2.java
diff --git a/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBean.java b/freemarker-test/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBean.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/Java8DefaultMethodsBean.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBean.java
diff --git a/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBeanBase.java b/freemarker-test/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBeanBase.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/Java8DefaultMethodsBeanBase.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/Java8DefaultMethodsBeanBase.java
diff --git a/src/test/java/freemarker/ext/beans/Java9InstrospectorBugWorkaroundTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/Java9InstrospectorBugWorkaroundTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/Java9InstrospectorBugWorkaroundTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/Java9InstrospectorBugWorkaroundTest.java
diff --git a/src/test/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicyTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicyTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicyTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/LegacyDefaultMemberAccessPolicyTest.java
diff --git a/src/test/java/freemarker/ext/beans/ManyObjectsOfDifferentClasses.java b/freemarker-test/src/test/java/freemarker/ext/beans/ManyObjectsOfDifferentClasses.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/ManyObjectsOfDifferentClasses.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/ManyObjectsOfDifferentClasses.java
diff --git a/src/test/java/freemarker/ext/beans/ManyStaticsOfDifferentClasses.java b/freemarker-test/src/test/java/freemarker/ext/beans/ManyStaticsOfDifferentClasses.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/ManyStaticsOfDifferentClasses.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/ManyStaticsOfDifferentClasses.java
diff --git a/src/test/java/freemarker/ext/beans/MemberAccessMonitoringTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/MemberAccessMonitoringTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/MemberAccessMonitoringTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/MemberAccessMonitoringTest.java
diff --git a/src/test/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicyTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicyTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicyTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/MemberSelectorListMemberAccessPolicyTest.java
diff --git a/src/test/java/freemarker/ext/beans/MethodMatcherTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/MethodMatcherTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/MethodMatcherTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/MethodMatcherTest.java
diff --git a/src/test/java/freemarker/ext/beans/MethodUtilTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/MethodUtilTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/MethodUtilTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/MethodUtilTest.java
diff --git a/src/test/java/freemarker/ext/beans/MethodUtilTest2.java b/freemarker-test/src/test/java/freemarker/ext/beans/MethodUtilTest2.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/MethodUtilTest2.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/MethodUtilTest2.java
diff --git a/src/test/java/freemarker/ext/beans/MiscNumericalOperationsTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/MiscNumericalOperationsTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/MiscNumericalOperationsTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/MiscNumericalOperationsTest.java
diff --git a/src/test/java/freemarker/ext/beans/ModelCacheTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/ModelCacheTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/ModelCacheTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/ModelCacheTest.java
diff --git a/src/test/java/freemarker/ext/beans/OverloadedNumberUtilTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/OverloadedNumberUtilTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/OverloadedNumberUtilTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/OverloadedNumberUtilTest.java
diff --git a/src/test/java/freemarker/ext/beans/ParameterListPreferabilityTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/ParameterListPreferabilityTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/ParameterListPreferabilityTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/ParameterListPreferabilityTest.java
diff --git a/src/test/java/freemarker/ext/beans/PrallelObjectIntrospectionTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/PrallelObjectIntrospectionTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/PrallelObjectIntrospectionTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/PrallelObjectIntrospectionTest.java
diff --git a/src/test/java/freemarker/ext/beans/PrallelStaticIntrospectionTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/PrallelStaticIntrospectionTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/PrallelStaticIntrospectionTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/PrallelStaticIntrospectionTest.java
diff --git a/src/test/java/freemarker/ext/beans/RationalNumber.java b/freemarker-test/src/test/java/freemarker/ext/beans/RationalNumber.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/RationalNumber.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/RationalNumber.java
diff --git a/src/test/java/freemarker/ext/beans/StaticModelsTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/StaticModelsTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/StaticModelsTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/StaticModelsTest.java
diff --git a/src/test/java/freemarker/ext/beans/TypeFlagsTest.java b/freemarker-test/src/test/java/freemarker/ext/beans/TypeFlagsTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/beans/TypeFlagsTest.java
rename to freemarker-test/src/test/java/freemarker/ext/beans/TypeFlagsTest.java
diff --git a/src/test/java/freemarker/ext/dom/DOMConvenienceStaticsTest.java b/freemarker-test/src/test/java/freemarker/ext/dom/DOMConvenienceStaticsTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/dom/DOMConvenienceStaticsTest.java
rename to freemarker-test/src/test/java/freemarker/ext/dom/DOMConvenienceStaticsTest.java
diff --git a/src/test/java/freemarker/ext/dom/DOMSiblingTest.java b/freemarker-test/src/test/java/freemarker/ext/dom/DOMSiblingTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/dom/DOMSiblingTest.java
rename to freemarker-test/src/test/java/freemarker/ext/dom/DOMSiblingTest.java
diff --git a/src/test/java/freemarker/ext/dom/DOMTest.java b/freemarker-test/src/test/java/freemarker/ext/dom/DOMTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/dom/DOMTest.java
rename to freemarker-test/src/test/java/freemarker/ext/dom/DOMTest.java
diff --git a/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServlet.java b/freemarker-test/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServlet.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/JspTestFreemarkerServlet.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServlet.java
diff --git a/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServletWithDefaultOverride.java b/freemarker-test/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServletWithDefaultOverride.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/JspTestFreemarkerServletWithDefaultOverride.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/JspTestFreemarkerServletWithDefaultOverride.java
diff --git a/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java b/freemarker-test/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/RealServletContainertTest.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/RealServletContainertTest.java
diff --git a/src/test/java/freemarker/ext/jsp/TLDParsingTest.java b/freemarker-test/src/test/java/freemarker/ext/jsp/TLDParsingTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/TLDParsingTest.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/TLDParsingTest.java
diff --git a/src/test/java/freemarker/ext/jsp/TaglibMethodUtilTest.java b/freemarker-test/src/test/java/freemarker/ext/jsp/TaglibMethodUtilTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/TaglibMethodUtilTest.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/TaglibMethodUtilTest.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeAccessorTag.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeAccessorTag.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/AttributeAccessorTag.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeAccessorTag.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeInfoTag.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeInfoTag.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/AttributeInfoTag.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/AttributeInfoTag.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/EnclosingClass.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/EnclosingClass.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/EnclosingClass.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/EnclosingClass.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/GetAndSetTag.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/GetAndSetTag.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/GetAndSetTag.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/GetAndSetTag.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/TestFunctions.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestFunctions.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/TestFunctions.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestFunctions.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag2.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag2.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag2.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag2.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag3.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag3.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag3.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestSimpleTag3.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/TestTag.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag2.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag2.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/TestTag2.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag2.java
diff --git a/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag3.java b/freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag3.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/taglibmembers/TestTag3.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/taglibmembers/TestTag3.java
diff --git a/src/test/java/freemarker/ext/jsp/webapps/config/WebappLocalFreemarkerServlet.java b/freemarker-test/src/test/java/freemarker/ext/jsp/webapps/config/WebappLocalFreemarkerServlet.java
similarity index 100%
rename from src/test/java/freemarker/ext/jsp/webapps/config/WebappLocalFreemarkerServlet.java
rename to freemarker-test/src/test/java/freemarker/ext/jsp/webapps/config/WebappLocalFreemarkerServlet.java
diff --git a/src/test/java/freemarker/ext/servlet/FreemarkerServletTest.java b/freemarker-test/src/test/java/freemarker/ext/servlet/FreemarkerServletTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/servlet/FreemarkerServletTest.java
rename to freemarker-test/src/test/java/freemarker/ext/servlet/FreemarkerServletTest.java
diff --git a/src/test/java/freemarker/ext/servlet/InitParamParserTest.java b/freemarker-test/src/test/java/freemarker/ext/servlet/InitParamParserTest.java
similarity index 100%
rename from src/test/java/freemarker/ext/servlet/InitParamParserTest.java
rename to freemarker-test/src/test/java/freemarker/ext/servlet/InitParamParserTest.java
diff --git a/src/test/java/freemarker/manual/AbsoluteTemplateNameBIExample.java b/freemarker-test/src/test/java/freemarker/manual/AbsoluteTemplateNameBIExample.java
similarity index 100%
rename from src/test/java/freemarker/manual/AbsoluteTemplateNameBIExample.java
rename to freemarker-test/src/test/java/freemarker/manual/AbsoluteTemplateNameBIExample.java
diff --git a/src/test/java/freemarker/manual/AutoEscapingExample.java b/freemarker-test/src/test/java/freemarker/manual/AutoEscapingExample.java
similarity index 100%
rename from src/test/java/freemarker/manual/AutoEscapingExample.java
rename to freemarker-test/src/test/java/freemarker/manual/AutoEscapingExample.java
diff --git a/src/test/java/freemarker/manual/ConfigureOutputFormatExamples.java b/freemarker-test/src/test/java/freemarker/manual/ConfigureOutputFormatExamples.java
similarity index 100%
rename from src/test/java/freemarker/manual/ConfigureOutputFormatExamples.java
rename to freemarker-test/src/test/java/freemarker/manual/ConfigureOutputFormatExamples.java
diff --git a/src/test/java/freemarker/manual/CustomFormatsExample.java b/freemarker-test/src/test/java/freemarker/manual/CustomFormatsExample.java
similarity index 100%
rename from src/test/java/freemarker/manual/CustomFormatsExample.java
rename to freemarker-test/src/test/java/freemarker/manual/CustomFormatsExample.java
diff --git a/src/test/java/freemarker/manual/ExamplesTest.java b/freemarker-test/src/test/java/freemarker/manual/ExamplesTest.java
similarity index 100%
rename from src/test/java/freemarker/manual/ExamplesTest.java
rename to freemarker-test/src/test/java/freemarker/manual/ExamplesTest.java
diff --git a/src/test/java/freemarker/manual/GettingStartedExample.java b/freemarker-test/src/test/java/freemarker/manual/GettingStartedExample.java
similarity index 100%
rename from src/test/java/freemarker/manual/GettingStartedExample.java
rename to freemarker-test/src/test/java/freemarker/manual/GettingStartedExample.java
diff --git a/src/test/java/freemarker/manual/Product.java b/freemarker-test/src/test/java/freemarker/manual/Product.java
similarity index 100%
rename from src/test/java/freemarker/manual/Product.java
rename to freemarker-test/src/test/java/freemarker/manual/Product.java
diff --git a/src/test/java/freemarker/manual/TemplateConfigurationExamples.java b/freemarker-test/src/test/java/freemarker/manual/TemplateConfigurationExamples.java
similarity index 100%
rename from src/test/java/freemarker/manual/TemplateConfigurationExamples.java
rename to freemarker-test/src/test/java/freemarker/manual/TemplateConfigurationExamples.java
diff --git a/src/test/java/freemarker/manual/UnitAwareTemplateNumberFormatFactory.java b/freemarker-test/src/test/java/freemarker/manual/UnitAwareTemplateNumberFormatFactory.java
similarity index 100%
rename from src/test/java/freemarker/manual/UnitAwareTemplateNumberFormatFactory.java
rename to freemarker-test/src/test/java/freemarker/manual/UnitAwareTemplateNumberFormatFactory.java
diff --git a/src/test/java/freemarker/manual/UnitAwareTemplateNumberModel.java b/freemarker-test/src/test/java/freemarker/manual/UnitAwareTemplateNumberModel.java
similarity index 100%
rename from src/test/java/freemarker/manual/UnitAwareTemplateNumberModel.java
rename to freemarker-test/src/test/java/freemarker/manual/UnitAwareTemplateNumberModel.java
diff --git a/src/test/java/freemarker/manual/WithArgsExamples.java b/freemarker-test/src/test/java/freemarker/manual/WithArgsExamples.java
similarity index 100%
rename from src/test/java/freemarker/manual/WithArgsExamples.java
rename to freemarker-test/src/test/java/freemarker/manual/WithArgsExamples.java
diff --git a/src/test/java/freemarker/manual/WithArgsLastExamples.java b/freemarker-test/src/test/java/freemarker/manual/WithArgsLastExamples.java
similarity index 100%
rename from src/test/java/freemarker/manual/WithArgsLastExamples.java
rename to freemarker-test/src/test/java/freemarker/manual/WithArgsLastExamples.java
diff --git a/src/test/java/freemarker/template/ActualNamingConvetionTest.java b/freemarker-test/src/test/java/freemarker/template/ActualNamingConvetionTest.java
similarity index 100%
rename from src/test/java/freemarker/template/ActualNamingConvetionTest.java
rename to freemarker-test/src/test/java/freemarker/template/ActualNamingConvetionTest.java
diff --git a/src/test/java/freemarker/template/ActualTagSyntaxTest.java b/freemarker-test/src/test/java/freemarker/template/ActualTagSyntaxTest.java
similarity index 100%
rename from src/test/java/freemarker/template/ActualTagSyntaxTest.java
rename to freemarker-test/src/test/java/freemarker/template/ActualTagSyntaxTest.java
diff --git a/src/test/java/freemarker/template/ConfigurationTest.java b/freemarker-test/src/test/java/freemarker/template/ConfigurationTest.java
similarity index 100%
rename from src/test/java/freemarker/template/ConfigurationTest.java
rename to freemarker-test/src/test/java/freemarker/template/ConfigurationTest.java
diff --git a/src/test/java/freemarker/template/CustomAttributeTest.java b/freemarker-test/src/test/java/freemarker/template/CustomAttributeTest.java
similarity index 100%
rename from src/test/java/freemarker/template/CustomAttributeTest.java
rename to freemarker-test/src/test/java/freemarker/template/CustomAttributeTest.java
diff --git a/src/test/java/freemarker/template/DefaultObjectWrapperTest.java b/freemarker-test/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
similarity index 100%
rename from src/test/java/freemarker/template/DefaultObjectWrapperTest.java
rename to freemarker-test/src/test/java/freemarker/template/DefaultObjectWrapperTest.java
diff --git a/src/test/java/freemarker/template/ExceptionTest.java b/freemarker-test/src/test/java/freemarker/template/ExceptionTest.java
similarity index 100%
rename from src/test/java/freemarker/template/ExceptionTest.java
rename to freemarker-test/src/test/java/freemarker/template/ExceptionTest.java
diff --git a/src/test/java/freemarker/template/GetSourceTest.java b/freemarker-test/src/test/java/freemarker/template/GetSourceTest.java
similarity index 100%
rename from src/test/java/freemarker/template/GetSourceTest.java
rename to freemarker-test/src/test/java/freemarker/template/GetSourceTest.java
diff --git a/src/test/java/freemarker/template/IncudeFromNamelessTest.java b/freemarker-test/src/test/java/freemarker/template/IncudeFromNamelessTest.java
similarity index 100%
rename from src/test/java/freemarker/template/IncudeFromNamelessTest.java
rename to freemarker-test/src/test/java/freemarker/template/IncudeFromNamelessTest.java
diff --git a/src/test/java/freemarker/template/JavaCCExceptionAsEOFFixTest.java b/freemarker-test/src/test/java/freemarker/template/JavaCCExceptionAsEOFFixTest.java
similarity index 100%
rename from src/test/java/freemarker/template/JavaCCExceptionAsEOFFixTest.java
rename to freemarker-test/src/test/java/freemarker/template/JavaCCExceptionAsEOFFixTest.java
diff --git a/src/test/java/freemarker/template/MistakenlyPublicImportAPIsTest.java b/freemarker-test/src/test/java/freemarker/template/MistakenlyPublicImportAPIsTest.java
similarity index 100%
rename from src/test/java/freemarker/template/MistakenlyPublicImportAPIsTest.java
rename to freemarker-test/src/test/java/freemarker/template/MistakenlyPublicImportAPIsTest.java
diff --git a/src/test/java/freemarker/template/MistakenlyPublicMacroAPIsTest.java b/freemarker-test/src/test/java/freemarker/template/MistakenlyPublicMacroAPIsTest.java
similarity index 100%
rename from src/test/java/freemarker/template/MistakenlyPublicMacroAPIsTest.java
rename to freemarker-test/src/test/java/freemarker/template/MistakenlyPublicMacroAPIsTest.java
diff --git a/src/test/java/freemarker/template/MockServletContext.java b/freemarker-test/src/test/java/freemarker/template/MockServletContext.java
similarity index 100%
rename from src/test/java/freemarker/template/MockServletContext.java
rename to freemarker-test/src/test/java/freemarker/template/MockServletContext.java
diff --git a/src/test/java/freemarker/template/NullConfigurationTest.java b/freemarker-test/src/test/java/freemarker/template/NullConfigurationTest.java
similarity index 100%
rename from src/test/java/freemarker/template/NullConfigurationTest.java
rename to freemarker-test/src/test/java/freemarker/template/NullConfigurationTest.java
diff --git a/src/test/java/freemarker/template/SimpleObjectWrapperTest.java b/freemarker-test/src/test/java/freemarker/template/SimpleObjectWrapperTest.java
similarity index 100%
rename from src/test/java/freemarker/template/SimpleObjectWrapperTest.java
rename to freemarker-test/src/test/java/freemarker/template/SimpleObjectWrapperTest.java
diff --git a/src/test/java/freemarker/template/StaticObjectWrappersTest.java b/freemarker-test/src/test/java/freemarker/template/StaticObjectWrappersTest.java
similarity index 100%
rename from src/test/java/freemarker/template/StaticObjectWrappersTest.java
rename to freemarker-test/src/test/java/freemarker/template/StaticObjectWrappersTest.java
diff --git a/src/test/java/freemarker/template/TemplateConstructorsTest.java b/freemarker-test/src/test/java/freemarker/template/TemplateConstructorsTest.java
similarity index 100%
rename from src/test/java/freemarker/template/TemplateConstructorsTest.java
rename to freemarker-test/src/test/java/freemarker/template/TemplateConstructorsTest.java
diff --git a/src/test/java/freemarker/template/TemplateLanguageVersionTest.java b/freemarker-test/src/test/java/freemarker/template/TemplateLanguageVersionTest.java
similarity index 100%
rename from src/test/java/freemarker/template/TemplateLanguageVersionTest.java
rename to freemarker-test/src/test/java/freemarker/template/TemplateLanguageVersionTest.java
diff --git a/src/test/java/freemarker/template/TemplateLookupStrategyTest.java b/freemarker-test/src/test/java/freemarker/template/TemplateLookupStrategyTest.java
similarity index 100%
rename from src/test/java/freemarker/template/TemplateLookupStrategyTest.java
rename to freemarker-test/src/test/java/freemarker/template/TemplateLookupStrategyTest.java
diff --git a/src/test/java/freemarker/template/TemplateNotFoundMessageTest.java b/freemarker-test/src/test/java/freemarker/template/TemplateNotFoundMessageTest.java
similarity index 100%
rename from src/test/java/freemarker/template/TemplateNotFoundMessageTest.java
rename to freemarker-test/src/test/java/freemarker/template/TemplateNotFoundMessageTest.java
diff --git a/src/test/java/freemarker/template/VersionTest.java b/freemarker-test/src/test/java/freemarker/template/VersionTest.java
similarity index 100%
rename from src/test/java/freemarker/template/VersionTest.java
rename to freemarker-test/src/test/java/freemarker/template/VersionTest.java
diff --git a/src/test/java/freemarker/template/utility/ConstantsTest.java b/freemarker-test/src/test/java/freemarker/template/utility/ConstantsTest.java
similarity index 100%
rename from src/test/java/freemarker/template/utility/ConstantsTest.java
rename to freemarker-test/src/test/java/freemarker/template/utility/ConstantsTest.java
diff --git a/src/test/java/freemarker/template/utility/DateUtilTest.java b/freemarker-test/src/test/java/freemarker/template/utility/DateUtilTest.java
similarity index 100%
rename from src/test/java/freemarker/template/utility/DateUtilTest.java
rename to freemarker-test/src/test/java/freemarker/template/utility/DateUtilTest.java
diff --git a/src/test/java/freemarker/template/utility/DeepUnwrapTest.java b/freemarker-test/src/test/java/freemarker/template/utility/DeepUnwrapTest.java
similarity index 100%
rename from src/test/java/freemarker/template/utility/DeepUnwrapTest.java
rename to freemarker-test/src/test/java/freemarker/template/utility/DeepUnwrapTest.java
diff --git a/src/test/java/freemarker/template/utility/NumberUtilTest.java b/freemarker-test/src/test/java/freemarker/template/utility/NumberUtilTest.java
similarity index 100%
rename from src/test/java/freemarker/template/utility/NumberUtilTest.java
rename to freemarker-test/src/test/java/freemarker/template/utility/NumberUtilTest.java
diff --git a/src/test/java/freemarker/template/utility/StringUtilTest.java b/freemarker-test/src/test/java/freemarker/template/utility/StringUtilTest.java
similarity index 100%
rename from src/test/java/freemarker/template/utility/StringUtilTest.java
rename to freemarker-test/src/test/java/freemarker/template/utility/StringUtilTest.java
diff --git a/src/test/java/freemarker/template/utility/TemplateModelUtilTest.java b/freemarker-test/src/test/java/freemarker/template/utility/TemplateModelUtilTest.java
similarity index 100%
rename from src/test/java/freemarker/template/utility/TemplateModelUtilTest.java
rename to freemarker-test/src/test/java/freemarker/template/utility/TemplateModelUtilTest.java
diff --git a/src/test/java/freemarker/test/CopyrightCommentRemoverTemplateLoader.java b/freemarker-test/src/test/java/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
similarity index 100%
rename from src/test/java/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
rename to freemarker-test/src/test/java/freemarker/test/CopyrightCommentRemoverTemplateLoader.java
diff --git a/src/test/java/freemarker/test/MonitoredTemplateLoader.java b/freemarker-test/src/test/java/freemarker/test/MonitoredTemplateLoader.java
similarity index 100%
rename from src/test/java/freemarker/test/MonitoredTemplateLoader.java
rename to freemarker-test/src/test/java/freemarker/test/MonitoredTemplateLoader.java
diff --git a/src/test/java/freemarker/test/ResourcesExtractor.java b/freemarker-test/src/test/java/freemarker/test/ResourcesExtractor.java
similarity index 100%
rename from src/test/java/freemarker/test/ResourcesExtractor.java
rename to freemarker-test/src/test/java/freemarker/test/ResourcesExtractor.java
diff --git a/src/test/java/freemarker/test/RuntimeEnvironmentReporterTest.java b/freemarker-test/src/test/java/freemarker/test/RuntimeEnvironmentReporterTest.java
similarity index 100%
rename from src/test/java/freemarker/test/RuntimeEnvironmentReporterTest.java
rename to freemarker-test/src/test/java/freemarker/test/RuntimeEnvironmentReporterTest.java
diff --git a/src/test/java/freemarker/test/TemplateTest.java b/freemarker-test/src/test/java/freemarker/test/TemplateTest.java
similarity index 100%
rename from src/test/java/freemarker/test/TemplateTest.java
rename to freemarker-test/src/test/java/freemarker/test/TemplateTest.java
diff --git a/src/test/java/freemarker/test/TreeView.java b/freemarker-test/src/test/java/freemarker/test/TreeView.java
similarity index 100%
rename from src/test/java/freemarker/test/TreeView.java
rename to freemarker-test/src/test/java/freemarker/test/TreeView.java
diff --git a/src/test/java/freemarker/test/hamcerst/Matchers.java b/freemarker-test/src/test/java/freemarker/test/hamcerst/Matchers.java
similarity index 100%
rename from src/test/java/freemarker/test/hamcerst/Matchers.java
rename to freemarker-test/src/test/java/freemarker/test/hamcerst/Matchers.java
diff --git a/src/test/java/freemarker/test/hamcerst/StringContainsIgnoringCase.java b/freemarker-test/src/test/java/freemarker/test/hamcerst/StringContainsIgnoringCase.java
similarity index 100%
rename from src/test/java/freemarker/test/hamcerst/StringContainsIgnoringCase.java
rename to freemarker-test/src/test/java/freemarker/test/hamcerst/StringContainsIgnoringCase.java
diff --git a/src/test/java/freemarker/test/package.html b/freemarker-test/src/test/java/freemarker/test/package.html
similarity index 100%
rename from src/test/java/freemarker/test/package.html
rename to freemarker-test/src/test/java/freemarker/test/package.html
diff --git a/src/test/java/freemarker/test/servlet/DefaultModel2TesterAction.java b/freemarker-test/src/test/java/freemarker/test/servlet/DefaultModel2TesterAction.java
similarity index 100%
rename from src/test/java/freemarker/test/servlet/DefaultModel2TesterAction.java
rename to freemarker-test/src/test/java/freemarker/test/servlet/DefaultModel2TesterAction.java
diff --git a/src/test/java/freemarker/test/servlet/Model2Action.java b/freemarker-test/src/test/java/freemarker/test/servlet/Model2Action.java
similarity index 100%
rename from src/test/java/freemarker/test/servlet/Model2Action.java
rename to freemarker-test/src/test/java/freemarker/test/servlet/Model2Action.java
diff --git a/src/test/java/freemarker/test/servlet/Model2TesterServlet.java b/freemarker-test/src/test/java/freemarker/test/servlet/Model2TesterServlet.java
similarity index 100%
rename from src/test/java/freemarker/test/servlet/Model2TesterServlet.java
rename to freemarker-test/src/test/java/freemarker/test/servlet/Model2TesterServlet.java
diff --git a/src/test/java/freemarker/test/servlet/WebAppTestCase.java b/freemarker-test/src/test/java/freemarker/test/servlet/WebAppTestCase.java
similarity index 100%
rename from src/test/java/freemarker/test/servlet/WebAppTestCase.java
rename to freemarker-test/src/test/java/freemarker/test/servlet/WebAppTestCase.java
diff --git a/src/test/java/freemarker/test/servlet/web.xml b/freemarker-test/src/test/java/freemarker/test/servlet/web.xml
similarity index 100%
rename from src/test/java/freemarker/test/servlet/web.xml
rename to freemarker-test/src/test/java/freemarker/test/servlet/web.xml
diff --git a/src/test/java/freemarker/test/templatesuite/TemplateTestCase.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/TemplateTestCase.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/TemplateTestCase.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/TemplateTestCase.java
diff --git a/src/test/java/freemarker/test/templatesuite/TemplateTestSuite.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/TemplateTestSuite.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/TemplateTestSuite.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/TemplateTestSuite.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/AllTemplateModels.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/AllTemplateModels.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/AllTemplateModels.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/AllTemplateModels.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/BeanTestClass.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestClass.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/BeanTestClass.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestClass.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/BeanTestInterface.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestInterface.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/BeanTestInterface.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestInterface.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/BeanTestSuperclass.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestSuperclass.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/BeanTestSuperclass.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/BeanTestSuperclass.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/BooleanAndScalarModel.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanAndScalarModel.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/BooleanAndScalarModel.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanAndScalarModel.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/BooleanAndStringTemplateModel.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanAndStringTemplateModel.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/BooleanAndStringTemplateModel.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanAndStringTemplateModel.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/BooleanHash1.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanHash1.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/BooleanHash1.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanHash1.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/BooleanHash2.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanHash2.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/BooleanHash2.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanHash2.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/BooleanList1.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanList1.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/BooleanList1.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanList1.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/BooleanList2.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanList2.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/BooleanList2.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanList2.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/BooleanVsStringMethods.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanVsStringMethods.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/BooleanVsStringMethods.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/BooleanVsStringMethods.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/EnumTestClass.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/EnumTestClass.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/EnumTestClass.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/EnumTestClass.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/ExceptionModel.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/ExceptionModel.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/ExceptionModel.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/ExceptionModel.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/HashAndScalarModel.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/HashAndScalarModel.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/HashAndScalarModel.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/HashAndScalarModel.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/JavaObjectInfo.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/JavaObjectInfo.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/JavaObjectInfo.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/JavaObjectInfo.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/LegacyList.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/LegacyList.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/LegacyList.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/LegacyList.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/Listables.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/Listables.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/Listables.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/Listables.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/MultiModel1.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel1.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/MultiModel1.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel1.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/MultiModel2.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel2.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/MultiModel2.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel2.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/MultiModel3.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel3.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/MultiModel3.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel3.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/MultiModel4.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel4.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/MultiModel4.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel4.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/MultiModel5.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel5.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/MultiModel5.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/MultiModel5.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/NewTestModel.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/NewTestModel.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/NewTestModel.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/NewTestModel.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/NewTestModel2.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/NewTestModel2.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/NewTestModel2.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/NewTestModel2.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/NumberAndStringModel.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/NumberAndStringModel.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/NumberAndStringModel.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/NumberAndStringModel.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/OverloadedConstructor.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedConstructor.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/OverloadedConstructor.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedConstructor.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/OverloadedMethods.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedMethods.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/OverloadedMethods.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedMethods.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/OverloadedMethods2.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedMethods2.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/OverloadedMethods2.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/OverloadedMethods2.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/SimpleTestMethod.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/SimpleTestMethod.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/SimpleTestMethod.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/SimpleTestMethod.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/TransformHashWrapper.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformHashWrapper.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/TransformHashWrapper.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformHashWrapper.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper1.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper1.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper1.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper1.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper2.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper2.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper2.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformMethodWrapper2.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/TransformModel1.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformModel1.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/TransformModel1.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/TransformModel1.java
diff --git a/src/test/java/freemarker/test/templatesuite/models/VarArgTestModel.java b/freemarker-test/src/test/java/freemarker/test/templatesuite/models/VarArgTestModel.java
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/models/VarArgTestModel.java
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/models/VarArgTestModel.java
diff --git a/src/test/java/freemarker/test/templatesuite/package.html b/freemarker-test/src/test/java/freemarker/test/templatesuite/package.html
similarity index 100%
rename from src/test/java/freemarker/test/templatesuite/package.html
rename to freemarker-test/src/test/java/freemarker/test/templatesuite/package.html
diff --git a/src/test/java/freemarker/test/utility/AssertDirective.java b/freemarker-test/src/test/java/freemarker/test/utility/AssertDirective.java
similarity index 100%
rename from src/test/java/freemarker/test/utility/AssertDirective.java
rename to freemarker-test/src/test/java/freemarker/test/utility/AssertDirective.java
diff --git a/src/test/java/freemarker/test/utility/AssertEqualsDirective.java b/freemarker-test/src/test/java/freemarker/test/utility/AssertEqualsDirective.java
similarity index 100%
rename from src/test/java/freemarker/test/utility/AssertEqualsDirective.java
rename to freemarker-test/src/test/java/freemarker/test/utility/AssertEqualsDirective.java
diff --git a/src/test/java/freemarker/test/utility/AssertFailsDirective.java b/freemarker-test/src/test/java/freemarker/test/utility/AssertFailsDirective.java
similarity index 100%
rename from src/test/java/freemarker/test/utility/AssertFailsDirective.java
rename to freemarker-test/src/test/java/freemarker/test/utility/AssertFailsDirective.java
diff --git a/src/test/java/freemarker/test/utility/AssertationFailedInTemplateException.java b/freemarker-test/src/test/java/freemarker/test/utility/AssertationFailedInTemplateException.java
similarity index 100%
rename from src/test/java/freemarker/test/utility/AssertationFailedInTemplateException.java
rename to freemarker-test/src/test/java/freemarker/test/utility/AssertationFailedInTemplateException.java
diff --git a/src/test/java/freemarker/test/utility/BadParameterTypeException.java b/freemarker-test/src/test/java/freemarker/test/utility/BadParameterTypeException.java
similarity index 100%
rename from src/test/java/freemarker/test/utility/BadParameterTypeException.java
rename to freemarker-test/src/test/java/freemarker/test/utility/BadParameterTypeException.java
diff --git a/src/test/java/freemarker/test/utility/FileTestCase.java b/freemarker-test/src/test/java/freemarker/test/utility/FileTestCase.java
similarity index 94%
rename from src/test/java/freemarker/test/utility/FileTestCase.java
rename to freemarker-test/src/test/java/freemarker/test/utility/FileTestCase.java
index 8f4fc75..c35b4c5 100644
--- a/src/test/java/freemarker/test/utility/FileTestCase.java
+++ b/freemarker-test/src/test/java/freemarker/test/utility/FileTestCase.java
@@ -134,12 +134,20 @@
}
@SuppressFBWarnings(value="UI_INHERITANCE_UNSAFE_GETRESOURCE", justification="By design relative to subclass")
- protected final File getTestClassDirectory() throws IOException {
+ private File getTestClassDirectoryLegacy() throws IOException {
URL url = this.getClass().getResource(".");
if (url == null) throw new IOException("Couldn't get resource URL for \".\"");
return new File(url.getFile());
}
+ protected final File getTestClassDirectory() throws IOException {
+ String rootStr = System.getProperty("freemarker.test.resourcesDir");
+ if (rootStr == null) {
+ return getTestClassDirectoryLegacy();
+ }
+ return new File(rootStr, getClass().getPackage().getName().replace('.', File.separatorChar));
+ }
+
protected String loadFile(File f) throws FileNotFoundException, IOException {
return TestUtil.removeTxtCopyrightComment(loadFile(f, getDefaultCharset()));
}
diff --git a/src/test/java/freemarker/test/utility/MissingRequiredParameterException.java b/freemarker-test/src/test/java/freemarker/test/utility/MissingRequiredParameterException.java
similarity index 100%
rename from src/test/java/freemarker/test/utility/MissingRequiredParameterException.java
rename to freemarker-test/src/test/java/freemarker/test/utility/MissingRequiredParameterException.java
diff --git a/src/test/java/freemarker/test/utility/NoOutputDirective.java b/freemarker-test/src/test/java/freemarker/test/utility/NoOutputDirective.java
similarity index 100%
rename from src/test/java/freemarker/test/utility/NoOutputDirective.java
rename to freemarker-test/src/test/java/freemarker/test/utility/NoOutputDirective.java
diff --git a/src/test/java/freemarker/test/utility/ParameterException.java b/freemarker-test/src/test/java/freemarker/test/utility/ParameterException.java
similarity index 100%
rename from src/test/java/freemarker/test/utility/ParameterException.java
rename to freemarker-test/src/test/java/freemarker/test/utility/ParameterException.java
diff --git a/src/test/java/freemarker/test/utility/TestUtil.java b/freemarker-test/src/test/java/freemarker/test/utility/TestUtil.java
similarity index 100%
rename from src/test/java/freemarker/test/utility/TestUtil.java
rename to freemarker-test/src/test/java/freemarker/test/utility/TestUtil.java
diff --git a/src/test/java/freemarker/test/utility/UnsupportedParameterException.java b/freemarker-test/src/test/java/freemarker/test/utility/UnsupportedParameterException.java
similarity index 100%
rename from src/test/java/freemarker/test/utility/UnsupportedParameterException.java
rename to freemarker-test/src/test/java/freemarker/test/utility/UnsupportedParameterException.java
diff --git a/src/test/resources/META-INF/tldDiscovery MetaInfTldSources-1.tld b/freemarker-test/src/test/resources/META-INF/tldDiscovery MetaInfTldSources-1.tld
similarity index 100%
rename from src/test/resources/META-INF/tldDiscovery MetaInfTldSources-1.tld
rename to freemarker-test/src/test/resources/META-INF/tldDiscovery MetaInfTldSources-1.tld
diff --git a/src/test/resources/freemarker/cache/test.ftl b/freemarker-test/src/test/resources/freemarker/cache/test.ftl
similarity index 100%
rename from src/test/resources/freemarker/cache/test.ftl
rename to freemarker-test/src/test/resources/freemarker/cache/test.ftl
diff --git a/src/test/resources/freemarker/core/ast-1.ast b/freemarker-test/src/test/resources/freemarker/core/ast-1.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-1.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-1.ast
diff --git a/src/test/resources/freemarker/core/ast-1.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-1.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-1.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-1.ftl
diff --git a/src/test/resources/freemarker/core/ast-assignments.ast b/freemarker-test/src/test/resources/freemarker/core/ast-assignments.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-assignments.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-assignments.ast
diff --git a/src/test/resources/freemarker/core/ast-assignments.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-assignments.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-assignments.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-assignments.ftl
diff --git a/src/test/resources/freemarker/core/ast-builtins.ast b/freemarker-test/src/test/resources/freemarker/core/ast-builtins.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-builtins.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-builtins.ast
diff --git a/src/test/resources/freemarker/core/ast-builtins.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-builtins.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-builtins.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-builtins.ftl
diff --git a/src/test/resources/freemarker/core/ast-lambda.ast b/freemarker-test/src/test/resources/freemarker/core/ast-lambda.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-lambda.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-lambda.ast
diff --git a/src/test/resources/freemarker/core/ast-lambda.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-lambda.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-lambda.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-lambda.ftl
diff --git a/src/test/resources/freemarker/core/ast-locations.ast b/freemarker-test/src/test/resources/freemarker/core/ast-locations.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-locations.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-locations.ast
diff --git a/src/test/resources/freemarker/core/ast-locations.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-locations.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-locations.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-locations.ftl
diff --git a/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ast b/freemarker-test/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ast
diff --git a/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-mixedcontentsimplifications.ftl
diff --git a/src/test/resources/freemarker/core/ast-multipleignoredchildren.ast b/freemarker-test/src/test/resources/freemarker/core/ast-multipleignoredchildren.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-multipleignoredchildren.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-multipleignoredchildren.ast
diff --git a/src/test/resources/freemarker/core/ast-multipleignoredchildren.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-multipleignoredchildren.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-multipleignoredchildren.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-multipleignoredchildren.ftl
diff --git a/src/test/resources/freemarker/core/ast-nestedignoredchildren.ast b/freemarker-test/src/test/resources/freemarker/core/ast-nestedignoredchildren.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-nestedignoredchildren.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-nestedignoredchildren.ast
diff --git a/src/test/resources/freemarker/core/ast-nestedignoredchildren.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-nestedignoredchildren.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-nestedignoredchildren.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-nestedignoredchildren.ftl
diff --git a/src/test/resources/freemarker/core/ast-range.ast b/freemarker-test/src/test/resources/freemarker/core/ast-range.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-range.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-range.ast
diff --git a/src/test/resources/freemarker/core/ast-range.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-range.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-range.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-range.ftl
diff --git a/src/test/resources/freemarker/core/ast-strlitinterpolation.ast b/freemarker-test/src/test/resources/freemarker/core/ast-strlitinterpolation.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-strlitinterpolation.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-strlitinterpolation.ast
diff --git a/src/test/resources/freemarker/core/ast-strlitinterpolation.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-strlitinterpolation.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-strlitinterpolation.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-strlitinterpolation.ftl
diff --git a/src/test/resources/freemarker/core/ast-whitespacestripping.ast b/freemarker-test/src/test/resources/freemarker/core/ast-whitespacestripping.ast
similarity index 100%
rename from src/test/resources/freemarker/core/ast-whitespacestripping.ast
rename to freemarker-test/src/test/resources/freemarker/core/ast-whitespacestripping.ast
diff --git a/src/test/resources/freemarker/core/ast-whitespacestripping.ftl b/freemarker-test/src/test/resources/freemarker/core/ast-whitespacestripping.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/ast-whitespacestripping.ftl
rename to freemarker-test/src/test/resources/freemarker/core/ast-whitespacestripping.ftl
diff --git a/src/test/resources/freemarker/core/cano-assignments.ftl b/freemarker-test/src/test/resources/freemarker/core/cano-assignments.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/cano-assignments.ftl
rename to freemarker-test/src/test/resources/freemarker/core/cano-assignments.ftl
diff --git a/src/test/resources/freemarker/core/cano-assignments.ftl.out b/freemarker-test/src/test/resources/freemarker/core/cano-assignments.ftl.out
similarity index 100%
rename from src/test/resources/freemarker/core/cano-assignments.ftl.out
rename to freemarker-test/src/test/resources/freemarker/core/cano-assignments.ftl.out
diff --git a/src/test/resources/freemarker/core/cano-builtins.ftl b/freemarker-test/src/test/resources/freemarker/core/cano-builtins.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/cano-builtins.ftl
rename to freemarker-test/src/test/resources/freemarker/core/cano-builtins.ftl
diff --git a/src/test/resources/freemarker/core/cano-builtins.ftl.out b/freemarker-test/src/test/resources/freemarker/core/cano-builtins.ftl.out
similarity index 100%
rename from src/test/resources/freemarker/core/cano-builtins.ftl.out
rename to freemarker-test/src/test/resources/freemarker/core/cano-builtins.ftl.out
diff --git a/src/test/resources/freemarker/core/cano-identifier-escaping.ftl b/freemarker-test/src/test/resources/freemarker/core/cano-identifier-escaping.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/cano-identifier-escaping.ftl
rename to freemarker-test/src/test/resources/freemarker/core/cano-identifier-escaping.ftl
diff --git a/src/test/resources/freemarker/core/cano-identifier-escaping.ftl.out b/freemarker-test/src/test/resources/freemarker/core/cano-identifier-escaping.ftl.out
similarity index 100%
rename from src/test/resources/freemarker/core/cano-identifier-escaping.ftl.out
rename to freemarker-test/src/test/resources/freemarker/core/cano-identifier-escaping.ftl.out
diff --git a/src/test/resources/freemarker/core/cano-macros.ftl b/freemarker-test/src/test/resources/freemarker/core/cano-macros.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/cano-macros.ftl
rename to freemarker-test/src/test/resources/freemarker/core/cano-macros.ftl
diff --git a/src/test/resources/freemarker/core/cano-macros.ftl.out b/freemarker-test/src/test/resources/freemarker/core/cano-macros.ftl.out
similarity index 100%
rename from src/test/resources/freemarker/core/cano-macros.ftl.out
rename to freemarker-test/src/test/resources/freemarker/core/cano-macros.ftl.out
diff --git a/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl b/freemarker-test/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/cano-strlitinterpolation.ftl
rename to freemarker-test/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl
diff --git a/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl.out b/freemarker-test/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl.out
similarity index 100%
rename from src/test/resources/freemarker/core/cano-strlitinterpolation.ftl.out
rename to freemarker-test/src/test/resources/freemarker/core/cano-strlitinterpolation.ftl.out
diff --git a/src/test/resources/freemarker/core/encodingOverride-ISO-8859-1.ftl b/freemarker-test/src/test/resources/freemarker/core/encodingOverride-ISO-8859-1.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/encodingOverride-ISO-8859-1.ftl
rename to freemarker-test/src/test/resources/freemarker/core/encodingOverride-ISO-8859-1.ftl
diff --git a/src/test/resources/freemarker/core/encodingOverride-UTF-8.ftl b/freemarker-test/src/test/resources/freemarker/core/encodingOverride-UTF-8.ftl
similarity index 100%
rename from src/test/resources/freemarker/core/encodingOverride-UTF-8.ftl
rename to freemarker-test/src/test/resources/freemarker/core/encodingOverride-UTF-8.ftl
diff --git a/src/test/resources/freemarker/ext/dom/DOMSiblingTest.xml b/freemarker-test/src/test/resources/freemarker/ext/dom/DOMSiblingTest.xml
similarity index 100%
rename from src/test/resources/freemarker/ext/dom/DOMSiblingTest.xml
rename to freemarker-test/src/test/resources/freemarker/ext/dom/DOMSiblingTest.xml
diff --git a/src/test/resources/freemarker/ext/jsp/TLDParsingTest.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/TLDParsingTest.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/TLDParsingTest.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/TLDParsingTest.tld
diff --git a/src/test/resources/freemarker/ext/jsp/templates/classpath-test.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/templates/classpath-test.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/templates/classpath-test.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/templates/classpath-test.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-1.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-1.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-1.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-1.tld
diff --git a/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-2.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-2.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-2.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/tldDiscovery-ClassPathTlds-2.tld
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/CONTENTS.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/CONTENTS.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/CONTENTS.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/CONTENTS.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-function-tag-name-clash.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-function-tag-name-clash.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-function-tag-name-clash.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-function-tag-name-clash.tld
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-functions.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-functions.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-functions.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/el-functions.tld
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.0.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.0.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.0.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.0.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.22-future.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.22-future.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.22-future.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes-2.3.22-future.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/attributes.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/customTags1.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/customTags1.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/customTags1.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/expected/customTags1.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/test.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/test.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/test.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/test.tld
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/web.xml b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/web.xml
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/web.xml
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/WEB-INF/web.xml
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/attributes.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/attributes.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/attributes.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/attributes.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.jsp b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.jsp
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.jsp
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customELFunctions1.jsp
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/customTags1.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customTags1.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/customTags1.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/customTags1.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.jsp b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.jsp
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.jsp
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/elFunctionsTagNameClash.jsp
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial-jstl-@Ignore.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial-jstl-@Ignore.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/trivial-jstl-@Ignore.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial-jstl-@Ignore.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.jsp b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.jsp
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.jsp
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/basic/trivial.jsp
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/config/CONTENTS.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/CONTENTS.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/config/CONTENTS.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/CONTENTS.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/sub/test.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/sub/test.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/sub/test.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/sub/test.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/test.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/test.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/test.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/classes/test.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/lib/templates.jar/sub/test2.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/lib/templates.jar/sub/test2.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/lib/templates.jar/sub/test2.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/lib/templates.jar/sub/test2.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/templates/test.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/templates/test.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/templates/test.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/templates/test.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/web.xml b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/web.xml
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/web.xml
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/WEB-INF/web.xml
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/config/test.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/test.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/config/test.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/config/test.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/errors/CONTENTS.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/CONTENTS.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/errors/CONTENTS.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/CONTENTS.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/errors/WEB-INF/web.xml b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/WEB-INF/web.xml
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/errors/WEB-INF/web.xml
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/WEB-INF/web.xml
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.ftlnv b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.ftlnv
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.ftlnv
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.ftlnv
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.jsp b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.jsp
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.jsp
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-parsetime.jsp
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.jsp b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.jsp
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.jsp
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/failing-runtime.jsp
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/errors/not-failing.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/not-failing.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/errors/not-failing.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/errors/not-failing.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/CONTENTS.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/CONTENTS.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/CONTENTS.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/CONTENTS.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/templates/test.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/templates/test.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/templates/test.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/templates/test.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/web.xml b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/web.xml
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/web.xml
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/multipleLoaders/WEB-INF/web.xml
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/CONTENTS.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/CONTENTS.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/CONTENTS.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/CONTENTS.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/subdir/test-rel.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/subdir/test-rel.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/subdir/test-rel.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/subdir/test-rel.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test-noClasspath.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test-noClasspath.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test-noClasspath.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test-noClasspath.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test1.txt b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test1.txt
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test1.txt
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/expected/test1.txt
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag 2.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag 2.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag 2.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag 2.tld
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag4.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag4.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag4.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/fmtesttag4.tld
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/lib/taglib-foo.jar/META-INF/foo bar.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/lib/taglib-foo.jar/META-INF/foo bar.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/lib/taglib-foo.jar/META-INF/foo bar.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/lib/taglib-foo.jar/META-INF/foo bar.tld
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/subdir-with-tld/fmtesttag3.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/subdir-with-tld/fmtesttag3.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/subdir-with-tld/fmtesttag3.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/subdir-with-tld/fmtesttag3.tld
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/taglib 2.jar/META-INF/taglib.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/taglib 2.jar/META-INF/taglib.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/taglib 2.jar/META-INF/taglib.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/taglib 2.jar/META-INF/taglib.tld
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/web.xml b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/web.xml
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/web.xml
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/WEB-INF/web.xml
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/not-auto-scanned/fmtesttag.tld b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/not-auto-scanned/fmtesttag.tld
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/not-auto-scanned/fmtesttag.tld
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/not-auto-scanned/fmtesttag.tld
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/subdir/test-rel.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/subdir/test-rel.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/subdir/test-rel.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/subdir/test-rel.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test-noClasspath.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test-noClasspath.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test-noClasspath.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test-noClasspath.ftl
diff --git a/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test1.ftl b/freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test1.ftl
similarity index 100%
rename from src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test1.ftl
rename to freemarker-test/src/test/resources/freemarker/ext/jsp/webapps/tldDiscovery/test1.ftl
diff --git a/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-foo.ftl b/freemarker-test/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-foo.ftl
similarity index 100%
rename from src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-foo.ftl
rename to freemarker-test/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-foo.ftl
diff --git a/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-lib.ftl b/freemarker-test/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-lib.ftl
similarity index 100%
rename from src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-lib.ftl
rename to freemarker-test/src/test/resources/freemarker/manual/AbsoluteTemplateNameBIExample-lib.ftl
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh.out b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh.out
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh.out
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-capture.ftlh.out
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh.out b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh.out
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh.out
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert.ftlh.out
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl.out b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl.out
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl.out
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-convert2.ftl.out
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh.out b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh.out
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh.out
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-infoBox.ftlh.out
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh.out b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh.out
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh.out
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-markup.ftlh.out
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh.out b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh.out
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh.out
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringConcat.ftlh.out
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh.out b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh.out
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh.out
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral.ftlh.out
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh
diff --git a/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh.out b/freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh.out
similarity index 100%
rename from src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh.out
rename to freemarker-test/src/test/resources/freemarker/manual/AutoEscapingExample-stringLiteral2.ftlh.out
diff --git a/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples1.properties b/freemarker-test/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples1.properties
similarity index 100%
rename from src/test/resources/freemarker/manual/ConfigureOutputFormatExamples1.properties
rename to freemarker-test/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples1.properties
diff --git a/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples2.properties b/freemarker-test/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples2.properties
similarity index 100%
rename from src/test/resources/freemarker/manual/ConfigureOutputFormatExamples2.properties
rename to freemarker-test/src/test/resources/freemarker/manual/ConfigureOutputFormatExamples2.properties
diff --git a/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh b/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh
diff --git a/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh.out b/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh.out
similarity index 100%
rename from src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh.out
rename to freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias1.ftlh.out
diff --git a/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh b/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh
diff --git a/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh.out b/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh.out
similarity index 100%
rename from src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh.out
rename to freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-alias2.ftlh.out
diff --git a/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh b/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh
diff --git a/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh.out b/freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh.out
similarity index 100%
rename from src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh.out
rename to freemarker-test/src/test/resources/freemarker/manual/CustomFormatsExample-modelAware.ftlh.out
diff --git a/src/test/resources/freemarker/manual/TemplateConfigurationExamples1.properties b/freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples1.properties
similarity index 100%
rename from src/test/resources/freemarker/manual/TemplateConfigurationExamples1.properties
rename to freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples1.properties
diff --git a/src/test/resources/freemarker/manual/TemplateConfigurationExamples2.properties b/freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples2.properties
similarity index 100%
rename from src/test/resources/freemarker/manual/TemplateConfigurationExamples2.properties
rename to freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples2.properties
diff --git a/src/test/resources/freemarker/manual/TemplateConfigurationExamples3.properties b/freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples3.properties
similarity index 100%
rename from src/test/resources/freemarker/manual/TemplateConfigurationExamples3.properties
rename to freemarker-test/src/test/resources/freemarker/manual/TemplateConfigurationExamples3.properties
diff --git a/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl b/freemarker-test/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl
similarity index 100%
rename from src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl
rename to freemarker-test/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl
diff --git a/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl.out b/freemarker-test/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl.out
similarity index 100%
rename from src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl.out
rename to freemarker-test/src/test/resources/freemarker/manual/WithArgsExamples-usingWithArgsSpecialVariable.ftl.out
diff --git a/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl b/freemarker-test/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl
similarity index 100%
rename from src/test/resources/freemarker/manual/WithArgsLastExamples.ftl
rename to freemarker-test/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl
diff --git a/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl.out b/freemarker-test/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl.out
similarity index 100%
rename from src/test/resources/freemarker/manual/WithArgsLastExamples.ftl.out
rename to freemarker-test/src/test/resources/freemarker/manual/WithArgsLastExamples.ftl.out
diff --git a/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-foo.ftl b/freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-foo.ftl
similarity index 100%
rename from src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-foo.ftl
rename to freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-foo.ftl
diff --git a/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl b/freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl
similarity index 100%
rename from src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl
rename to freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl
diff --git a/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl.out b/freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl.out
similarity index 100%
rename from src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl.out
rename to freemarker-test/src/test/resources/freemarker/manual/dir/AbsoluteTemplateNameBIExample-main.ftl.out
diff --git a/src/test/resources/freemarker/manual/test.ftlh b/freemarker-test/src/test/resources/freemarker/manual/test.ftlh
similarity index 100%
rename from src/test/resources/freemarker/manual/test.ftlh
rename to freemarker-test/src/test/resources/freemarker/manual/test.ftlh
diff --git a/src/test/resources/freemarker/template/toCache1.ftl b/freemarker-test/src/test/resources/freemarker/template/toCache1.ftl
similarity index 100%
rename from src/test/resources/freemarker/template/toCache1.ftl
rename to freemarker-test/src/test/resources/freemarker/template/toCache1.ftl
diff --git a/src/test/resources/freemarker/template/toCache2.ftl b/freemarker-test/src/test/resources/freemarker/template/toCache2.ftl
similarity index 100%
rename from src/test/resources/freemarker/template/toCache2.ftl
rename to freemarker-test/src/test/resources/freemarker/template/toCache2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/arithmetic.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/arithmetic.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/arithmetic.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/arithmetic.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/bean-maps.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/bean-maps.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/bean-maps.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/bean-maps.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/beans.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/beans.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/beans.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/beans.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/boolean-formatting.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/boolean-formatting.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/boolean-formatting.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/boolean-formatting.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/boolean.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/boolean.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/boolean.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/boolean.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/charset-in-header.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/charset-in-header.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/charset-in-header.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/charset-in-header.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/classic-compatible.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/classic-compatible.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/classic-compatible.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/classic-compatible.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/comment.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/comment.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/comment.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/comment.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/comparisons.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/comparisons.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/comparisons.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/comparisons.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/compress.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/compress.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/compress.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/compress.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/dateformat-java.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/dateformat-java.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/dateformat-java.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/dateformat-java.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/default-xmlns.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/default-xmlns.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/default-xmlns.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/default-xmlns.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/default.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/default.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/default.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/default.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins-ici-2.3.20.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins-ici-2.3.20.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins-ici-2.3.20.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins-ici-2.3.20.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/encoding-builtins.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/escapes.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/escapes.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/escapes.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/escapes.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/exception.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/exception.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/exception2.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception2.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/exception2.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception2.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/exception3.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception3.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/exception3.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exception3.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/exthash.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exthash.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/exthash.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/exthash.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/hashconcat.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/hashconcat.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/hashconcat.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/hashconcat.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/hashliteral.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/hashliteral.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/hashliteral.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/hashliteral.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/helloworld.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/helloworld.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/helloworld.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/helloworld.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/identifier-escaping.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/identifier-escaping.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/identifier-escaping.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/identifier-escaping.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/identifier-non-ascii.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/identifier-non-ascii.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/identifier-non-ascii.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/identifier-non-ascii.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/if.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/if.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/if.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/if.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/import.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/import.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/import.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/import.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/include.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/include.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/include.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/include.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/include2.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/include2.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/include2.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/include2.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/interpret.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/interpret.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/interpret.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/interpret.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/iterators.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/iterators.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/iterators.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/iterators.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/lastcharacter.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/lastcharacter.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/lastcharacter.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/lastcharacter.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/list-bis.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list-bis.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/list-bis.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list-bis.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/list.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/list.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/list2.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list2.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/list2.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list2.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/list3.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list3.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/list3.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/list3.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/listhash.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhash.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/listhash.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhash.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.20.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listhashliteral-ici-2.3.21.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/listliteral.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listliteral.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/listliteral.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/listliteral.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/localization.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/localization.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/localization.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/localization.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/logging.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/logging.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/logging.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/logging.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/loopvariable.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/loopvariable.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/loopvariable.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/loopvariable.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/macros-return.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros-return.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/macros-return.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros-return.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/macros.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/macros.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/macros2.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros2.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/macros2.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/macros2.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/multimodels.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/multimodels.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/multimodels.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/multimodels.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/nested.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/nested.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/nested.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/nested.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/new-allowsnothing.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-allowsnothing.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/new-allowsnothing.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-allowsnothing.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/new-defaultresolver.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-defaultresolver.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/new-defaultresolver.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-defaultresolver.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/new-optin.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-optin.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/new-optin.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-optin.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/new-safer.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-safer.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/new-safer.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-safer.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/new-unrestricted.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-unrestricted.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/new-unrestricted.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/new-unrestricted.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/newlines1.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/newlines1.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/newlines1.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/newlines1.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/newlines2.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/newlines2.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/newlines2.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/newlines2.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/non-strict-syntax.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/non-strict-syntax.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/non-strict-syntax.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/non-strict-syntax.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/noparse.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/noparse.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/noparse.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/noparse.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/number-format.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-format.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/number-format.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-format.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/number-literal.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-literal.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/number-literal.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-literal.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/number-to-date.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-to-date.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/number-to-date.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/number-to-date.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/numerical-cast.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/numerical-cast.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/numerical-cast.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/numerical-cast.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/output-encoding1.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding1.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/output-encoding1.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding1.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/output-encoding2.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding2.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/output-encoding2.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding2.txt
Binary files differ
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/output-encoding3.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding3.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/output-encoding3.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/output-encoding3.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/precedence.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/precedence.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/precedence.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/precedence.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/recover.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/recover.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/recover.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/recover.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/root.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/root.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/root.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/root.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/sequence-builtins.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/sequence-builtins.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/sequence-builtins.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/sequence-builtins.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/specialvars.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/strictinheader.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/strictinheader.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/strictinheader.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/strictinheader.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps-matches.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps-matches.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps-matches.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps-matches.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins-regexps.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/string-builtins1.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins1.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/string-builtins1.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins1.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/string-builtins2.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins2.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/string-builtins2.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/string-builtins2.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/stringbimethods.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/stringbimethods.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/stringbimethods.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/stringbimethods.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/stringliteral.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/stringliteral.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/stringliteral.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/stringliteral.txt
Binary files differ
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/switch.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/switch.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/switch.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/switch.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/transforms.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/transforms.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/transforms.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/transforms.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.21.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.21.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.21.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.21.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/type-builtins.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/type-builtins.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/type-builtins.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/var-layers.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/var-layers.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/var-layers.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/var-layers.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/varargs.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/varargs.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/varargs.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/varargs.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/variables.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/variables.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/variables.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/variables.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/whitespace-trim.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/whitespace-trim.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/whitespace-trim.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/whitespace-trim.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/wstrip-in-header.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/wstrip-in-header.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/wstrip-in-header.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/wstrip-in-header.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/wstripping.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/wstripping.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/wstripping.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/wstripping.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/xml-fragment.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml-fragment.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/xml-fragment.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml-fragment.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/xml-ns_prefix-scope.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml-ns_prefix-scope.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/xml-ns_prefix-scope.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml-ns_prefix-scope.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/xml.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/xml.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xml.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/xmlns1.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns1.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/xmlns1.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns1.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/xmlns3.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns3.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/xmlns3.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns3.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/xmlns4.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns4.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/xmlns4.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns4.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/xmlns5.txt b/freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns5.txt
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/expected/xmlns5.txt
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/expected/xmlns5.txt
diff --git a/src/test/resources/freemarker/test/templatesuite/models/BeansTestResources.properties b/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/BeansTestResources.properties
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/models/BeansTestResources.properties
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/models/BeansTestResources.properties
diff --git a/src/test/resources/freemarker/test/templatesuite/models/defaultxmlns1.xml b/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/defaultxmlns1.xml
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/models/defaultxmlns1.xml
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/models/defaultxmlns1.xml
diff --git a/src/test/resources/freemarker/test/templatesuite/models/xml-ns_prefix-scope.xml b/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xml-ns_prefix-scope.xml
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/models/xml-ns_prefix-scope.xml
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xml-ns_prefix-scope.xml
diff --git a/src/test/resources/freemarker/test/templatesuite/models/xml.xml b/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xml.xml
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/models/xml.xml
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xml.xml
diff --git a/src/test/resources/freemarker/test/templatesuite/models/xmlfragment.xml b/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlfragment.xml
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/models/xmlfragment.xml
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlfragment.xml
diff --git a/src/test/resources/freemarker/test/templatesuite/models/xmlns.xml b/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns.xml
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/models/xmlns.xml
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns.xml
diff --git a/src/test/resources/freemarker/test/templatesuite/models/xmlns2.xml b/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns2.xml
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/models/xmlns2.xml
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns2.xml
diff --git a/src/test/resources/freemarker/test/templatesuite/models/xmlns3.xml b/freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns3.xml
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/models/xmlns3.xml
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/models/xmlns3.xml
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/api-builtins.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/api-builtins.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/api-builtins.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/api-builtins.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/arithmetic.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/arithmetic.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/arithmetic.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/arithmetic.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/assignments.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/assignments.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/assignments.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/assignments.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/bean-maps.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/bean-maps.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/bean-maps.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/bean-maps.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/beans.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/beans.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/beans.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/beans.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/boolean-formatting.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/boolean-formatting.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/boolean-formatting.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/boolean-formatting.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/boolean.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/boolean.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/boolean.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/boolean.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/charset-in-header.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc1.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc1.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc1.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc1.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/charset-in-header_inc2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible-mode2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible-mode2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/classic-compatible-mode2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible-mode2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/classic-compatible.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/classic-compatible.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/comment.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/comment.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/comment.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/comment.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/comparisons.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/comparisons.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/comparisons.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/comparisons.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/compress.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/compress.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/compress.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/compress.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/date-type-builtins.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/date-type-builtins.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/date-type-builtins.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/date-type-builtins.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-common.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-common.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-common.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-common.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-ici-2.3.21.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-ici-2.3.21.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-ici-2.3.21.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi-ici-2.3.21.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-bi.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-like.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-like.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-like.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-iso-like.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/dateformat-java.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-java.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/dateformat-java.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateformat-java.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/dateparsing.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateparsing.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/dateparsing.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/dateparsing.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/default-xmlns.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/default-xmlns.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/default-xmlns.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/default-xmlns.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/default.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/default.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/default.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/default.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/encoding-builtins.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/encoding-builtins.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/encoding-builtins.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/encoding-builtins.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/escapes.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/escapes.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/escapes.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/escapes.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/exception.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/exception.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/exception2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/exception2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/exception3.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception3.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/exception3.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/exception3.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/existence-operators.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/existence-operators.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/existence-operators.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/existence-operators.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/hashconcat.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/hashconcat.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/hashconcat.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/hashconcat.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/hashliteral.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/hashliteral.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/hashliteral.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/hashliteral.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/helloworld.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/helloworld.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/helloworld.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/helloworld.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/identifier-escaping.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/identifier-escaping.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/identifier-escaping.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/identifier-escaping.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/identifier-non-ascii.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/identifier-non-ascii.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/identifier-non-ascii.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/identifier-non-ascii.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/if.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/if.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/if.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/if.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/import.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/import.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/import.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/import.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/import_lib.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/import_lib.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/import_lib.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/import_lib.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/include.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/include.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/include2-included-encoding.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2-included-encoding.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/include2-included-encoding.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2-included-encoding.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/include2-included.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2-included.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/include2-included.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2-included.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/include2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/include2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/include2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/included.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/included.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/included.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/included.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/interpret.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/interpret.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/interpret.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/interpret.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/iterators.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/iterators.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/iterators.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/iterators.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/lastcharacter.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/lastcharacter.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/lastcharacter.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/lastcharacter.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/list-bis.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list-bis.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/list-bis.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list-bis.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/list.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/list.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/list2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/list2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/list3.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list3.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/list3.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/list3.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/listhash.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listhash.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/listhash.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listhash.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listhashliteral.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/listliteral.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listliteral.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/listliteral.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/listliteral.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/localization.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/localization.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/localization_en.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization_en.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/localization_en.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization_en.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/localization_en_AU.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization_en_AU.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/localization_en_AU.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/localization_en_AU.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/logging.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/logging.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/logging.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/logging.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/loopvariable.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/loopvariable.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/loopvariable.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/loopvariable.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/macros-return.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros-return.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/macros-return.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros-return.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/macros.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/macros.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/macros2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/macros2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/macros2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/multimodels.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/multimodels.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/multimodels.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/multimodels.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/nested.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/nested.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/nested.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/nested.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/nestedinclude.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/nestedinclude.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/nestedinclude.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/nestedinclude.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/new-allowsnothing.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-allowsnothing.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/new-allowsnothing.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-allowsnothing.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/new-defaultresolver.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-defaultresolver.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/new-defaultresolver.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-defaultresolver.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/new-optin.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-optin.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/new-optin.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-optin.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/new-safer.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-safer.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/new-safer.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-safer.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/new-unrestricted.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-unrestricted.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/new-unrestricted.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/new-unrestricted.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/newlines1.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/newlines1.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/newlines1.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/newlines1.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/newlines2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/newlines2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/newlines2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/newlines2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/non-strict-syntax.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/non-strict-syntax.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/non-strict-syntax.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/non-strict-syntax.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/noparse.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/noparse.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/noparse.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/noparse.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/number-format.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-format.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/number-format.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-format.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/number-literal.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-literal.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/number-literal.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-literal.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/number-math-builtins.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-math-builtins.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/number-math-builtins.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-math-builtins.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/number-to-date.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-to-date.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/number-to-date.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/number-to-date.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/numerical-cast.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/numerical-cast.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/numerical-cast.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/numerical-cast.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/output-encoding1.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding1.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/output-encoding1.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding1.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/output-encoding2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/output-encoding2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/output-encoding3.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding3.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/output-encoding3.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/output-encoding3.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.20.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.20.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.20.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.20.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.21.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.21.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.21.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-bwici-2.3.21.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-common.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-common.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-common.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-common.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-desc-bwici-2.3.20.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-desc-bwici-2.3.20.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-desc-bwici-2.3.20.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-desc-bwici-2.3.20.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-inc-bwici-2.3.20.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-inc-bwici-2.3.20.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-inc-bwici-2.3.20.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-2-inc-bwici-2.3.20.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-23bc.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-23bc.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-23bc.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/overloaded-methods-23bc.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/precedence.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/precedence.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/precedence.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/precedence.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/range-common.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-common.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/range-common.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-common.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.20.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.20.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.20.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.20.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.21.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.21.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.21.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-ici-2.3.21.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/range-lazy.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-lazy.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/range-lazy.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/range-lazy.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/recover.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/recover.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/recover.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/recover.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/root.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/root.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/root.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/root.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/sequence-builtins.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/sequence-builtins.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/sequence-builtins.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/sequence-builtins.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/setting.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/setting.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/simplehash-char-key.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/simplehash-char-key.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/simplehash-char-key.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/simplehash-char-key.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/specialvars.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/strictinheader.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/strictinheader.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc1.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc1.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc1.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc1.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/strictinheader_inc2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/string-builtin-coercion.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtin-coercion.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/string-builtin-coercion.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtin-coercion.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.19.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.19.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.19.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.19.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.20.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.20.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.20.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-ici-2.3.20.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps-matches.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps-matches.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps-matches.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps-matches.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins-regexps.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/string-builtins1.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins1.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/string-builtins1.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins1.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/string-builtins2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/string-builtins2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/string-builtins3.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins3.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/string-builtins3.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/string-builtins3.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/stringbimethods.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/stringbimethods.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/stringbimethods.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/stringbimethods.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/stringliteral.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/stringliteral.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/stringliteral.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/stringliteral.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/include-subdir2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin-2.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin-2.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin-2.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin-2.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/new-optin.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/subdir/subsub/new-optin.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/subsub/new-optin.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/subdir/subsub/new-optin.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/subdir/subsub/new-optin.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/switch-builtin.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/switch-builtin.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/switch-builtin.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/switch-builtin.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/switch.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/switch.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/switch.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/switch.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/then-builtin.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/then-builtin.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/then-builtin.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/then-builtin.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/transforms.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/transforms.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/transforms.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/transforms.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/type-builtins.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/type-builtins.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/type-builtins.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/type-builtins.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/undefined.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/undefined.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/undefined.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/undefined.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/url.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/url.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/url.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/url.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/var-layers.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/var-layers.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/var-layers.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/var-layers.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/varargs.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/varargs.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/varargs.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/varargs.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/variables.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/variables.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/variables.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/variables.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/varlayers_lib.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/varlayers_lib.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/varlayers_lib.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/varlayers_lib.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/whitespace-trim.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/whitespace-trim.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/whitespace-trim.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/whitespace-trim.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/wsstripinheader_inc.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/wsstripinheader_inc.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/wsstripinheader_inc.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/wsstripinheader_inc.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/wstrip-in-header.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/wstrip-in-header.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/wstrip-in-header.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/wstrip-in-header.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/xml-fragment.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-fragment.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/xml-fragment.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-fragment.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-lib.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-lib.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-lib.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-lib.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-main.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-main.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-main.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml-ns_prefix-scope-main.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/xml.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/xml.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xml.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/xmlns1.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns1.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/xmlns1.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns1.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/xmlns3.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns3.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/xmlns3.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns3.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/xmlns4.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns4.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/xmlns4.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns4.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/templates/xmlns5.ftl b/freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns5.ftl
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/templates/xmlns5.ftl
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/templates/xmlns5.ftl
diff --git a/src/test/resources/freemarker/test/templatesuite/testcases.xml b/freemarker-test/src/test/resources/freemarker/test/templatesuite/testcases.xml
similarity index 100%
rename from src/test/resources/freemarker/test/templatesuite/testcases.xml
rename to freemarker-test/src/test/resources/freemarker/test/templatesuite/testcases.xml
diff --git a/src/test/resources/logback-test.xml b/freemarker-test/src/test/resources/logback-test.xml
similarity index 100%
rename from src/test/resources/logback-test.xml
rename to freemarker-test/src/test/resources/logback-test.xml
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..41d9927
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..00e33ed
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..1b6c787
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,234 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..107acd3
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/ivy.xml b/ivy.xml
deleted file mode 100644
index cc573d2..0000000
--- a/ivy.xml
+++ /dev/null
@@ -1,193 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<!--
- AFTER CHANGING THIS FILE don't forget to issue: ant update-deps
--->
-<!DOCTYPE ivy-module [
- <!ENTITY jetty.version "9.4.53.v20231009">
- <!ENTITY standardTaglibs.version "1.2.5">
- <!ENTITY slf4j.version "1.6.1">
- <!ENTITY spring.version "2.5.6.SEC03">
-]>
-<ivy-module version="2.0">
- <info organisation="org.freemarker" module="freemarker">
- <license name="Apache License, Version 2.0" url="https://freemarker.apache.org/docs/app_license.html" />
- <description homepage="https://freemarker.apache.org/">
- FreeMarker is a "template engine"; a generic tool to
- generate text output (anything from HTML to autogenerated source
- code) based on templates.
- </description>
- </info>
- <configurations>
- <conf name="default" extends="runtime" />
-
- <conf name="runtime"
- description="for using FreeMarker under J2SE 1.4+ (no optional dependencies included)"
- />
-
- <conf name="build.base" extends="default" visibility="private"
- description="for building FreeMarker without dependencies that optinal dependencies"
- />
-
- <conf name="build.jsp2.0" extends="build.base"
- description="for building FreeMarker with JSP 2.0 support"
- />
- <conf name="build.jsp2.1" extends="build.base"
- description="for building FreeMarker with JSP 2.1 support"
- />
-
- <conf name="build.jython2.0" extends="build.base"
- description="for building FreeMarker with Jython 2.0 support"
- />
- <conf name="build.jython2.2" extends="build.base"
- description="for building FreeMarker with Jython 2.2 support"
- />
- <conf name="build.jython2.5" extends="build.base"
- description="for building FreeMarker with Jython 2.5 support"
- />
-
- <conf name="test" extends="build.jython2.5"
- description="commons for both building and running the FreeMarker test suite"
- />
- <conf name="build.test" extends="test"
- description="for building FreeMarker test suite"
- />
- <conf name="run.test" extends="test"
- description="for running FreeMarker test suite"
- />
-
- <conf name="IDE" extends="build.test"
- description="to be used in IDE-s (maybe with the Ivy plugin)"
- />
-
- <conf name="parser" extends="default" description="for generating parser" />
-
- <conf name="manual" description="for generating the manual with Docgen" />
-
- <conf name="rat" description="for generating the Rat report" />
-
- <conf name="bnd" description="for creating OSGi bundle" />
- </configurations>
- <publications>
- <artifact name="freemarker" type="jar" conf="runtime" ext="jar" />
- </publications>
- <dependencies>
- <!-- build -->
-
- <dependency org="jaxen" name="jaxen" rev="1.0-FCS" conf="build.base->default" />
- <dependency org="saxpath" name="saxpath" rev="1.0-FCS" conf="build.base->default" />
- <dependency org="xalan" name="xalan" rev="2.7.0" conf="build.base->default">
- <!-- The lowerst supported xml-apis version depends on JDK version; prevent any collision: -->
- <exclude org="xml-apis" module="xml-apis" />
- </dependency>
- <dependency org="org.dom4j" name="dom4j" rev="2.1.3" conf="build.base->default" /> <!-- legacy -->
- <dependency org="jdom" name="jdom" rev="1.0b8" conf="build.base->default" /> <!-- legacy -->
-
- <dependency org="ant" name="ant" rev="1.6.5" conf="build.base->default">
- <!-- The lowerst supported xml-apis version depends on JDK version; prevent any collision: -->
- <exclude org="xml-apis" module="xml-apis" />
- </dependency>
-
- <dependency org="javax.servlet.jsp" name="jsp-api" rev="2.0" conf="build.jsp2.0->default" />
- <dependency org="javax.servlet" name="servlet-api" rev="2.4" conf="build.jsp2.0->default" />
- <dependency org="javax.servlet.jsp" name="jsp-api" rev="2.1" conf="build.jsp2.1->default" />
- <dependency org="javax.servlet" name="servlet-api" rev="2.5" conf="build.jsp2.1->default" />
-
- <dependency org="rhino" name="js" rev="1.6R1" conf="build.base->default" />
-
- <!-- We use Jython 2.1 because there was no 2.0 in central; the relevant methods are the same. -->
- <dependency org="jython" name="jython" rev="2.1" conf="build.jython2.0->default" />
- <dependency org="org.python" name="jython" rev="2.2.1" conf="build.jython2.2->default" />
- <dependency org="org.python" name="jython" rev="2.5.0" conf="build.jython2.5->default" />
-
- <dependency org="avalon-logkit" name="avalon-logkit" rev="2.0" conf="build.base->default" />
- <dependency org="org.slf4j" name="slf4j-api" rev="&slf4j.version;" conf="build.base->default" />
- <dependency org="org.slf4j" name="log4j-over-slf4j" rev="&slf4j.version;" conf="build.base->default" />
- <dependency org="org.slf4j" name="jcl-over-slf4j" rev="&slf4j.version;" conf="build.base->default" />
- <dependency org="commons-logging" name="commons-logging" rev="1.1.1" conf="build.base->default" />
-
- <dependency org="org.zeroturnaround" name="javarebel-sdk" rev="1.2.2" conf="build.base->default" />
-
- <!-- Not for build.base, as @SuppressFBWarnings causes compilation warnings in dependent Gradle projects -->
- <dependency org="com.google.code.findbugs" name="annotations" rev="3.0.0" conf="IDE->default; test->default" />
-
- <!--dependency org="javax.script" name="script-api" rev="1.0" conf="build.base->default" /-->
- <!--dependency org="org.visigoths" name="cavalry" rev="1.0" conf="build.base->default" /-->
-
- <!-- test -->
-
- <!-- Note: Ant doesn't contain junit.jar any more -->
- <dependency org="junit" name="junit" rev="4.12" conf="test->default" />
- <dependency org="org.hamcrest" name="hamcrest-library" rev="1.3" conf="test->default" />
-
- <dependency org="ch.qos.logback" name="logback-classic" rev="1.1.2" conf="test->default" />
-
- <dependency org="commons-io" name="commons-io" rev="2.7" conf="test->default" />
- <dependency org="com.google.guava" name="guava" rev="29.0-jre" conf="test->default" />
-
- <dependency org="org.eclipse.jetty" name="jetty-server" rev="&jetty.version;" conf="test->default" />
- <dependency org="org.eclipse.jetty" name="jetty-webapp" rev="&jetty.version;" conf="test->default" />
- <dependency org="org.eclipse.jetty" name="jetty-util" rev="&jetty.version;" conf="test->default" />
- <dependency org="org.eclipse.jetty" name="apache-jsp" rev="&jetty.version;" conf="test->default" />
- <!-- JSP JSTL (not included in Jetty): -->
- <dependency org="org.apache.taglibs" name="taglibs-standard-impl" rev="&standardTaglibs.version;" conf="test->default" />
- <dependency org="org.apache.taglibs" name="taglibs-standard-spec" rev="&standardTaglibs.version;" conf="test->default" />
-
- <dependency org="displaytag" name="displaytag" rev="1.2" conf="test->default">
- <exclude org="com.lowagie" name="itext" />
- <exclude org="org.slf4j" name="slf4j-log4j12" />
- <exclude org="org.slf4j" name="jcl104-over-slf4j" />
- <exclude org="log4j" name="log4j" />
- </dependency>
- <!-- Override Java 9 incompatible version (coming from displaytag): -->
- <dependency org="commons-lang" name="commons-lang" rev="2.6" conf="test->default" />
-
- <dependency org="org.springframework" name="spring-core" rev="&spring.version;" conf="test->default">
- <exclude org="commons-logging" name="commons-logging" />
- </dependency>
- <dependency org="org.springframework" name="spring-test" rev="&spring.version;" conf="test->default">
- <exclude org="commons-logging" name="commons-logging" />
- </dependency>
-
- <!-- docs -->
-
- <dependency org="org.apache.freemarker.docgen" name="freemarker-docgen-ant" rev="0.0.2-SNAPSHOT" conf="manual->default" changing="true" />
-
- <!-- parser -->
-
- <dependency org="net.java.dev.javacc" name="javacc" rev="7.0.12" conf="parser->default" />
-
- <!-- bnd -->
-
- <dependency org="biz.aQute" name="bnd" rev="1.50.0" conf="bnd->default" />
-
- <!-- Rat -->
-
- <dependency org="org.apache.rat" name="apache-rat-tasks" rev="0.11" conf="rat->default" />
-
- <!-- As the tests *run* on Ant, so it's a provided dependency there. -->
- <exclude org="ant" module="ant" conf="run.test" />
-
- <!-- Ensure that JSP versions don't accidentally hide each-other -->
-
- <conflict org="javax.servlet.jsp" module="jsp-api" manager="strict" />
-
- </dependencies>
-</ivy-module>
diff --git a/ivysettings-ci.xml b/ivysettings-ci.xml
deleted file mode 100644
index 3f0dc4c..0000000
--- a/ivysettings-ci.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<ivysettings>
- <!-- We want this to be cacheable, so it has to be outside the project checkout directory: -->
- <caches defaultCacheDir="${user.home}/.ivy-freemarker/cache">
- <cache name="freemarkerCache" useOrigin="true" />
- </caches>
-
- <settings defaultResolver="default" />
- <resolvers>
- <chain name="default">
- <ibiblio name="mavenCentral" m2compatible="true" />
- <ibiblio name="mavenApacheStaging" m2compatible="true" root="https://repository.apache.org/content/repositories/staging/" />
- <ibiblio name="mavenApacheSnapshot" m2compatible="true" root="https://repository.apache.org/content/repositories/snapshots/" />
- </chain>
- </resolvers>
-</ivysettings>
diff --git a/ivysettings.xml b/ivysettings.xml
deleted file mode 100644
index e54516e..0000000
--- a/ivysettings.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
-<ivysettings>
- <!-- As we use our own resolved, we rather don't use the user level Ivy cache: -->
- <caches defaultCacheDir="${ivy.project.dir}/.ivy/cache">
- <cache name="freemarkerCache" useOrigin="true" />
- </caches>
-
- <settings defaultResolver="default" />
- <property name="localMaveRepoDir" value="${user.home}/.m2/repository/" />
- <resolvers>
- <chain name="default">
- <!--
- <filesystem name="mavenLocal" m2compatible="true">
- <artifact pattern="${localMaveRepoDir}/[organisation]/[module]/[revision]/[module]-[revision].[ext]" />
- <ivy pattern="${localMaveRepoDir}/[organisation]/[module]/[revision]/[module]-[revision].pom" />
- </filesystem>
- -->
- <ibiblio name="mavenCentral" m2compatible="true" />
- <ibiblio name="mavenApacheStaging" m2compatible="true" root="https://repository.apache.org/content/repositories/staging/" />
- <ibiblio name="mavenApacheSnapshot" m2compatible="true" root="https://repository.apache.org/content/repositories/snapshots/" />
- </chain>
- </resolvers>
-</ivysettings>
diff --git a/osgi.bnd b/osgi.bnd
index 491eb84..f80220f 100644
--- a/osgi.bnd
+++ b/osgi.bnd
@@ -29,7 +29,7 @@
Bundle-License: Apache License, Version 2.0; see: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-Vendor: freemarker.org
-Include-Resource: META-INF=build/classes/META-INF
+Include-Resource: META-INF=src/dist/jar/META-INF
Export-Package: !freemarker.test.*, freemarker.*;version="${versionForOSGi}"
# Important:
diff --git a/rat-excludes b/rat-excludes
index 221d104..78069ea 100644
--- a/rat-excludes
+++ b/rat-excludes
@@ -5,9 +5,9 @@
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
-#
+#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -19,24 +19,24 @@
# --------
# Generated files basically; see details in the files:
-src/manual/en_US/docgen-misc/googleAnalytics.html
-src/manual/zh_CN/docgen-misc/googleAnalytics.html
+freemarker-manual/src/main/docgen/en_US/docgen-misc/googleAnalytics.html
+freemarker-manual/src/main/docgen/zh_CN/docgen-misc/googleAnalytics.html
# Binaries/archives created in the FreeMarker project:
src/main/misc/overloadedNumberRules/prices.ods
-src/manual/en_US/docgen-originals/figures/overview.odg
-src/manual/en_US/docgen-originals/figures/model2sketch_with_alpha.png
-src/manual/en_US/docgen-originals/figures/tree_with_alpha.png
-src/manual/en_US/favicon.png
-src/manual/en_US/figures/model2sketch.png
-src/manual/en_US/figures/overview.png
-src/manual/en_US/figures/tree.png
-src/manual/en_US/logo.png
-src/manual/zh_CN/favicon.png
-src/manual/zh_CN/figures/model2sketch.png
-src/manual/zh_CN/figures/overview.png
-src/manual/zh_CN/figures/tree.png
-src/manual/zh_CN/logo.png
+freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/overview.odg
+freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/model2sketch_with_alpha.png
+freemarker-manual/src/main/docgen/en_US/docgen-originals/figures/tree_with_alpha.png
+freemarker-manual/src/main/docgen/en_US/favicon.png
+freemarker-manual/src/main/docgen/en_US/figures/model2sketch.png
+freemarker-manual/src/main/docgen/en_US/figures/overview.png
+freemarker-manual/src/main/docgen/en_US/figures/tree.png
+freemarker-manual/src/main/docgen/en_US/logo.png
+freemarker-manual/src/main/docgen/zh_CN/favicon.png
+freemarker-manual/src/main/docgen/zh_CN/figures/model2sketch.png
+freemarker-manual/src/main/docgen/zh_CN/figures/overview.png
+freemarker-manual/src/main/docgen/zh_CN/figures/tree.png
+freemarker-manual/src/main/docgen/zh_CN/logo.png
# Rat thinks it's a binary, but it's UTF-16 text:
src/test/resources/freemarker/test/templatesuite/expected/output-encoding2.txt
@@ -77,4 +77,4 @@
# -------------------------------------------
README.md
-gradlew.bat
\ No newline at end of file
+gradlew.bat
diff --git a/settings.gradle.kts b/settings.gradle.kts
new file mode 100644
index 0000000..f074a2b
--- /dev/null
+++ b/settings.gradle.kts
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+rootProject.name = "freemarker-gae"
+
+pluginManagement {
+ repositories {
+ maven {
+ setUrl("https://repository.apache.org/content/groups/public")
+ mavenContent {
+ includeGroup("org.apache.freemarker.docgen")
+ }
+ }
+ gradlePluginPortal()
+ mavenCentral()
+ }
+}
+
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
+
+ repositories {
+ mavenCentral()
+ }
+}